기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
문제 해결: 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-
은 Apache Airflow v2와만 호환됩니다. xyz
apache-airflow-backport-providers-
은 Apache Airflow 1.10.12와 호환됩니다.xyz
Broken DAG
다음 항목에서는 DAG를 실행할 때 발생할 수 있는 오류에 대해 설명합니다.
Amazon DynamoDB 연산자를 사용할 때 'Broken DAG' 오류가 발생했습니다.
다음 단계를 수행하는 것이 좋습니다.
-
GitHub의 aws-mwaa-local-runner
를 사용하여 DAG, 사용자 지정 플러그인, Python 종속성을 로컬에서 테스트합니다. -
requirements.txt
에 다음 패키지를 추가합니다.boto
-
requirements.txt
파일에서 Python 종속성을 지정하는 방법을 살펴보려면 requirements.txt에서의 Python 종속성 관리 단원을 참조하십시오.
'Broken DAG: psycopg2라는 이름의 모듈이 없음' 오류가 발생함
다음 단계를 수행하는 것이 좋습니다.
-
GitHub의 aws-mwaa-local-runner
를 사용하여 DAG, 사용자 지정 플러그인, Python 종속성을 로컬에서 테스트합니다. -
Apache Airflow 버전을 사용하여
requirements.txt
에 다음을 추가합니다. 예:apache-airflow[postgres]==1.10.12
-
requirements.txt
파일에서 Python 종속성을 지정하는 방법을 살펴보려면 requirements.txt에서의 Python 종속성 관리 단원을 참조하십시오.
Slack 연산자를 사용할 때 'Broken DAG' 오류가 발생함
다음 단계를 수행하는 것이 좋습니다.
-
GitHub의 aws-mwaa-local-runner
를 사용하여 DAG, 사용자 지정 플러그인, Python 종속성을 로컬에서 테스트합니다. -
requirements.txt
에 다음 패키지를 추가하고 Apache Airflow 버전을 지정합니다. 예:apache-airflow[slack]==1.10.12
-
requirements.txt
파일에서 Python 종속성을 지정하는 방법을 살펴보려면 requirements.txt에서의 Python 종속성 관리 단원을 참조하십시오.
Google/GCP/BigQuery를 설치하는 동안 여러 가지 오류가 발생함
Amazon MWAA는 특정 버전의 Cython과 암호화 라이브러리가 필요한 Amazon Linux를 사용합니다. 다음 단계를 수행하는 것이 좋습니다.
-
GitHub의 aws-mwaa-local-runner
를 사용하여 DAG, 사용자 지정 플러그인, Python 종속성을 로컬에서 테스트합니다. -
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]
-
백포트 공급자를 사용하지 않는 경우 다음을 사용할 수 있습니다.
grpcio==1.27.2 cython==0.29.21 pandas-gbq==0.13.3 cryptography==3.3.2 apache-airflow[gcp]==1.10.12
-
requirements.txt
파일에서 Python 종속성을 지정하는 방법을 살펴보려면 requirements.txt에서의 Python 종속성 관리 단원을 참조하십시오.
'Broken DAG: Cython이라는 이름의 모듈이 없음' 오류가 발생함
Amazon MWAA는 특정 버전의 Cython이 필요한 Amazon Linux를 사용합니다. 다음 단계를 수행하는 것이 좋습니다.
-
GitHub의 aws-mwaa-local-runner
를 사용하여 DAG, 사용자 지정 플러그인, Python 종속성을 로컬에서 테스트합니다. -
requirements.txt
에 다음 패키지를 추가합니다.cython==0.29.21
-
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
-
requirements.txt
파일에서 Python 종속성을 지정하는 방법을 살펴보려면 requirements.txt에서의 Python 종속성 관리 단원을 참조하십시오.
연산자
다음 항목에서는 연산자를 사용할 때 발생할 수 있는 오류에 대해 설명합니다.
BigQuery 연산자를 사용할 때 오류가 발생함.
Amazon MWAA는 UI 확장이 있는 연산자를 지원하지 않습니다. 다음 단계를 수행하는 것이 좋습니다.
-
GitHub의 aws-mwaa-local-runner
를 사용하여 DAG, 사용자 지정 플러그인, Python 종속성을 로컬에서 테스트합니다. -
해결 방법은 문제 연산자를 가져온 후 설정할 DAG에
<operator name>.operator_extra_links = None
을 설정하는 줄을 추가하여 확장을 재정의하는 것입니다. 예:from airflow.contrib.operators.bigquery_operator import BigQueryOperator BigQueryOperator.operator_extra_links = None
-
위의 내용을 플러그인에 추가하면 모든 DAG에 이 접근 방식을 사용할 수 있습니다. 예시는 Apache Airflow PythonVirtualenvOperator용 사용자 지정 플러그인 생성 단원을 참조하십시오.
연결
다음 항목에서는 Apache Airflow 연결을 사용하거나 다른 AWS 데이터베이스를 사용할 때 발생할 수 있는 오류에 대해 설명합니다.
Snowflake에 연결할 수 없음
다음 단계를 수행하는 것이 좋습니다.
-
GitHub의 aws-mwaa-local-runner
를 사용하여 DAG, 사용자 지정 플러그인, Python 종속성을 로컬에서 테스트합니다. -
사용자 환경의 requirements.txt 파일에 다음 항목을 추가합니다.
asn1crypto == 0.24.0 snowflake-connector-python == 1.7.2
-
DAG에 다음 가져오기를 추가합니다.
from airflow.contrib.hooks.snowflake_hook import SnowflakeHook from airflow.contrib.operators.snowflake_operator import SnowflakeOperator
Apache Airflow 연결 객체에 다음 키-값 쌍이 포함되어 있는지 확인합니다.
-
Conn Id: snowflake_conn
-
Conn Type: Snowflake
-
Host: <my account>.<my region if not us-west-2>.snowflakecomputing.com
-
Schema: <my schema>
-
Login: <my user name>
-
Password: ********
-
Port: <port, if any>
-
추가:
{ "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에 연결할 수 없음
다음 단계를 수행하는 것이 좋습니다.
-
AWS Secrets Manager 보안 암호를 사용하여 Apache Airflow 연결 구성에서 Apache Airflow 연결 및 변수를 위한 암호 키를 만드는 방법을 알아봅니다.
-
Apache Airflow 변수에 AWS Secrets Manager 암호 키 사용에서 Apache Airflow 변수(
test-variable
)에 대해 암호 키를 사용하는 방법을 알아봅니다. -
Apache Airflow 연결 AWS Secrets Manager 에의 보안 키 사용에서 Apache Airflow 연결(
myconn
)에 대해 암호 키를 사용하는 방법을 알아봅니다.
'<DB-identifier-name>.cluster-id.<region>.rds.amazonaws.com'에서 내 MySQL 서버에 연결할 수 없음
Amazon MWAA의 보안 그룹과 RDS 보안 그룹에는 서로 트래픽을 허용하기 위한 수신 규칙이 필요합니다. 다음 단계를 수행하는 것이 좋습니다.
-
Amazon MWAA의 VPC 보안 그룹에서의 모든 트래픽을 허용할 수 있도록 RDS 보안 그룹을 수정합니다.
-
RDS 보안 그룹에서의 모든 트래픽을 허용할 수 있도록 Amazon MWAA의 VPC 보안 그룹을 수정합니다.
-
작업을 다시 실행하고 CloudWatch Logs에서 Apache Airflow 로그를 확인하여 SQL 쿼리가 성공했는지 확인합니다.
웹 서버
다음 항목에서는 Amazon MWAA의 Apache Airflow 웹 서버에서 발생할 수 있는 오류에 대해 설명합니다.
BigQuery Operator를 사용하고 있는데 이로 인해 웹 서버가 다운됨
다음 단계를 수행하는 것이 좋습니다.
-
operator_extra_links
가 포함된BigQueryOperator
및QuboleOperator
와 같은 Apache Airflow 연산자는 Apache Airflow 웹 서버의 작동을 중단시킬 수 있습니다. 이러한 연산자는 보안상의 이유로 허용되지 않는 웹 서버에 코드를 로드하려고 시도합니다. import 문 뒤에 다음 코드를 추가하여 DAG의 연산자를 패치하는 것이 좋습니다.BigQueryOperator.operator_extra_links = None
-
GitHub의 aws-mwaa-local-runner
를 사용하여 DAG, 사용자 지정 플러그인, Python 종속성을 로컬에서 테스트합니다.
웹 서버에 액세스하는 중에 5xx 오류가 표시됨
다음 단계를 수행하는 것이 좋습니다.
-
Apache Airflow 구성 옵션을 확인합니다. Apache Airflow 구성 옵션으로 지정한 키-값 쌍(예: AWS Secrets Manager)이 올바르게 구성되었는지 확인합니다. 자세한 내용은 Secrets Manager에 연결할 수 없음 단원을 참조하십시오.
-
requirements.txt
를 확인합니다. Airflow "extras" 패키지 및requirements.txt
에 나열된 기타 라이브러리가 Apache Airflow 버전과 호환되는지 확인합니다. -
requirements.txt
파일에서 Python 종속성을 지정하는 방법을 살펴보려면 requirements.txt에서의 Python 종속성 관리 단원을 참조하십시오.
'스케줄러가 실행되지 않는 것 같습니다' 오류가 표시됨
스케줄러가 실행되지 않는 것으로 보이거나 마지막 "heart beat"가 몇 시간 전에 수신된 경우 DAG가 Apache Airflow에 표시되지 않을 수 있으며 새 작업이 예약되지 않습니다.
다음 단계를 수행하는 것이 좋습니다.
-
VPC 보안 그룹이 포트
5432
에 대한 인바운드 액세스를 허용하는지 확인합니다. 이 포트는 사용자 환경의 Amazon Aurora PostgreSQL 메타데이터 데이터베이스에 연결하는 데 필요합니다. 이 규칙을 추가한 후 Amazon MWAA에 몇 분 정도 시간을 주면 오류가 사라집니다. 자세한 내용은 Amazon VPC의 MWAA 보안 단원을 참조하십시오.참고
-
Aurora PostgreSQL 메타데이터베이스는 Amazon MWAA 서비스 아키텍처의 일부이며 AWS 계정에서는 볼 수 없습니다.
-
데이터베이스 관련 오류는 일반적으로 스케줄러 오류의 증상이지 근본 원인은 아닙니다.
-
-
스케줄러가 실행되지 않는 경우 종속성 설치 실패 또는 스케줄러 과부하와 같은 여러 요인 때문일 수 있습니다. CloudWatch Logs의 해당 로그 그룹을 확인하여 DAG, 플러그인 및 요구 사항이 제대로 작동하는지 확인합니다. 자세한 내용은 Amazon Managed Workflows for Apache Airflow에 대한 모니터링 및 지표 단원을 참조하십시오.
Tasks
다음 항목에서는 환경에서 Apache Airflow 작업을 수행할 때 발생할 수 있는 오류에 대해 설명합니다.
작업이 중단되거나 완료되지 않은 것으로 보임
Apache Airflow 작업이 “멈춘” 상태이거나 완료되지 않는 경우 다음 단계를 따르는 것이 좋습니다.
-
정의된 DAG 수가 많을 수 있습니다. DAG 수를 줄이고 환경 업데이트(예: 로그 수준 변경)를 수행하여 강제로 재설정합니다.
-
Airflow는 DAG의 활성화 여부를 구문 분석합니다. 환경 용량의 50% 이상을 사용하는 경우 Apache Airflow 스케줄러가 너무 많이 사용되기 시작할 수 있습니다. 이로 인해 CloudWatch 지표의 총 구문 분석 시간이 길어지거나 CloudWatch Logs의 DAG 처리 시간이 길어집니다. Apache Airflow 구성을 최적화하는 다른 방법도 있으나 이 설명서에서는 다루지 않습니다.
-
환경 성능 조정을 권장하는 모범 사례에 대해 자세히 알아보려면 Amazon MWAA에서 Apache Airflow에 대한 성능 조정 단원을 참조하십시오.
-
-
대기열에 작업 수가 많을 수 있습니다. 이는 보통 "None" 상태의 작업 수가 많이 증가하는 것으로 나타나거나 CloudWatch의 대기 중인 작업 및/또는 보류 중인 작업 수가 많을 때 나타납니다. 이는 다음과 같은 이유로 발생할 수 있습니다.
-
환경에 실행할 수 있는 용량보다 실행할 작업이 많거나 자동 크기 조정 전에 대기열에 대기중인 작업이 많을 경우 작업을 감지하고 추가 작업자를 배포할 시간이 있습니다.
-
환경에서 실행할 수 있는 용량보다 실행할 작업이 많으면 DAG가 동시에 실행하는 작업 수를 줄이거나 최소 Apache Airflow 작업자를 늘리는 것이 좋습니다.
-
자동 크기 조정이 추가 작업자를 감지하고 배포할 시간을 갖기 전에 대기열에 대기 중인 작업이 많은 경우에는 작업 배포에 시차를 두거나 최소 Apache Airflow 작업자를 늘리는 것이 좋습니다.
-
AWS Command Line Interface(AWS CLI)의 update-environment 명령을 사용하여 사용자 환경에서 실행되는 최소 또는 최대 작업자 수를 변경할 수 있습니다.
aws mwaa update-environment --name MyEnvironmentName --min-workers 2 --max-workers 10
-
환경 성능 조정을 권장하는 모범 사례에 대해 자세히 알아보려면 Amazon MWAA에서 Apache Airflow에 대한 성능 조정 단원을 참조하십시오.
-
-
실행 도중에 삭제되는 작업은 Apache Airflow에 더 이상 표시되지 않고 중지되는 작업 로그로 표시될 수 있습니다. 이는 다음과 같은 이유로 발생할 수 있습니다.
-
1) 현재 작업이 현재 환경 용량을 초과하고, 2) 몇 분 동안 아무 작업도 실행되지 않거나 대기 중인 상태가 지속되면 3) 새 작업이 대기열에 추가되는 경우 이러한 상태가 발생합니다.
-
Amazon MWAA 자동 크기 조정은 작업자를 추가하여 첫 번째 시나리오에 대응합니다. 두 번째 시나리오에서는 추가 작업자를 제거합니다. 대기열에 있는 일부 작업의 경우 작업자가 제거되는 과정으로 이어질 수 있으며 컨테이너가 삭제되면 종료됩니다.
-
해당 환경의 최소 작업자 수를 늘리는 것이 좋습니다. 또 다른 옵션은 DAG 및 작업의 타이밍을 조정하여 이러한 시나리오가 발생하지 않도록 하는 것입니다.
-
또한 최소 작업자를 사용자 환경의 최대 작업자와 동일하게 설정하여 자동 크기 조정을 효과적으로 비활성화할 수 있습니다. AWS Command Line Interface(AWS CLI)의 update-environment 명령을 사용하여 최소 및 최대 작업자 수를 동일하게 설정해 자동 크기 조정을 비활성화할 수 있습니다.
aws mwaa update-environment --name MyEnvironmentName --min-workers 5 --max-workers 5
-
환경 성능 조정을 권장하는 모범 사례에 대해 자세히 알아보려면 Amazon MWAA에서 Apache Airflow에 대한 성능 조정 단원을 참조하십시오.
-
-
작업이 “실행 중” 상태에서 멈춘 경우 작업을 지우거나 성공 또는 실패로 표시할 수도 있습니다. 이렇게 하면 사용자 환경의 자동 확장 구성 요소를 통해 환경에서 실행되는 작업자 수를 줄일 수 있습니다. 다음 이미지는 중단된 작업의 예를 보여줍니다.
-
문제 있는 작업의 원을 선택한 다음 지우기(그림 참조)를 선택합니다. 이렇게 하면 Amazon MWAA에서 작업자의 규모를 축소할 수 있습니다. 그렇지 않으면 Amazon MWAA에서 어떤 DAG가 활성화되었는지 또는 비활성화되었는지 확인할 수 없으며 대기 중인 작업이 있는 경우 규모를 축소할 수 없습니다.
-
-
Apache Airflow 참조 가이드의 개념
에서 Apache Airflow 작업 수명 주기에 대해 자세히 알아봅니다.
CLI
다음 항목에서는 AWS Command Line Interface에서 Airflow CLI 명령을 실행할 때 발생할 수 있는 오류에 대해 설명합니다.
CLI에서 DAG를 트리거할 때 '503' 오류가 표시됨.
Airflow CLI는 동시성이 제한된 Apache Airflow 웹 서버에서 실행됩니다. 일반적으로 최대 4개의 CLI 명령을 동시에 실행할 수 있습니다.