문제 해결: Apache Airflow v1의 DAG, 연산자, 연결 및 기타 문제 - Amazon Managed Workflows for Apache Airflow

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

문제 해결: Apache Airflow v1의 DAG, 연산자, 연결 및 기타 문제

이 페이지의 항목에는 Amazon Managed Workflows for Apache Airflow 환경에서 발생할 수 있는 Apache Airflow v1.10.12 Python 종속성, 사용자 지정 플러그인, DAG, 연산자, 연결, 작업 및 웹 서버 문제에 대한 해결 방법이 포함되어 있습니다.

requirements.txt 업데이트

다음 항목에서는 requirements.txt 업데이트 시 발생할 수 있는 오류에 대해 설명합니다.

apache-airflow-providers-amazon 추가 시 환경이 실패함

apache-airflow-providers-xyz은 Apache Airflow v2와만 호환됩니다. apache-airflow-backport-providers-xyz은 Apache Airflow 1.10.12와 호환됩니다.

Broken DAG

다음 항목에서는 DAG를 실행할 때 발생할 수 있는 오류에 대해 설명합니다.

Amazon DynamoDB 연산자를 사용할 때 'Broken DAG' 오류가 발생했습니다.

다음 단계를 수행하는 것이 좋습니다.

  1. GitHub의 aws-mwaa-local-runner를 사용하여 DAG, 사용자 지정 플러그인, Python 종속성을 로컬에서 테스트합니다.

  2. requirements.txt에 다음 패키지를 추가합니다.

    boto
  3. requirements.txt 파일에서 Python 종속성을 지정하는 방법을 살펴보려면 requirements.txt에서의 Python 종속성 관리 단원을 참조하십시오.

'Broken DAG: psycopg2라는 이름의 모듈이 없음' 오류가 발생함

다음 단계를 수행하는 것이 좋습니다.

  1. GitHub의 aws-mwaa-local-runner를 사용하여 DAG, 사용자 지정 플러그인, Python 종속성을 로컬에서 테스트합니다.

  2. Apache Airflow 버전을 사용하여 requirements.txt에 다음을 추가합니다. 예:

    apache-airflow[postgres]==1.10.12
  3. requirements.txt 파일에서 Python 종속성을 지정하는 방법을 살펴보려면 requirements.txt에서의 Python 종속성 관리 단원을 참조하십시오.

Slack 연산자를 사용할 때 'Broken DAG' 오류가 발생함

다음 단계를 수행하는 것이 좋습니다.

  1. GitHub의 aws-mwaa-local-runner를 사용하여 DAG, 사용자 지정 플러그인, Python 종속성을 로컬에서 테스트합니다.

  2. requirements.txt에 다음 패키지를 추가하고 Apache Airflow 버전을 지정합니다. 예:

    apache-airflow[slack]==1.10.12
  3. requirements.txt 파일에서 Python 종속성을 지정하는 방법을 살펴보려면 requirements.txt에서의 Python 종속성 관리 단원을 참조하십시오.

Google/GCP/BigQuery를 설치하는 동안 여러 가지 오류가 발생함

Amazon MWAA는 특정 버전의 Cython과 암호화 라이브러리가 필요한 Amazon Linux를 사용합니다. 다음 단계를 수행하는 것이 좋습니다.

  1. GitHub의 aws-mwaa-local-runner를 사용하여 DAG, 사용자 지정 플러그인, Python 종속성을 로컬에서 테스트합니다.

  2. requirements.txt에 다음 패키지를 추가합니다.

    grpcio==1.27.2 cython==0.29.21 pandas-gbq==0.13.3 cryptography==3.3.2 apache-airflow-backport-providers-amazon[google]
  3. 백포트 공급자를 사용하지 않는 경우 다음을 사용할 수 있습니다.

    grpcio==1.27.2 cython==0.29.21 pandas-gbq==0.13.3 cryptography==3.3.2 apache-airflow[gcp]==1.10.12
  4. requirements.txt 파일에서 Python 종속성을 지정하는 방법을 살펴보려면 requirements.txt에서의 Python 종속성 관리 단원을 참조하십시오.

