Amazon MWAA에서 시작 스크립트 사용 - Amazon Managed Workflows for Apache Airflow

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

Amazon MWAA에서 시작 스크립트 사용

시작 스크립트는 DAG, 요구 사항 및 플러그인과 유사하게 환경의 Amazon S3 버킷에서 호스팅하는 쉘(.sh) 스크립트입니다. Amazon MWAA는 모든 개별 Apache Airflow 구성 요소(작업자, 스케줄러, 웹 서버)에서 시작 중에 요구 사항을 설치하고 Apache Airflow 프로세스를 초기화하기 전에 이 스크립트를 실행합니다. 시작 스크립트를 사용하여 다음을 수행합니다.

  • 런타임 설치 – 워크플로우와 연결에 필요한 Linux 런타임을 설치합니다.

  • 환경 변수 구성 – 각 Apache Airflow 구성 요소에 대한 환경 변수를 설정합니다. 일반 변수를 덮어씁니다(예: PATH, PYTHONPATHLD_LIBRARY_PATH).

  • 키 및 토큰 관리 – 사용자 지정 리포지토리의 액세스 토큰을 requirements.txt에 전달하고 보안 키를 구성합니다.

다음 항목에서는 Linux 런타임을 설치하도록 시작 스크립트를 구성하고, 환경 변수를 설정하며, CloudWatch Logs를 사용하여 관련 문제를 해결하는 방법을 설명합니다.

시작 스크립트 구성

기존 Amazon MWAA 환경에서 시작 스크립트를 사용하려면 사용자 환경의 Amazon S3 버킷에 .sh 파일을 업로드합니다. 그런 다음 스크립트를 환경에 연결하려면 환경 세부 정보에 다음을 지정합니다.

  • 스크립트에 대한 Amazon S3 URL 경로 – 버킷에 호스팅된 스크립트의 상대 경로입니다. 예를 들어, s3://mwaa-environment/startup.sh

  • 스크립트의 Amazon S3 버전 ID – Amazon S3 버킷에 있는 시작 쉘 스크립트의 버전입니다. 스크립트를 업데이트할 때마다 Amazon S3가 파일에 할당하는 버전 ID를 지정해야 합니다. 버전 ID는 유니코드, UTF-8 인코딩, URL 지원, 불투명 문자열이며 길이가 1,024바이트를 넘지 않습니다(예: 3sL4kqtJlcpXroDTDmJ+rmSpXd3dIbrHY+MTRCxf3vjVBH40Nr8X8gdRQBpUMLUo).

이 섹션의 단계를 완료하려면 다음 샘플 스크립트를 사용합니다. 스크립트는 할당된 값을 MWAA_AIRFLOW_COMPONENT에 출력합니다. 이 환경 변수는 스크립트가 실행되는 각 Apache Airflow 구성 요소를 식별합니다.

코드를 복사하고 로컬에 startup.sh로 저장합니다.

#!/bin/sh ​ echo "Printing Apache Airflow component" echo $MWAA_AIRFLOW_COMPONENT

다음으로 Amazon S3 버킷에 스크립트를 업로드합니다.

AWS Management Console
쉘 스크립트를 업로드하려면(콘솔)
  1. AWS Management Console에 로그인한 후 https://console.aws.amazon.com/s3/에서 Amazon S3 콘솔을 엽니다.

  2. 버킷 목록에서 환경에 연결된 버킷의 이름을 선택합니다.

  3. 객체 탭에서 업로드를 선택합니다.

  4. 업로드 페이지에서 생성한 쉘 스크립트를 드래그 앤 드롭합니다.

  5. 업로드를 선택합니다.

스크립트는 객체 목록에 나타납니다. Amazon S3는 파일에 대한 새 버전 ID를 만듭니다. 스크립트를 업데이트하고 동일한 파일 이름을 사용하여 다시 업로드하면 새 버전 ID가 파일에 할당됩니다.

