

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

# Python 종속성 설치
<a name="working-dags-dependencies"></a>

Python 종속성이란 Amazon Managed Workflows for Apache Airflow 환경에서 Apache Airflow 버전의 Apache Airflow 기본 설치에 포함되지 않은 모든 패키지 또는 배포를 말합니다. 이 주제에서는 Amazon S3 버킷의 `requirements.txt` 파일을 사용하여 Amazon MWAA 환경에서 Apache Airflow Python 종속성을 설치하는 단계를 설명합니다.

**Contents**
+ [

## 사전 조건
](#working-dags-dependencies-prereqs)
+ [

## 작동 방식
](#working-dags-dependencies-how)
+ [

## Python 종속성 개요
](#working-dags-dependencies-overview)
  + [

### Python 종속성 위치와 크기 제한
](#working-dags-dependencies-quota)
+ [

## requirements.txt 파일 생성
](#working-dags-dependencies-test-create)
  + [

### 1단계: Amazon MWAA CLI 유틸리티를 사용하여 Python 종속성 테스트
](#working-dags-dependencies-cli-utility)
  + [

### 2단계: `requirements.txt` 생성
](#working-dags-dependencies-syntax-create)
+ [

## Amazon S3에 `requirements.txt` 업로드
](#configuring-dag-dependencies-upload)
  + [

### 사용 AWS CLI
](#configuring-dag-dependencies-upload-cli)
  + [

### Amazon S3 콘솔 사용
](#configuring-dag-dependencies-upload-console)
+ [

## 사용자 환경에 Python 종속성 설치
](#configuring-dag-dependencies-installing)
  + [

### Amazon MWAA 콘솔에서 `requirements.txt`의 경로 지정(처음)
](#configuring-dag-dependencies-first)
  + [

### Amazon MWAA 콘솔에서 `requirements.txt` 버전 지정
](#working-dags-dependencies-mwaaconsole-version)
+ [

## `requirements.txt`에 대한 로그 액세스
](#working-dags-dependencies-logs)
+ [

## 다음 단계
](#working-dags-dependencies-next-up)

## 사전 조건
<a name="working-dags-dependencies-prereqs"></a>

이 페이지의 단계를 완료하려면 먼저 다음이 필요합니다.
+ **권한 **- 관리자가 환경에 대한 [AmazonMWAAFullConsoleAccess](access-policies.md#console-full-access) 액세스 제어 정책에 대한 액세스 권한을 부여해야 AWS 계정 합니다. 또한 Amazon MWAA 환경은 [실행 역할](mwaa-create-role.md)이 환경에서 사용하는 AWS 리소스에 액세스할 수 있도록 허용해야 합니다.
+ **액세스** — 종속성을 웹 서버에 직접 설치하기 위해 퍼블릭 리포지토리에 액세스해야 하는 경우 **퍼블릭 네트워크** 웹 서버 액세스로 환경을 구성해야 합니다. 자세한 정보는 [Apache Airflow 액세스 모드](configuring-networking.md) 섹션을 참조하세요.
+ **Amazon S3 구성** — DAG, `plugins.zip`의 사용자 지정 플러그인 및 `requirements.txt`의 Python 종속성을 저장하는 데 사용되는 [Amazon S3 버킷](mwaa-s3-bucket.md)은 *퍼블릭 액세스가 차단*되고 *버전 관리가 활성화*된 상태로 구성되어야 합니다.

## 작동 방식
<a name="working-dags-dependencies-how"></a>

Amazon S3 버킷에 `requirements.txt` 파일을 업로드한 다음 파일을 업데이트할 때마다 Amazon MWAA 콘솔에서 파일 버전을 지정하여 모든 Python 종속성을 Amazon MWAA에 설치합니다. Apache Airflow 스케줄러와 각 작업자에 Python 종속성을 `pip3 install -r requirements.txt` 설치하기 위해 Amazon MWAA를 실행합니다.

사용자 환경에서 Python 종속성을 실행하려면 다음 세 가지 작업을 수행해야 합니다.

1. 로컬에서 `requirements.txt` 파일을 생성합니다.

1. Amazon S3 버킷에 로컬 `requirements.txt`을 업로드합니다.

1. Amazon MWAA 콘솔의 **요구 사항 파일** 필드에 이 파일의 버전을 지정합니다.

**참고**  
`requirements.txt`을 처음으로 생성하여 Amazon S3 버킷에 업로드하는 경우 Amazon MWAA 콘솔에 파일 경로도 지정해야 합니다. 이 단계는 한 번만 완료하면 됩니다.

## Python 종속성 개요
<a name="working-dags-dependencies-overview"></a>

사용자 환경에 프라이빗 Pypi/PEP-503 호환 리포지토리에서 호스팅되는 Python 패키지 인덱스(PyPI.org), Python wheel(`.whl`) 또는 Python 종속 항목으로부터 Apache Airflow 추가 내용과 기타 Python 종속성을 설치할 수 있습니다. 

### Python 종속성 위치와 크기 제한
<a name="working-dags-dependencies-quota"></a>

Apache Airflow `requirements.txt`스케줄러와 작업자는 파일에서 패키지를 검색하고 이 패키지는 `/usr/local/airflow/.local/bin`의 환경에 설치됩니다.
+ **크기 제한**. 전체 크기가 1GB 미만인 라이브러리를 참조하는 `requirements.txt` 파일을 사용하는 것이 좋습니다. Amazon MWAA에 설치해야 하는 라이브러리가 많을수록 환경에서 *시작* 시간이 길어집니다. Amazon MWAA가 설치된 라이브러리의 크기를 명시적으로 제한하지 않지만, 종속성을 10분 이내에 설치할 수 없는 경우 Fargate 서비스는 시간을 초과하여 환경을 안정적인 상태로 롤백하려고 시도합니다.

## requirements.txt 파일 생성
<a name="working-dags-dependencies-test-create"></a>

다음 단계에서는 로컬에서 requirements.txt 파일을 생성할 때 권장하는 단계를 설명합니다.

### 1단계: Amazon MWAA CLI 유틸리티를 사용하여 Python 종속성 테스트
<a name="working-dags-dependencies-cli-utility"></a>
+ 명령줄 인터페이스(CLI) 유틸리티는 Amazon Managed Workflows for Apache Airflow 환경을 로컬로 복제합니다.
+ CLI는 Amazon MWAA 프로덕션 이미지와 유사한 Docker 컨테이너 이미지를 로컬로 구축합니다. 이를 사용해 Amazon MWAA에 배포하기 전에 로컬 Apache Airflow 환경을 실행하여 DAG, 사용자 지정 플러그인 및 종속성을 개발하고 테스트할 수 있습니다.
+ CLI를 실행하려면 GitHub의 [aws-mwaa-docker-images](https://github.com/aws/amazon-mwaa-docker-images)를 참조하세요.

### 2단계: `requirements.txt` 생성
<a name="working-dags-dependencies-syntax-create"></a>

다음 섹션에서는 `requirements.txt` 파일의 [Python 패키지 인덱스](https://pypi.org/)에서 Python 종속성을 지정하는 방법을 설명합니다.

------
#### [ Apache Airflow v3 ]

1. **로컬 테스트**. `requirements.txt` 파일을 생성하기 전에 라이브러리를 반복적으로 추가하여 패키지와 버전의 적절한 조합을 찾습니다. Amazon MWAA CLI 유틸리티를 실행하려면 GitHub의 [aws-mwaa-docker-images](https://github.com/aws/amazon-mwaa-docker-images)를 참조하세요.

1. **Apache Airflow 패키지 엑스트라를 검토합니다.** Amazon MWAA의 Apache Airflow v3에 설치된 패키지 목록에 액세스하려면 GitHub 웹 사이트의 [aws-mwaa-docker-images`requirements.txt`](https://github.com/aws/amazon-mwaa-docker-images/blob/main/requirements.txt)를 참조하세요.

1. **제약 조건 문을 추가합니다**. 파일 상단에 Apache Airflow v3 환경의 제약 조건 `requirements.txt` 파일을 추가합니다. Apache Airflow 제약 조건 파일은 Apache Airflow 릴리스 당시 사용할 수 있는 공급자 버전을 지정합니다.

    다음 예제에서는 *\$1environment-version\$1*을 사용자 환경의 버전 번호로 바꾸고 *\$1Python-version\$1*을 사용자 환경과 호환되는 Python의 버전으로 바꿉니다.

   Apache Airflow 환경과 호환되는 Python 버전에 대한 자세한 내용은 [Apache Airflow 버전](airflow-versions.md#airflow-versions-official)을 참조하세요.

   ```
   --constraint "https://raw.githubusercontent.com/apache/airflow/constraints-{Airflow-version}/constraints-{Python-version}.txt"
   ```

    제약 조건 파일에서 `xyz==1.0` 패키지가 사용자 환경의 다른 패키지와 호환되지 않는 것으로 확인되면 `pip3 install`은 호환되지 않는 라이브러리가 환경에 설치되는 것을 막을 수 없습니다. 패키지 설치에 실패하는 경우, CloudWatch Logs의 해당 로그 스트림에서 각 Apache Airflow 구성 요소(스케줄러, 작업자, 웹 서버)에 대한 오류 로그에 액세스할 수 있습니다. 로그 유형에 대한 자세한 내용은 [Amazon CloudWatch에서 Airflow 로그 액세스](monitoring-airflow.md) 섹션을 참조하세요.

1. **Apache Airflow 패키지** [패키지 엑스트라](http://airflow.apache.org/docs/apache-airflow/2.5.1/extra-packages-ref.html) 및 버전(`==`)을 추가합니다. 이렇게 하면 이름은 같지만 버전이 다른 패키지가 사용자 환경에 설치되는 것을 방지할 수 있습니다.

   ```
   apache-airflow[package-extra]==2.5.1
   ```

1. **Python 라이브러리**. `requirements.txt` 파일에 패키지 이름과 버전(`==`)을 추가합니다. 이렇게 하면 [Pypi.org](https://pypi.org)의 향후 주요 업데이트가 자동으로 적용되는 것을 방지하는 데 도움이 됩니다.

   ```
   library == version
   ```  
**Example Boto3 및 psycopg2-binary**  

   이 예제는 데모용으로 제공됩니다. boto 및 psycopg2-binary 라이브러리는 Apache Airflow v3 기본 설치에 포함되어 있으며 `requirements.txt` 파일에서 지정할 필요가 없습니다.

   ```
   boto3==1.17.54
   boto==2.49.0
   botocore==1.20.54
   psycopg2-binary==2.8.6
   ```

   버전 정보 없이 패키지를 지정한 경우 Amazon MWAA는 [PyPI.org](https://pypi.org)의 최신 버전의 패키지를 설치합니다. 이 버전은 `requirements.txt`에 있는 다른 패키지와 충돌할 수 있습니다.

------
#### [ Apache Airflow v2 ]

1. **로컬 테스트**. `requirements.txt` 파일을 생성하기 전에 라이브러리를 반복적으로 추가하여 패키지와 버전의 적절한 조합을 찾습니다. Amazon MWAA CLI 유틸리티를 실행하려면 GitHub의 [aws-mwaa-docker-images](https://github.com/aws/amazon-mwaa-docker-images)를 참조하세요.

1. **Apache Airflow 패키지 엑스트라를 검토합니다.** Amazon MWAA의 Apache Airflow v2에 설치된 패키지 목록에 액세스하려면 GitHub 웹 사이트에서 [aws-mwaa-docker-images`requirements.txt`](https://github.com/aws/amazon-mwaa-docker-images/blob/main/requirements.txt)에 액세스합니다.

1. **제약 조건 문을 추가합니다**. `requirements.txt` 파일 상단에 Apache Airflow v2 환경에 대한 제약 조건 파일을 추가합니다. Apache Airflow 제약 조건 파일은 Apache Airflow 릴리스 당시 사용할 수 있는 공급자 버전을 지정합니다.

    Apache Airflow v2.7.2부터 요구 사항 파일에 `--constraint` 문이 포함되어야 합니다. 제약 조건을 제공하지 않으면 Amazon MWAA에서 요구 사항에 나열된 패키지가 사용 중인 Apache Airway 버전과 호환되도록 제약 조건을 지정합니다.

   다음 예제에서는 *\$1environment-version\$1*을 사용자 환경의 버전 번호로 바꾸고 *\$1Python-version\$1*을 사용자 환경과 호환되는 Python의 버전으로 바꿉니다.

   Apache Airflow 환경과 호환되는 Python 버전에 대한 자세한 내용은 [Apache Airflow 버전](airflow-versions.md#airflow-versions-official)을 참조하세요.

   ```
   --constraint "https://raw.githubusercontent.com/apache/airflow/constraints-{Airflow-version}/constraints-{Python-version}.txt"
   ```

   제약 조건 파일에서 `xyz==1.0` 패키지가 사용자 환경의 다른 패키지와 호환되지 않는 것으로 확인되면 `pip3 install`은 호환되지 않는 라이브러리가 환경에 설치되는 것을 막을 수 없습니다. 패키지 설치에 실패하는 경우, CloudWatch Logs의 해당 로그 스트림에서 각 Apache Airflow 구성 요소(스케줄러, 작업자, 웹 서버)에 대한 오류 로그에 액세스할 수 있습니다. 로그 유형에 대한 자세한 내용은 [Amazon CloudWatch에서 Airflow 로그 액세스](monitoring-airflow.md) 섹션을 참조하세요.

1. **Apache Airflow 패키지** [패키지 엑스트라](http://airflow.apache.org/docs/apache-airflow/2.5.1/extra-packages-ref.html) 및 버전(`==`)을 추가합니다. 이렇게 하면 이름은 같지만 버전이 다른 패키지가 사용자 환경에 설치되는 것을 방지할 수 있습니다.

   ```
   apache-airflow[package-extra]==2.5.1
   ```

1. **Python 라이브러리**. `requirements.txt` 파일에 패키지 이름과 버전(`==`)을 추가합니다. 이렇게 하면 [Pypi.org](https://pypi.org)의 향후 주요 업데이트가 자동으로 적용되는 것을 방지하는 데 도움이 됩니다.

   ```
   library == version
   ```  
**Example Boto3 및 psycopg2-binary**  

   이 예제는 데모용으로 제공됩니다. boto 및 psycopg2-binary 라이브러리는 Apache Airflow v2 기본 설치에 포함되어 있으며 `requirements.txt` 파일에서 지정할 필요가 없습니다.

   ```
   boto3==1.17.54
   boto==2.49.0
   botocore==1.20.54
   psycopg2-binary==2.8.6
   ```

   버전 정보 없이 패키지를 지정한 경우 Amazon MWAA는 [PyPI.org](https://pypi.org)의 최신 버전의 패키지를 설치합니다. 이 버전은 `requirements.txt`에 있는 다른 패키지와 충돌할 수 있습니다.

------

## Amazon S3에 `requirements.txt` 업로드
<a name="configuring-dag-dependencies-upload"></a>

Amazon S3 콘솔 또는 AWS Command Line Interface (AWS CLI)를 사용하여 Amazon S3 버킷에 `requirements.txt` 파일을 업로드할 수 있습니다.

### 사용 AWS CLI
<a name="configuring-dag-dependencies-upload-cli"></a>

 AWS Command Line Interface (AWS CLI)는 명령줄 셸에서 명령을 사용하여 AWS 서비스와 상호 작용하는 데 사용할 수 있는 오픈 소스 도구입니다. 이 페이지에서 단계를 완료하려면 다음이 필요합니다.
+ [AWS CLI - 버전 2를 설치합니다](https://docs.aws.amazon.com/cli/latest/userguide/install-cliv2.html).
+ [AWS CLI -를 사용한 빠른 구성`aws configure`](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html).

**를 사용하여 업로드하려면 AWS CLI**

1. 다음 명령을 사용하여 Amazon S3 버킷을 모두 나열합니다.

   ```
   aws s3 ls
   ```

1. 다음 명령을 사용하여 사용자 환경의 Amazon S3 버킷에 있는 파일과 폴더를 나열합니다.

   ```
   aws s3 ls s3://YOUR_S3_BUCKET_NAME
   ```

1. 다음 명령은 Amazon S3 버킷에 `requirements.txt` 파일을 업로드합니다.

   ```
   aws s3 cp requirements.txt s3://amzn-s3-demo-bucket/requirements.txt
   ```

### Amazon S3 콘솔 사용
<a name="configuring-dag-dependencies-upload-console"></a>

Amazon S3 콘솔은 Amazon S3 버킷의 리소스를 생성 및 관리할 수 있는 웹 기반 사용자 인터페이스입니다.

**Amazon S3 콘솔을 사용하여 업로드하려면**

1. Amazon MWAA 콘솔에서 [환경 페이지](https://console.aws.amazon.com/mwaa/home#/environments)를 엽니다.

1. 환경을 선택합니다.

1. **S3의 DAG 코드** 창에서 **S3 버킷** 링크를 선택하여 콘솔에서 스토리지 버킷을 엽니다.

1. **업로드**를 선택합니다.

1. **파일 추가**를 선택합니다.

1. `requirements.txt`의 로컬 사본을 선택하고 **업로드**를 선택합니다. 

## 사용자 환경에 Python 종속성 설치
<a name="configuring-dag-dependencies-installing"></a>

이 섹션에서는 requirements.txt 파일의 경로를 지정하고 업데이트될 때마다 requirements.txt 파일의 버전을 지정하여 Amazon S3 버킷에 업로드한 종속성을 설치하는 방법을 설명합니다.

### Amazon MWAA 콘솔에서 `requirements.txt`의 경로 지정(처음)
<a name="configuring-dag-dependencies-first"></a>

`requirements.txt`을 처음으로 생성하여 Amazon S3 버킷에 업로드하는 경우 Amazon MWAA 콘솔에 파일 경로도 지정해야 합니다. 이 단계는 한 번만 완료하면 됩니다.

1. Amazon MWAA 콘솔에서 [환경 페이지](https://console.aws.amazon.com/mwaa/home#/environments)를 엽니다.

1. 환경을 선택합니다.

1. **편집**을 선택합니다.

1. **Amazon S3의 DAG 코드** 창에서 **요구 사항 파일 - 옵션** 필드 옆의 **S3 찾아보기**를 선택합니다.

1. Amazon S3 버킷에 있는 `requirements.txt` 파일을 선택합니다.

1. **선택**을 선택합니다.

1. **다음**, **환경 업데이트**를 선택합니다.

환경 업데이트가 완료된 후 즉시 새 패키지 사용을 시작할 수 있습니다.

### Amazon MWAA 콘솔에서 `requirements.txt` 버전 지정
<a name="working-dags-dependencies-mwaaconsole-version"></a>

Amazon S3 버킷에 사용자 `requirements.txt`의 새 버전을 업로드할 때마다 Amazon MWAA 콘솔에서 `requirements.txt` 파일의 버전을 지정해야 합니다.

1. Amazon MWAA 콘솔에서 [환경 페이지](https://console.aws.amazon.com/mwaa/home#/environments)를 엽니다.

1. 환경을 선택합니다.

1. **편집**을 선택합니다.

1. **Amazon S3의 DAG 코드** 창의 드롭다운 목록에서 `requirements.txt` 버전을 선택합니다.

1. **다음**, **환경 업데이트**를 선택합니다.

환경 업데이트가 완료된 후 즉시 새 패키지 사용을 시작할 수 있습니다.

## `requirements.txt`에 대한 로그 액세스
<a name="working-dags-dependencies-logs"></a>

워크플로우를 예약하고 `dags` 폴더를 구문 분석하는 스케줄러에 대한 Apache Airflow 로그를 볼 수 있습니다. 다음 단계에서는 Amazon MWAA 콘솔에서 스케줄러에 대한 로그 그룹을 여는 방법과 CloudWatch Logs 콘솔에서 Apache Airflow 로그를 액세스하는 방법을 설명합니다.

**`requirements.txt`에 대한 로그에 액세스하려면**

1. Amazon MWAA 콘솔에서 [환경 페이지](https://console.aws.amazon.com/mwaa/home#/environments)를 엽니다.

1. 환경을 선택합니다.

1. **모니터링** 창에서 **Airflow 스케줄러 로그 그룹**을 선택합니다.

1. **로그 스트림**에서 `requirements_install_ip` 로그를 선택합니다.

1. `/usr/local/airflow/.local/bin`에서 환경에 설치된 패키지 목록을 참조하세요. 예제:

   ```
   Collecting appdirs==1.4.4 (from -r /usr/local/airflow/.local/bin (line 1))
   Downloading https://files.pythonhosted.org/packages/3b/00/2344469e2084fb28kjdsfiuyweb47389789vxbmnbjhsdgf5463acd6cf5e3db69324/appdirs-1.4.4-py2.py3-none-any.whl  
   Collecting astroid==2.4.2 (from -r /usr/local/airflow/.local/bin (line 2))
   ```

1. 패키지 목록을 검토하고 설치 중에 오류가 발생했는지 여부를 검토합니다. 문제가 발생한 경우, 다음과 비슷한 오류가 표시됩니다.

   ```
   2021-03-05T14:34:42.731-07:00
   No matching distribution found for LibraryName==1.0.0 (from -r /usr/local/airflow/.local/bin (line 4))
   No matching distribution found for LibraryName==1.0.0 (from -r /usr/local/airflow/.local/bin (line 4))
   ```

## 다음 단계
<a name="working-dags-dependencies-next-up"></a>

GitHub의 [aws-mwaa-docker-images](https://github.com/aws/amazon-mwaa-docker-images)를 사용하여 DAG, 사용자 지정 플러그인, Python 종속성을 로컬에서 테스트합니다.