'Broken DAG: Cython이라는 이름의 모듈이 없음' 오류가 발생함

Amazon MWAA는 특정 버전의 Cython이 필요한 Amazon Linux를 사용합니다. 다음 단계를 수행하는 것이 좋습니다.

  1. GitHub의 aws-mwaa-local-runner를 사용하여 DAG, 사용자 지정 플러그인, Python 종속성을 로컬에서 테스트합니다.

  2. requirements.txt에 다음 패키지를 추가합니다.

    cython==0.29.21
  3. Cython 라이브러리에는 다양한 필수 pip 종속성 버전이 있습니다. 예를 들어 awswrangler==2.4.0을 사용하려면 pyarrow<3.1.0,>=2.0.0이 필요하므로 pip3는 pyarrow==3.0.0을 설치하려고 시도하며 이로 인해 Broken DAG 오류가 발생합니다. 허용되는 가장 오래된 버전을 명시적으로 지정하는 것이 좋습니다. 예를 들어, awswrangler==2.4.0 앞에 최소값 pyarrow==2.0.0을 지정하면 오류가 사라지고 requirements.txt가 올바르게 설치됩니다. 최종 요구 사항은 다음과 같아야 합니다.

    cython==0.29.21 pyarrow==2.0.0 awswrangler==2.4.0
  4. requirements.txt 파일에서 Python 종속성을 지정하는 방법을 살펴보려면 requirements.txt에서의 Python 종속성 관리 단원을 참조하십시오.

연산자

다음 항목에서는 연산자를 사용할 때 발생할 수 있는 오류에 대해 설명합니다.

BigQuery 연산자를 사용할 때 오류가 발생함.

Amazon MWAA는 UI 확장이 있는 연산자를 지원하지 않습니다. 다음 단계를 수행하는 것이 좋습니다.

  1. GitHub의 aws-mwaa-local-runner를 사용하여 DAG, 사용자 지정 플러그인, Python 종속성을 로컬에서 테스트합니다.

  2. 해결 방법은 문제 연산자를 가져온 후 설정할 DAG에 <operator name>.operator_extra_links = None을 설정하는 줄을 추가하여 확장을 재정의하는 것입니다. 예:

    from airflow.contrib.operators.bigquery_operator import BigQueryOperator BigQueryOperator.operator_extra_links = None
  3. 위의 내용을 플러그인에 추가하면 모든 DAG에 이 접근 방식을 사용할 수 있습니다. 예시는 Apache Airflow PythonVirtualenvOperator용 사용자 지정 플러그인 생성 단원을 참조하십시오.

연결

다음 항목에서는 Apache Airflow 연결을 사용하거나 다른 AWS 데이터베이스를 사용할 때 발생할 수 있는 오류에 대해 설명합니다.

Snowflake에 연결할 수 없음

다음 단계를 수행하는 것이 좋습니다.

  1. GitHub의 aws-mwaa-local-runner를 사용하여 DAG, 사용자 지정 플러그인, Python 종속성을 로컬에서 테스트합니다.

  2. 사용자 환경의 requirements.txt 파일에 다음 항목을 추가합니다.

    asn1crypto == 0.24.0 snowflake-connector-python == 1.7.2
  3. DAG에 다음 가져오기를 추가합니다.

    from airflow.contrib.hooks.snowflake_hook import SnowflakeHook from airflow.contrib.operators.snowflake_operator import SnowflakeOperator

Apache Airflow 연결 객체에 다음 키-값 쌍이 포함되어 있는지 확인합니다.

  1. Conn Id: snowflake_conn

  2. Conn Type: Snowflake

  3. Host: <my account>.<my region if not us-west-2>.snowflakecomputing.com

  4. Schema: <my schema>

  5. Login: <my user name>

  6. Password: ********

  7. Port: <port, if any>

  8. 추가:

    { "account": "<my account>", "warehouse": "<my warehouse>", "database": "<my database>", "region": "<my region if not using us-west-2 otherwise omit this line>" }