AWS CLI
쉘 스크립트(CLI)를 생성하고 업로드하려면
  1. 새 명령 프롬프트를 열고 Amazon S3 ls 명령을 실행하여 환경과 관련된 버킷을 나열하고 식별합니다.

    $ aws s3 ls
  2. 쉘 스크립트를 저장한 폴더로 이동합니다. 새 프롬프트 창에서 cp를 사용하여 스크립트를 버킷에 업로드합니다. your-s3-bucket을 자신의 정보로 바꿉니다.

    $ aws s3 cp startup.sh s3://your-s3-bucket/startup.sh

    성공하면 Amazon S3가 객체에 대한 URL 경로를 출력합니다.

    upload: ./startup.sh to s3://your-s3-bucket/startup.sh
  3. 다음 명령을 사용하여 스크립트의 최신 버전 ID를 검색합니다.

    $ aws s3api list-object-versions --bucket your-s3-bucket --prefix startup --query 'Versions[?IsLatest].[VersionId]' --output text
    BbdVMmBRjtestta1EsVnbybZp1Wqh1J4

스크립트를 환경에 연결할 때 이 버전 ID를 지정합니다.

이제 스크립트를 환경에 연결합니다.

AWS Management Console
스크립트를 환경과 연결하려면(콘솔)
  1. Amazon MWAA 콘솔에서 환경 페이지를 엽니다.

  2. 업데이트하려는 환경의 행을 선택한 다음 편집을 선택합니다.

  3. 세부 정보 지정 페이지에서 시작 스크립트 파일(선택 사항)에 스크립트의 Amazon S3 URL을 입력합니다(예: s3://your-mwaa-bucket/startup-sh.).

  4. 드롭다운 목록에서 최신 버전을 선택하거나 S3 찾아보기를 사용하여 스크립트를 찾습니다.

  5. 다음을 선택하여 검토 후 저장 페이지로 이동합니다.

  6. 변경 사항을 검토한 다음 저장을 선택합니다.

환경 업데이트는 10~30분 정도 걸릴 수 있습니다. Amazon MWAA는 사용자 환경의 각 구성 요소가 재시작될 때 시작 스크립트를 실행합니다.

AWS CLI
스크립트를 환경과 연결하려면(CLI)
  • 명령 프롬프트를 열고 update-environment를 사용하여 스크립트의 Amazon S3 URL과 버전 ID를 지정합니다.

    $ aws mwaa update-environment \ --name your-mwaa-environment \ --startup-script-s3-path startup.sh \ --startup-script-s3-object-version BbdVMmBRjtestta1EsVnbybZp1Wqh1J4

    성공할 경우 Amazon MWAA는 환경에 대한 Amazon 리소스 이름(ARN) 을 반환합니다.

    arn:aws::airflow:us-west-2:123456789012:environment/your-mwaa-environment 

환경 업데이트는 10~30분 정도 걸릴 수 있습니다. Amazon MWAA는 사용자 환경의 각 구성 요소가 재시작될 때 시작 스크립트를 실행합니다.

마지막으로 로그 이벤트를 검색하여 스크립트가 예상대로 작동하는지 확인합니다. 각 Apache Airflow 구성 요소에 대한 로깅을 활성화하면 Amazon MWAA가 새 로그 그룹과 로그 스트림을 생성합니다. 자세한 내용은 Apache Airflow 로그 유형을 참조하십시오.

AWS Management Console
Apache Airflow 로그 스트림을 확인하려면(콘솔)
  1. Amazon MWAA 콘솔에서 환경 페이지를 엽니다.

  2. 환경을 선택합니다.

  3. 모니터링 창에서 로그를 보려는 로그 그룹을 선택합니다(예: Airflow 스케줄러 로그 그룹).

  4. CloudWatch 콘솔의 로그 스트림 목록에서 접두사가 다음과 같은 스트림을 선택합니다: startup_script_exection_ip.

  5. 로그 이벤트 창에는 MWAA_AIRFLOW_COMPONENT 값을 인쇄하는 명령의 출력이 표시됩니다. 예를 들어 스케줄러 로그의 경우 다음과 같은 결과를 얻을 수 있습니다.

    Printing Apache Airflow component
    scheduler
    Finished running startup script. Execution time: 0.004s.
    Running verification
    Verification completed

이전 단계를 반복하여 작업자 및 웹 서버 로그를 볼 수 있습니다.

시작 스크립트를 사용하여 Linux 런타임을 설치합니다.

시작 스크립트를 사용하여 Apache Airflow 구성 요소의 운영 체제를 업데이트하고 워크플로우에 사용할 추가 런타임 라이브러리를 설치합니다. 예를 들어, 다음 스크립트는 yum update를 실행하여 운영 체제를 업데이트합니다.

시작 스크립트에서 yum update를 실행할 때는 예제와 --exclude=python*을 사용하여 Python을 제외해야 합니다. 실행 환경을 위해 Amazon MWAA는 사용자 환경과 호환되는 특정 버전의 Python을 설치합니다. 따라서 시작 스크립트를 사용하여 환경의 Python 버전을 업데이트할 수 없습니다.

#!/bin/sh echo "Updating operating system" sudo yum update -y --exclude=python*

특정 Apache Airflow 구성 요소에 런타임을 설치하려면 MWAA_AIRFLOW_COMPONENT, iffi 조건문을 사용합니다. 이 예제에서는 단일 명령을 실행하여 웹 서버가 아닌 스케줄러와 작업자에는 libaio 라이브러리를 설치합니다.

중요
  • 프라이빗 웹 서버를 구성한 경우 설치 시간 초과를 방지하려면 다음 조건을 사용하거나 모든 설치 파일을 로컬로 제공해야 합니다.

  • sudo를 사용하여 관리자 권한이 필요한 작업을 실행합니다.

#!/bin/sh if [[ "${MWAA_AIRFLOW_COMPONENT}" != "webserver" ]] then sudo yum -y install libaio fi

시작 스크립트를 사용하여 Python 버전을 확인할 수 있습니다.

#!/bin/sh export PYTHON_VERSION_CHECK=`python -c 'import sys; version=sys.version_info[:3]; print("{0}.{1}.{2}".format(*version))'` echo "Python version is $PYTHON_VERSION_CHECK"

Amazon MWAA는 기본 Python 버전 재정의를 지원하지 않습니다. 이렇게 하면 설치된 Apache Airflow 라이브러리와 호환되지 않을 수 있기 때문입니다.

시작 스크립트를 사용하여 환경 변수를 설정합니다.

시작 스크립트를 사용하여 환경 변수를 설정하고 Apache Airflow 구성을 수정할 수 있습니다. 다음에서는 새 변수 ENVIRONMENT_STAGE을 정의합니다. DAG 또는 사용자 지정 모듈에서 이 변수를 참조할 수 있습니다.

#!/bin/sh export ENVIRONMENT_STAGE="development" echo "$ENVIRONMENT_STAGE"

시작 스크립트를 사용하여 일반적인 Apache Airflow 또는 시스템 변수를 덮어씁니다. 예를 들어, 지정한 경로에서 바이너리를 찾도록 Python에 지시하도록 LD_LIBRARY_PATH를 설정합니다. 이렇게 하면 플러그인을 사용하여 워크플로우에 사용자 지정 바이너리를 제공할 수 있습니다.

#!/bin/sh export LD_LIBRARY_PATH=/usr/local/airflow/plugins/your-custom-binary

예약된 환경 변수

Amazon MWAA는 중요한 환경 변수 세트를 예약합니다. 예약된 변수를 덮어쓰면 Amazon MWAA가 해당 변수를 기본값으로 복원합니다. 예약된 변수의 목록은 다음과 같습니다.

  • MWAA__AIRFLOW__COMPONENT – : scheduler, worker 또는 webserver 값 중 하나로 Apache Airflow 구성 요소를 식별하는 데 사용됩니다.

  • AIRFLOW__WEBSERVER__SECRET_KEY – Apache Airflow 웹 서버에서 세션 쿠키에 안전하게 서명하는 데 사용되는 암호 키입니다.

  • AIRFLOW__CORE__FERNET_KEY – 메타데이터 데이터베이스에 저장된 민감한 데이터(예: 연결 암호)를 암호화하고 해독하는 데 사용되는 키입니다.

  • AIRFLOW_HOME – 구성 파일 및 DAG 파일이 로컬로 저장되는 Apache Airflow 홈 디렉터리의 경로입니다.

  • AIRFLOW__CELERY__BROKER_URL – Apache Airflow 스케줄러와 Cellery 작업자 노드 간의 통신에 사용되는 메시지 브로커의 URL입니다.

  • AIRFLOW__CELERY__RESULT_BACKEND – Celery 작업의 결과를 저장하는 데 사용되는 데이터베이스의 URL입니다.

  • AIRFLOW__CORE__EXECUTOR – Apache Airflow가 사용해야 하는 실행자 클래스입니다. Amazon MWAA에서는 이것은 CeleryExecutor

  • AIRFLOW__CORE__LOAD_EXAMPLES – 예제 DAG 로드를 활성화하거나 비활성화하는 데 사용됩니다.

  • AIRFLOW__METRICS__METRICS_BLOCK_LIST – CloudWatch에서 Amazon MWAA가 내보내고 캡처하는 Apache Airflow 지표를 관리하는 데 사용됩니다.

  • SQL_ALCHEMY_CONN – Amazon MWAA에 Apache Airflow 메타데이터를 저장하는 데 사용되는 PostgreSQL용 RDS 데이터베이스의 연결 문자열입니다.

  • AIRFLOW__CORE__SQL_ALCHEMY_CONNSQL_ALCHEMY_CONN와 동일한 용도로 사용되지만 새 Apache Airflow 이름 지정 규칙을 따릅니다.

  • AIRFLOW__CELERY__DEFAULT_QUEUE – Apache Airflow의 Celery 작업에 대한 기본 대기열입니다.

  • AIRFLOW__OPERATORS__DEFAULT_QUEUE – 특정 Apache Airflow 연산자를 사용하는 작업의 기본 대기열입니다.

  • AIRFLOW_VERSION – Amazon MWAA 환경에 설치된 Apache Airflow 버전.

  • AIRFLOW_CONN_AWS_DEFAULT – 다른 AWS 서비스와 통합하는 데 사용되는 기본 AWS 보안 인증입니다.

  • AWS_DEFAULT_REGION – 다른 AWS 서비스와 통합하기 위해 기본 보안 인증과 함께 사용할 기본 AWS 리전을 설정합니다.

  • AWS_REGION – 정의된 경우 이 환경 변수는 환경 변수 AWS_DEFAULT_REGION 및 프로파일 설정의 값을 재정의합니다.

  • PYTHONUNBUFFEREDstdoutstderr 스트림을 컨테이너 로그로 전송하는 데 사용됩니다.

  • AIRFLOW__METRICS__STATSD_ALLOW_LIST – 목록의 요소로 시작하는 지표를 전송하기 위해 쉼표로 구분된 접두사의 허용 목록을 구성하는 데 사용됩니다.

  • AIRFLOW__METRICS__STATSD_ONStatsD로 지표 전송을 활성화합니다.

  • AIRFLOW__METRICS__STATSD_HOSTStatSD 대몬(daemon)에 연결하는 데 사용됩니다.

  • AIRFLOW__METRICS__STATSD_PORTStatSD 대몬(daemon)에 연결하는 데 사용됩니다.

  • AIRFLOW__METRICS__STATSD_PREFIXStatSD 대몬(daemon)에 연결하는 데 사용됩니다.

  • AIRFLOW__CELERY__WORKER_AUTOSCALE – 최대 및 최소 동시성을 설정합니다.

  • AIRFLOW__CORE__DAG_CONCURRENCY – 한 DAG에서 스케줄러가 동시에 실행할 수 있는 작업 인스턴스 수를 설정합니다.

  • AIRFLOW__CORE__MAX_ACTIVE_TASKS_PER_DAG – DAG당 최대 활성 작업 수를 설정합니다.

  • AIRFLOW__CORE__PARALLELISM – 동시에 실행할 수 있는 최대 작업 인스턴스 수를 정의합니다.

  • AIRFLOW__SCHEDULER__PARSING_PROCESSES – DAG를 스케줄링하기 위해 스케줄러가 파싱하는 최대 프로세스 수를 설정합니다.

  • AIRFLOW__CELERY_BROKER_TRANSPORT_OPTIONS__VISIBILITY_TIMEOUT – 메시지가 다른 작업자에게 다시 전달되기 전에 작업자가 작업을 승인하기 위해 대기하는 시간(초)을 정의합니다.

  • AIRFLOW__CELERY_BROKER_TRANSPORT_OPTIONS__REGION – 기본 셀러리 전송의 AWS 리전을 설정합니다.

  • AIRFLOW__CELERY_BROKER_TRANSPORT_OPTIONS__PREDEFINED_QUEUES – 기본 셀러리 전송의 큐를 설정합니다.

  • AIRFLOW_SCHEDULER_ALLOWED_RUN_ID_PATTERN – DAG를 트리거할 때 run_id 파라미터에 대한 입력의 유효성을 확인하는 데 사용됩니다.

  • AIRFLOW__WEBSERVER__BASE_URL – Apache Airflow UI를 호스팅하는 데 사용되는 웹 서버의 URL입니다.

예약되지 않은 환경 변수

시작 스크립트를 사용하여 예약되지 않은 환경 변수를 덮어쓸 수 있습니다. 다음은 이러한 일반적인 변수의 일부를 나열한 것입니다.

  • PATH – 운영 체제가 실행 파일 및 스크립트를 검색하는 디렉터리 목록을 지정합니다. 명령줄에서 명령을 실행하면 시스템은 명령을 찾아 실행하기 위해 PATH의 디렉터리를 확인합니다. Apache Airflow에서 사용자 지정 연산자 또는 작업을 생성할 때는 외부 스크립트나 실행 파일을 사용해야 할 수 있습니다. 이러한 파일을 포함한 디렉터리가 PATH 변수에 지정된 디렉터리에 없는 경우, 시스템이 해당 디렉터리를 찾을 수 없으면 작업이 실행되지 않습니다. PATH에 적절한 디렉터리를 추가하면 Apache Airflow 작업에서 필요한 실행 파일을 찾아 실행할 수 있습니다.

  • PYTHONPATH – Python 인터프리터가 가져온 모듈과 패키지를 검색할 디렉터리를 결정하는 데 사용됩니다. 기본 검색 경로에 추가할 수 있는 디렉터리 목록입니다. 이를 통해 인터프리터는 표준 라이브러리에 포함되어 있지 않거나 시스템 디렉터리에 설치되어 있지 않은 Python 라이브러리를 찾아 로드할 수 있습니다. 이 변수를 사용하여 모듈과 사용자 지정 Python 패키지를 추가하고 DAG와 함께 사용할 수 있습니다.

  • LD_LIBRARY_PATH – Linux의 동적 링커 및 로더가 공유 라이브러리를 찾고 로드하는 데 사용하는 환경 변수입니다. 기본 시스템 라이브러리 디렉터리보다 먼저 검색되는 공유 라이브러리가 포함된 디렉터리 목록을 지정합니다. 이 변수를 사용하여 사용자 지정 바이너리를 지정할 수 있습니다.

  • CLASSPATH – Java 런타임 환경(JRE) 및 Java 개발 키트(JDK) 에서 런타임 시 Java 클래스, 라이브러리 및 리소스를 찾고 로드하는 데 사용됩니다. 컴파일된 Java 코드가 포함된 디렉터리, JAR 파일 및 ZIP 아카이브의 목록입니다.