

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

# Elastic Beanstalk Python 플랫폼 사용
<a name="create-deploy-python-container"></a>

이 주제에서는 Elastic Beanstalk에서 Python 애플리케이션을 구성, 빌드 및 실행하는 방법을 설명합니다.

AWS Elastic Beanstalk 는 다양한 버전의 Python 프로그래밍 언어에 대해 여러 플랫폼 브랜치를 지원합니다. 전체 목록은 *AWS Elastic Beanstalk 플랫폼* 문서의 [Python](https://docs.aws.amazon.com/elasticbeanstalk/latest/platforms/platforms-supported.html#platforms-supported.python)을 참조하세요.

Python 웹 애플리케이션은 WSGI를 사용하여 프록시 서버 뒤에서 실행할 수 있습니다. Elastic Beanstalk는 [Gunicorn](https://gunicorn.org/)을 기본 WSGI 서버로 제공합니다.

소스 번들에 `Procfile`를 추가하여 애플리케이션의 WSGI 서버를 지정하고 구성할 수 있습니다. 자세한 내용은 [Elastic Beanstalk에서 Procfile을 사용하여 WSGI 서버 구성](python-configuration-procfile.md) 단원을 참조하십시오.

Pipenv에서 생성된 `Pipfile` 및 `Pipfile.lock` 파일을 통해 Python 패키지 종속 파일 및 기타 요구 사항을 지정할 수 있습니다. 종속 파일에 대한 자세한 내용은 [Elastic Beanstalk에서 요구 서헝 파일을 사용하여 종속성 지정](python-configuration-requirements.md)을 참조하십시오.

Elastic Beanstalk가 제공하는 [구성 옵션](command-options.md)을 통해 Elastic Beanstalk 환경EC2 인스턴스에서 실행하는 소프트웨어를 사용자 맞춤형으로 사용할 수 있습니다. 애플리케이션에 필요한 환경 변수를 구성하고, Amazon S3의 로그 로테이션을 활성화하며, 정적 파일을 포함한 애플리케이션 소스 폴더를 프록시 서버에서 제공하는 경로로 매핑할 수 있습니다.

[실행 환경 구성을 수정](environment-configuration-methods-after.md)하기 위해 Elastic Beanstalk 콘솔의 구성 옵션을 사용할 수 있습니다. [저장된 구성](environment-configuration-savedconfig.md)을 사용해 설정을 저장하면 환경 종료 시 구성이 훼손되지 않도록 할 수 있으며, 추후 기타 환경에서도 적용할 수 있습니다.

소스 코드에 설정을 저장하려면 [구성 파일](ebextensions.md)을 포함시킬 수 있습니다. 구성 파일 설정은 환경을 생성하거나 애플리케이션을 배포할 때마다 적용됩니다. 구성 파일을 사용하여 패키지를 설치하거나, 스크립트를 실행하거나, 배포 중 기타 인스턴스 사용자 지정 작업을 수행할 수 있습니다.

Elastic Beanstalk 콘솔에 적용된 설정이 구성 파일에 적용된 동일한 설정(있는 경우)을 덮어씁니다. 이렇게 함으로써 구성 파일은 기본 설정을 갖는 동시에 콘솔에서 환경 특정 설정으로 설정을 덮어 쓸 수 있습니다. 우선 적용 및 기타 설정 변경법에 대한 자세한 내용은 [구성 옵션](command-options.md)을 참조하십시오.

`pip`에서 사용할 수 있는 Python 패키지의 경우 애플리케이션 소스 코드 루트에 필수 요구 파일을 포함할 수 있습니다. Elastic Beanstalk에서는 배포 과정에서 필수 요구 파일이 지정한 모든 종속 패키지 설치합니다. 자세한 내용은 [Elastic Beanstalk에서 요구 서헝 파일을 사용하여 종속성 지정](python-configuration-requirements.md)을 참조하세요.

Elastic Beanstalk Linux 기반 플랫폼 확장을 위한 다양한 방법은 [Elastic Beanstalk Linux 플랫폼 확장](platforms-linux-extend.md)을 참조하세요.

## Python 환경 구성
<a name="create-deploy-python-container-console"></a>

Python 플랫폼 설정을 통해 Amazon EC2 인스턴스를 상세히 조정할 수 있습니다. Elastic Beanstalk 콘솔을 통해 Elastic Beanstalk 환경의 Amazon EC2 인스턴스 구성을 편집할 수 있습니다.

Elastic Beanstalk 콘솔을 사용하여 Python 프로세스 설정을 구성하고, Amazon S3에 대한 AWS X-Ray로그 교체를 활성화하고, 애플리케이션이 환경에서 읽을 수 있는 변수를 구성합니다.

**Elastic Beanstalk 콘솔에서 Python 환경을 구성하려면**

1. [Elastic Beanstalk 콘솔](https://console.aws.amazon.com/elasticbeanstalk)을 열고 **리전** 목록에서를 선택합니다 AWS 리전.

1. 탐색 창에서 **환경**을 선택한 다음 목록에서 환경의 이름을 선택합니다.

1. 탐색 창에서 **구성**을 선택합니다.

1. **업데이트, 모니터링 및 로깅** 구성 범주에서 **편집**을 선택합니다.

### Python 설정
<a name="python-console-settings"></a>
+ **프록시 서버** – 환경 인스턴스에서 사용할 프록시 서버입니다. 기본적으로 nginx를 사용합니다.
+ **WSGI 경로** – 기본 애플리케이션 파일의 이름 또는 경로입니다. 예를 들어 `application.py` 또는 `django/wsgi.py`입니다.
+ **NumProcesses** – 각 애플리케이션 인스턴스에서 실행할 프로세스 수입니다.
+ **NumThreads** – 각 프로세스에서 실행할 스레드 수입니다.

### AWS X-Ray 설정
<a name="python-console-xray"></a>
+ **X-Ray 데몬** - AWS X-Ray 데몬을 실행하여의 트레이스 데이터를 처리합니다[AWS X-Ray SDK for Python](https://docs.aws.amazon.com/xray/latest/devguide/xray-sdk-python.html).

### 로그 옵션
<a name="create-deploy-python-container.console.logoptions"></a>

로그 옵션 섹션에는 다음의 두 가지 설정이 있습니다:
+ **인스턴스 프로파일(Instance profile)** - 애플리케이션과 연결된 Amazon S3 버킷으로의 액세스할 권한이 있는 인스턴스 프로파일을 지정합니다.
+ **Amazon S3로의 로그 파일 로테이션 활성화(Enable log file rotation to Amazon S3)** – 애플리케이션과 연결된 Amazon S3 버킷에 애플리케이션의 Amazon EC2 인스턴스 로그 파일을 복사하는지 여부를 지정합니다.

### 정적 파일
<a name="python-platform-staticfiles"></a>

성능을 증진하려면 **정적 파일(Static files)** 섹션에서 프록시 서버를 구성하여 웹 애플리케이션 내부 디렉터리 집합으로 정적 파일(예: HTML 또는 이미지)을 제공할 수 있습니다. 각 디렉터리의 디렉터리 매핑 가상 경로를 설정합니다. 지정된 경로에서 프록시 서버가 파일 요청을 수신받으면 요청을 애플리케이션으로 라우팅하지 않고 파일을 직접 제공합니다.

구성 파일 또는 Elastic Beanstalk 콘솔을 사용하여 정적 파일을 구성법에 대한 자세한 내용은 [정적 파일 제공](environment-cfg-staticfiles.md)을 참조하세요.

기본적으로 Python 환경의 프록시 서버는 `static` 경로의 `/static` 폴더에서 모든 파일을 제공합니다. 예를 들어 애플리케이션 소스에 `logo.png` 폴더의 `static` 파일이 포함되어 있는 경우 프록시 서버는 `subdomain.elasticbeanstalk.com/static/logo.png`에서 이 파일을 사용자에게 제공합니다. 본 섹션에서 설명한 대로 추가 매핑을 구성할 수 있습니다.

### 환경 속성
<a name="create-deploy-python-custom-container-envprop"></a>

환경 속성을 사용하여 애플리케이션에 정보를 제공하고 환경 변수를 구성할 수 있습니다. 예를 들어 `CONNECTION_STRING`라는 환경 속성을 생성하여 애플리케이션을 데이터베이스로 연결하는 연결 문자열을 지정할 수 있습니다.

Elastic Beanstalk에서 실행 중인 Python 환경 내에서 Python의 `os.environ` 딕셔너리를 통해 이러한 값에 액세스할 수 있습니다. 자세한 내용은 [http://docs.python.org/library/os.html](http://docs.python.org/library/os.html)을 참조하십시오.

다음과 유사한 코드를 사용하여 키 및 파라미터에 액세스할 수 있습니다.

```
import os
endpoint = os.environ['API_ENDPOINT']
```

환경 속성을 통해 프레임워크로 정보를 제공할 수도 있습니다. 예를 들어 특정 설정 모듈을 사용하도록 하는 `DJANGO_SETTINGS_MODULE`라는 속성을 생성하여 Django를 구성할 수 있습니다. 환경에 따라 이 값은 `development.settings`, `production.settings` 등이 될 수 있습니다.

자세한 정보는 [환경 변수 및 기타 소프트웨어 설정](environments-cfg-softwaresettings.md)을 참조하세요.

## Python 구성 네임스페이스
<a name="python-namespaces"></a>

[구성 파일](ebextensions.md)을 사용하여 구성 옵션을 설정하고 배포 중 다른 인스턴스 구성 작업을 수행할 수 있습니다. 구성 옵션은 [플랫폼별](command-options-specific.md)로 다르거나 Elastic Beanstalk 서비스의 [모든 플랫폼](command-options-general.md)에 전체적으로 적용될 수 있습니다. 구성 옵션은 *네임스페이스*로 구성됩니다.

Python 플랫폼 옵션은 `aws:elasticbeanstalk:environment:proxy`, `aws:elasticbeanstalk:environment:proxy:staticfiles` 및 `aws:elasticbeanstalk:container:python` 네임스페이스에서 정의됩니다.

다음 예제 구성 파일에서는 `DJANGO_SETTINGS_MODULE`라는 환경 속성을 생성하기 위한 구성 옵션 설정을 지정하고, Apache 프록시 서버를 선택하고, `statichtml`이라는 디렉터리를 `/html` 경로에 매핑하고, `staticimages`라는 디렉터리를 `/images` 경로로 매핑하는 두 개의 정적 파일 옵션을 지정하고, `[aws:elasticbeanstalk:container:python](command-options-specific.md#command-options-python)` 네임스페이스의 추가 설정을 지정합니다. 이 네임스페이스는 소스 코드의 WSGI 스크립트 위치 및 WSGI에서 실행할 스레드와 프로세스 수를 지정할 수 있는 옵션을 포함하고 있습니다.

```
option_settings:
  aws:elasticbeanstalk:application:environment:
    DJANGO_SETTINGS_MODULE: production.settings
  aws:elasticbeanstalk:environment:proxy:
    ProxyServer: apache
  aws:elasticbeanstalk:environment:proxy:staticfiles:
    /html: statichtml
    /images: staticimages
  aws:elasticbeanstalk:container:python:
    WSGIPath: ebdjango.wsgi:application
    NumProcesses: 3
    NumThreads: 20
```

**참고**  
Amazon Linux AMI Python 플랫폼 버전(Amazon Linux 2 이전)을 사용하는 경우 `WSGIPath`의 값을 `ebdjango/wsgi.py`로 변경합니다. Gunicorn WSGI 서버에서 작동하는 예제의 값은 Amazon Linux AMI 플랫폼 버전에서는 지원되지 않습니다.
또한 이러한 이전 플랫폼 버전에서는 정적 파일(`aws:elasticbeanstalk:container:python:staticfiles`)을 구성하는 데 다른 네임스페이스를 사용합니다. 옵션 이름 및 의미는 표준 정적 파일 네임스페이스와 동일합니다.

또한 구성 파일은 [사용자 환경 인스턴스에서 소프트웨어를 추가로 수정](customize-containers-ec2.md)할 수 있는 키 몇 가지를 지원합니다. 이 예제에서는 [패키지](customize-containers-ec2.md#linux-packages) 키를 통해 `yum` Memcached를 설치하고, [컨테이너 명령](customize-containers-ec2.md#linux-container-commands)을 통해 배포 중 서버 구성 명령을 실행합니다:

```
packages:
  yum:
    libmemcached-devel: '0.31'

container_commands:
  collectstatic:
    command: "django-admin.py collectstatic --noinput"
  01syncdb:
    command: "django-admin.py syncdb --noinput"
    leader_only: true
  02migrate:
    command: "django-admin.py migrate"
    leader_only: true
  03wsgipass:
    command: 'echo "WSGIPassAuthorization On" >> ../wsgi.conf'
  99customize:
    command: "scripts/customize.sh"
```

Elastic Beanstalk는 사용자가 환경을 맞춤형으로 지정할 수 있는 다양한 구성 옵션을 제공합니다. 구성 파일 외에 콘솔, 저장된 구성, EB CLI 또는 AWS CLI를 통해 구성 옵션을 설정할 수도 있습니다. 자세한 정보는 [구성 옵션](command-options.md)을 참조하세요.

## `python3` 실행 파일
<a name="python3-executable"></a>

Elastic Beanstalk의 Python 환경에서 EC2 인스턴스에 설치된 `python3` 실행 파일의 버전은 플랫폼에서 사용되는 Python 버전과 일치하지 않을 수 있습니다. 예를 들어 Python 3.12 AL2023 플랫폼에서는 `/usr/bin/python3`가 Python 3.9를 가리킵니다. 이는 AL2023에서 Python 3.9가 *시스템 Python*이기 때문입니다. 자세한 내용은 *Amazon Linux 2023 사용 설명서*의 [AL2023의 Python](https://docs.aws.amazon.com/linux/al2023/ug/python.html)을 참조하세요. 플랫폼에서 사용하는 Python 버전에 해당하는 실행 파일은 버전이 지정된 경로(예: `/usr/bin/python3.12`)나 애플리케이션 가상 환경 `bin` 디렉터리(예: `/var/app/venv/staging-LQM1lest/bin/python3`)에서 액세스할 수 있습니다. 플랫폼에서는 플랫폼 브랜치에 해당하는 올바른 Python 실행 파일이 사용됩니다.

# Elastic Beanstalk에서 Procfile을 사용하여 WSGI 서버 구성
<a name="python-configuration-procfile"></a>

소스 번들에 [`Procfile`](platforms-linux-extend.build-proc.md#platforms-linux-extend.proc)를 추가하여 애플리케이션의 WSGI 서버를 지정하고 구성할 수 있습니다. `Procfile`에서 사용자 지정 시작 및 실행 명령을 지정할 수 있습니다.

`Procfile`를 사용하면 구성 파일로 설정한 `aws:elasticbeanstalk:container:python` 네임스페이스 옵션이 덮어쓰여집니다.

다음 예제에서는 `Procfile`를 통해 uWSGI를 서버로 지정하고 구성합니다.

**Example Procfile**  

```
web: uwsgi --http :8000 --wsgi-file application.py --master --processes 4 --threads 2
```

다음 예제에서는 `Procfile`를 통해 기본 WSGI 서버인 Gunicorn을 구성합니다.

**Example Procfile**  

```
web: gunicorn --bind :8000 --workers 3 --threads 2 project.wsgi:application
```

**주의**  
Gunicorn이 아닌 WSGI 서버를 구성하는 경우, 환경 인스턴스에 설치될 수 있도록 애플리케이션의 종속 파일로 지정해야 합니다. 종속 사양에 대한 자세한 내용은 [Elastic Beanstalk에서 요구 서헝 파일을 사용하여 종속성 지정](python-configuration-requirements.md)을 참조하십시오.
WSGI 서버의 기본 포트는 8000입니다. `Procfile` 명령에서 다른 포트를 지정하는 경우, `PORT` [환경 속성](environments-cfg-softwaresettings.md) 역시 이 포트로 설정해야 합니다.

# Elastic Beanstalk에서 요구 서헝 파일을 사용하여 종속성 지정
<a name="python-configuration-requirements"></a>

이 주제에서는 필요한 다른 Python 패키지를 설치하도록 애플리케이션을 구성하는 방법을 설명합니다. 일반적으로 Python 애플리케이션은 타사 Python 패키지에 대한 종속 파일을 가지고 있습니다. Elastic Beanstalk Python 플랫폼에서는 애플리케이션에 필요한 Python 패키지를 지정하는 몇 가지 방법을 제공합니다.

## `pip` 및 `requirements.txt` 사용
<a name="python-configuration-requirements.txt"></a>

Python 패키지를 설치하기 위한 표준 도구는 `pip`입니다. 이는 단일 필수 요구 파일에 필요한 모든 패키지(버전 포함)를 지정할 수 있는 기능을 보유하고 있습니다. 필수 요구 파일에 대한 자세한 내용은 [필수 요구 파일 형식](https://pip.pypa.io/en/latest/reference/requirements-file-format/#requirements-file-format)을 참조하십시오.

`requirements.txt`이라는 파일을 생성하고 소스 번들의 최상위 디렉터리에 배치합니다. 다음은 Django `requirements.txt` 파일의 예입니다.

```
Django==2.2
mysqlclient==2.0.3
```

개발 환경에서 `pip freeze` 명령을 통해 필수 요구 파일을 생성할 수 있습니다.

```
~/my-app$ pip freeze > requirements.txt
```

필수 요구 파일에 애플리케이션에서 실제 사용되는 패키지만 포함되었는지 여부를 확인하려면 설치된 패키지만 포함하는 [가상 환경](python-development-environment.md#python-common-setup-venv)을 사용합니다. 가상 환경 외부에서 `pip freeze` 출력에는 운영 체제와 함께 제공되는 패키지 등 개발 장치에 설치된 모든 `pip` 패키지가 포함됩니다.

**참고**  
Elastic Beanstalk는 Amazon Linux AMI Python 플랫폼 버전에서 기본적으로 Pipenv 또는 Pipfiles를 지원하지 않습니다. Pipenv를 통해 애플리케이션 종속 파일을 관리하는 경우 다음 명령을 사용하여 `requirements.txt` 파일을 생성합니다.  

```
~/my-app$ pipenv lock -r > requirements.txt
```
자세한 내용은 Pipenv 설명서의 [requirements.txt 생성](https://pipenv.readthedocs.io/en/latest/advanced/#generating-a-requirements-txt)을 참조하십시오.

## Pipenv 및 `Pipfile` 사용
<a name="python-configuration-requirements.pipenv"></a>

Pipenv는 최신 Python 패키징 도구입니다. 이 도구는 종속 파일의 생성 및 관리에, 애플리케이션 virtualenv에 패키지 설치를 결합합니다. 자세한 내용은 [Pipenv: 인간 Python 개발 워크플로(Python Dev Workflow for Humans)](https://pipenv.readthedocs.io/en/latest/)를 참조하십시오.

Pipenv는 두 개의 파일을 유지 관리합니다: 
+ `Pipfile`— 이 파일에는 다양한 유형의 종속 파일 및 필수 요구가 포함되어 있습니다.
+ `Pipfile.lock`— 이 파일에는 결정적 빌드를 지원하는 버전 스냅샷이 포함되어 있습니다.

해당 파일들을 개발 환경에서 생성한 후, Elastic Beanstalk에 배포하는 소스 번들에 포함시킵니다. 이 두 파일에 대한 자세한 내용은 [Pipfile 및 Pipfile.lock 예제](https://pipenv.pypa.io/en/latest/basics/#)를 참조하십시오.



다음의 예제에서는 Pipenv를 통해 Django 및 Django REST 프레임워크를 설치합니다. 이 명령을 통해 `Pipfile` 및 `Pipfile.lock`파일을 생성합니다.

```
~/my-app$ pipenv install django
~/my-app$ pipenv install djangorestframework
```

 

## 우선 순위
<a name="python-configuration-requirements.precedence"></a>

본 설명의 필수 요구 파일 중 하나 이상이 포함될 경우 Elastic Beanstalk는 해당 파일 중 하나만 사용합니다. 다음 목록은 우선 순위를 내림차순으로 보여 줍니다.

1. `requirements.txt`

1. `Pipfile.lock`

1. `Pipfile`

**참고**  
2023년 3월 7일 Amazon Linux 2 플랫폼 릴리스부터 이러한 파일이 두 개 이상 제공 될 경우, Elastic Beanstalk는 배포 과정에서 복수 개의 파일 중 어떤 종속 파일이 사용되었는지를 콘솔 메시지에 표시합니다.

다음 단계에서는 인스턴스를 배포할 시 Elastic Beanstalk가 종속 파일을 설치하는 로직을 설명합니다.
+ `requirements.txt`파일이 있으면 `pip install -r requirements.txt`명령을 사용합니다.
+ 2023년 3월 7일 Amazon Linux 2 플랫폼 릴리스부터 `requirements.txt` 파일이 없지만 `Pipfile.lock`파일이 있는 경우 `pipenv sync`명령을 사용해야 합니다. 해당 릴리스 이전에는 `pipenv install --ignore-pipfile`을 사용했습니다.
+ `requirements.txt` 파일도 `Pipfile.lock` 파일도 없지만 `Pipfile`이 있는 경우 `pipenv install --skip-lock`명령을 사용합니다.
+ 세 가지 필구 요구 파일을 찾을 수 없는 경우 모든 애플리케이션 종속 파일을 설치하지 않습니다.