예:

>>> import json >>> from airflow.models.connection import Connection >>> myconn = Connection( ... conn_id='snowflake_conn', ... conn_type='Snowflake', ... host='YOUR_ACCOUNT.YOUR_REGION.snowflakecomputing.com', ... schema='YOUR_SCHEMA' ... login='YOUR_USERNAME', ... password='YOUR_PASSWORD', ... port='YOUR_PORT' ... extra=json.dumps(dict(account='YOUR_ACCOUNT', warehouse='YOUR_WAREHOUSE', database='YOUR_DB_OPTION', region='YOUR_REGION')), ... )

Secrets Manager에 연결할 수 없음

다음 단계를 수행하는 것이 좋습니다.

  1. AWS Secrets Manager 보안 암호를 사용하여 Apache Airflow 연결 구성에서 Apache Airflow 연결 및 변수를 위한 암호 키를 만드는 방법을 알아봅니다.

  2. Apache Airflow 변수에 AWS Secrets Manager 암호 키 사용에서 Apache Airflow 변수(test-variable)에 대해 암호 키를 사용하는 방법을 알아봅니다.

  3. Apache Airflow 연결 AWS Secrets Manager 에의 보안 키 사용에서 Apache Airflow 연결(myconn)에 대해 암호 키를 사용하는 방법을 알아봅니다.

'<DB-identifier-name>.cluster-id.<region>.rds.amazonaws.com'에서 내 MySQL 서버에 연결할 수 없음

Amazon MWAA의 보안 그룹과 RDS 보안 그룹에는 서로 트래픽을 허용하기 위한 수신 규칙이 필요합니다. 다음 단계를 수행하는 것이 좋습니다.

  1. Amazon MWAA의 VPC 보안 그룹에서의 모든 트래픽을 허용할 수 있도록 RDS 보안 그룹을 수정합니다.

  2. RDS 보안 그룹에서의 모든 트래픽을 허용할 수 있도록 Amazon MWAA의 VPC 보안 그룹을 수정합니다.

  3. 작업을 다시 실행하고 CloudWatch Logs에서 Apache Airflow 로그를 확인하여 SQL 쿼리가 성공했는지 확인합니다.

웹 서버

다음 항목에서는 Amazon MWAA의 Apache Airflow 웹 서버에서 발생할 수 있는 오류에 대해 설명합니다.

BigQuery Operator를 사용하고 있는데 이로 인해 웹 서버가 다운됨

다음 단계를 수행하는 것이 좋습니다.

  1. operator_extra_links가 포함된 BigQueryOperatorQuboleOperator와 같은 Apache Airflow 연산자는 Apache Airflow 웹 서버의 작동을 중단시킬 수 있습니다. 이러한 연산자는 보안상의 이유로 허용되지 않는 웹 서버에 코드를 로드하려고 시도합니다. import 문 뒤에 다음 코드를 추가하여 DAG의 연산자를 패치하는 것이 좋습니다.

    BigQueryOperator.operator_extra_links = None
  2. GitHub의 aws-mwaa-local-runner를 사용하여 DAG, 사용자 지정 플러그인, Python 종속성을 로컬에서 테스트합니다.

웹 서버에 액세스하는 중에 5xx 오류가 표시됨

다음 단계를 수행하는 것이 좋습니다.

  1. Apache Airflow 구성 옵션을 확인합니다. Apache Airflow 구성 옵션으로 지정한 키-값 쌍(예: AWS Secrets Manager)이 올바르게 구성되었는지 확인합니다. 자세한 내용은 Secrets Manager에 연결할 수 없음 단원을 참조하십시오.

  2. requirements.txt를 확인합니다. Airflow "extras" 패키지 및 requirements.txt에 나열된 기타 라이브러리가 Apache Airflow 버전과 호환되는지 확인합니다.

  3. requirements.txt 파일에서 Python 종속성을 지정하는 방법을 살펴보려면 requirements.txt에서의 Python 종속성 관리 단원을 참조하십시오.

'스케줄러가 실행되지 않는 것 같습니다' 오류가 표시됨

스케줄러가 실행되지 않는 것으로 보이거나 마지막 "heart beat"가 몇 시간 전에 수신된 경우 DAG가 Apache Airflow에 표시되지 않을 수 있으며 새 작업이 예약되지 않습니다.

다음 단계를 수행하는 것이 좋습니다.

  1. VPC 보안 그룹이 포트 5432에 대한 인바운드 액세스를 허용하는지 확인합니다. 이 포트는 사용자 환경의 Amazon Aurora PostgreSQL 메타데이터 데이터베이스에 연결하는 데 필요합니다. 이 규칙을 추가한 후 Amazon MWAA에 몇 분 정도 시간을 주면 오류가 사라집니다. 자세한 내용은 Amazon VPC의 MWAA 보안 단원을 참조하십시오.

    참고
    • Aurora PostgreSQL 메타데이터베이스는 Amazon MWAA 서비스 아키텍처의 일부이며 AWS 계정에서는 볼 수 없습니다.

    • 데이터베이스 관련 오류는 일반적으로 스케줄러 오류의 증상이지 근본 원인은 아닙니다.

  2. 스케줄러가 실행되지 않는 경우 종속성 설치 실패 또는 스케줄러 과부하와 같은 여러 요인 때문일 수 있습니다. CloudWatch Logs의 해당 로그 그룹을 확인하여 DAG, 플러그인 및 요구 사항이 제대로 작동하는지 확인합니다. 자세한 내용은 Amazon Managed Workflows for Apache Airflow에 대한 모니터링 및 지표 단원을 참조하십시오.

Tasks

다음 항목에서는 환경에서 Apache Airflow 작업을 수행할 때 발생할 수 있는 오류에 대해 설명합니다.

작업이 중단되거나 완료되지 않은 것으로 보임

Apache Airflow 작업이 “멈춘” 상태이거나 완료되지 않는 경우 다음 단계를 따르는 것이 좋습니다.

  1. 정의된 DAG 수가 많을 수 있습니다. DAG 수를 줄이고 환경 업데이트(예: 로그 수준 변경)를 수행하여 강제로 재설정합니다.

    1. Airflow는 DAG의 활성화 여부를 구문 분석합니다. 환경 용량의 50% 이상을 사용하는 경우 Apache Airflow 스케줄러가 너무 많이 사용되기 시작할 수 있습니다. 이로 인해 CloudWatch 지표의 총 구문 분석 시간이 길어지거나 CloudWatch Logs의 DAG 처리 시간이 길어집니다. Apache Airflow 구성을 최적화하는 다른 방법도 있으나 이 설명서에서는 다루지 않습니다.

    2. 환경 성능 조정을 권장하는 모범 사례에 대해 자세히 알아보려면 Amazon MWAA에서 Apache Airflow에 대한 성능 조정 단원을 참조하십시오.

  2. 대기열에 작업 수가 많을 수 있습니다. 이는 보통 "None" 상태의 작업 수가 많이 증가하는 것으로 나타나거나 CloudWatch의 대기 중인 작업 및/또는 보류 중인 작업 수가 많을 때 나타납니다. 이는 다음과 같은 이유로 발생할 수 있습니다.

    1. 환경에 실행할 수 있는 용량보다 실행할 작업이 많거나 자동 크기 조정 전에 대기열에 대기중인 작업이 많을 경우 작업을 감지하고 추가 작업자를 배포할 시간이 있습니다.

    2. 환경에서 실행할 수 있는 용량보다 실행할 작업이 많으면 DAG가 동시에 실행하는 작업 수를 줄이거나 최소 Apache Airflow 작업자를 늘리는 것이 좋습니다.

    3. 자동 크기 조정이 추가 작업자를 감지하고 배포할 시간을 갖기 전에 대기열에 대기 중인 작업이 많은 경우에는 작업 배포에 시차를 두거나 최소 Apache Airflow 작업자를 늘리는 것이 좋습니다.

    4. AWS Command Line Interface(AWS CLI)의 update-environment 명령을 사용하여 사용자 환경에서 실행되는 최소 또는 최대 작업자 수를 변경할 수 있습니다.

      aws mwaa update-environment --name MyEnvironmentName --min-workers 2 --max-workers 10
    5. 환경 성능 조정을 권장하는 모범 사례에 대해 자세히 알아보려면 Amazon MWAA에서 Apache Airflow에 대한 성능 조정 단원을 참조하십시오.

  3. 실행 도중에 삭제되는 작업은 Apache Airflow에 더 이상 표시되지 않고 중지되는 작업 로그로 표시될 수 있습니다. 이는 다음과 같은 이유로 발생할 수 있습니다.

    1. 1) 현재 작업이 현재 환경 용량을 초과하고, 2) 몇 분 동안 아무 작업도 실행되지 않거나 대기 중인 상태가 지속되면 3) 새 작업이 대기열에 추가되는 경우 이러한 상태가 발생합니다.

    2. Amazon MWAA 자동 크기 조정은 작업자를 추가하여 첫 번째 시나리오에 대응합니다. 두 번째 시나리오에서는 추가 작업자를 제거합니다. 대기열에 있는 일부 작업의 경우 작업자가 제거되는 과정으로 이어질 수 있으며 컨테이너가 삭제되면 종료됩니다.

    3. 해당 환경의 최소 작업자 수를 늘리는 것이 좋습니다. 또 다른 옵션은 DAG 및 작업의 타이밍을 조정하여 이러한 시나리오가 발생하지 않도록 하는 것입니다.

    4. 또한 최소 작업자를 사용자 환경의 최대 작업자와 동일하게 설정하여 자동 크기 조정을 효과적으로 비활성화할 수 있습니다. AWS Command Line Interface(AWS CLI)의 update-environment 명령을 사용하여 최소 및 최대 작업자 수를 동일하게 설정해 자동 크기 조정을 비활성화할 수 있습니다.

      aws mwaa update-environment --name MyEnvironmentName --min-workers 5 --max-workers 5
    5. 환경 성능 조정을 권장하는 모범 사례에 대해 자세히 알아보려면 Amazon MWAA에서 Apache Airflow에 대한 성능 조정 단원을 참조하십시오.

  4. 작업이 “실행 중” 상태에서 멈춘 경우 작업을 지우거나 성공 또는 실패로 표시할 수도 있습니다. 이렇게 하면 사용자 환경의 자동 확장 구성 요소를 통해 환경에서 실행되는 작업자 수를 줄일 수 있습니다. 다음 이미지는 중단된 작업의 예를 보여줍니다.

    이것은 문제가 있는 작업이 포함된 이미지입니다.
    1. 문제 있는 작업의 원을 선택한 다음 지우기(그림 참조)를 선택합니다. 이렇게 하면 Amazon MWAA에서 작업자의 규모를 축소할 수 있습니다. 그렇지 않으면 Amazon MWAA에서 어떤 DAG가 활성화되었는지 또는 비활성화되었는지 확인할 수 없으며 대기 중인 작업이 있는 경우 규모를 축소할 수 없습니다.

      Apache Airflow 작업
  5. Apache Airflow 참조 가이드개념에서 Apache Airflow 작업 수명 주기에 대해 자세히 알아봅니다.

CLI

다음 항목에서는 AWS Command Line Interface에서 Airflow CLI 명령을 실행할 때 발생할 수 있는 오류에 대해 설명합니다.

CLI에서 DAG를 트리거할 때 '503' 오류가 표시됨.

Airflow CLI는 동시성이 제한된 Apache Airflow 웹 서버에서 실행됩니다. 일반적으로 최대 4개의 CLI 명령을 동시에 실행할 수 있습니다.