Elastic Beanstalk Python 플랫폼 사용 - AWS Elastic Beanstalk

Elastic Beanstalk Python 플랫폼 사용

AWS Elastic Beanstalk Python 플랫폼은 WSGI를 사용하여 프록시 서버 이면에서 실행할 수 있는 Python 웹 애플리케이션을 위한 플랫폼 버전 집합입니다. 각 플랫폼 브랜치는 Python 버전(예: Python 3.8)에 해당합니다.

Amazon Linux 2 플랫폼 브랜치부터 Elastic Beanstalk는 Gunicorn을 기본 WSGI 서버로 제공합니다.

소스 번들에 Procfile를 추가하여 애플리케이션에 대한 WSGI 서버를 지정 및 구성할 수 있습니다. 자세한 내용은 Procfile을 사용하여 WSGI 서버 구성 단원을 참조하십시오.

Pipenv에서 생성된 PipfilePipfile.lock 파일을 사용하여 Python 패키지 종속 항목 및 기타 요구 사항을 지정할 수 있습니다. 종속성 지정에 대한 자세한 내용은 요구 사항 파일을 사용하여 종속 항목 지정 단원을 참조하십시오.

Elastic Beanstalk에서는 Elastic Beanstalk 환경의 EC2 인스턴스에서 실행하는 소프트웨어를 사용자 지정하는 데 사용할 수 있는 구성 옵션을 제공합니다. 애플리케이션에 필요한 환경 변수를 구성하고, Amazon S3에 대한 로그 교체를 활성화하고 정적 파일이 포함된 애플리케이션 소스의 폴더를 프록시 서버에서 제공하는 경로로 매핑할 수 있습니다.

Elastic Beanstalk 콘솔에서 실행 환경의 구성 수정을 위해 구성 옵션을 사용할 수 있습니다. 환경 종료 시 구성이 손실되지 않도록 하려면 저장된 구성을 사용해 설정을 저장하고 나중에 다른 환경에 적용할 수 있습니다.

소스 코드에 설정을 저장하기 위해 구성 파일을 포함할 수 있습니다. 구성 파일의 설정은 환경을 만들거나 애플리케이션을 배포할 때마다 적용됩니다. 구성 파일을 사용해 패키지를 설치하고, 스크립트를 실행하고, 배포 중에 다른 인스턴스 사용자 지정 작업을 수행할 수도 있습니다.

Elastic Beanstalk 콘솔에 적용된 설정은 구성 파일의 동일한 설정(있는 경우)을 재정의합니다. 그러면 구성 파일에서 기본 설정을 사용하고 콘솔에서 환경별 설정으로 이 설정을 재정의할 수 있습니다. 우선 적용 및 설정을 변경하는 다른 방법에 대한 자세한 내용은 구성 옵션 단원을 참조하십시오.

pip에서 사용할 수 있는 Python 패키지의 경우 애플리케이션 소스 코드의 루트에 요구 사항 파일을 포함할 수 있습니다. Elastic Beanstalk에서는 배포 중 요구 사항 파일에서 지정된 종속성 패키지를 모두 설치합니다. 자세한 내용은 요구 사항 파일을 사용하여 종속 항목 지정 단원을 참조하십시오.

Elastic Beanstalk Linux 기반 플랫폼을 확장할 수 있는 다양한 방법에 대한 자세한 내용은 Elastic Beanstalk Linux 플랫폼 확장 단원을 참조하세요.

Python 환경 구성

Python 플랫폼 설정을 사용하면 Amazon EC2 인스턴스의 동작을 미세 조정할 수 있습니다. Elastic Beanstalk 콘솔을 사용하여 Elastic Beanstalk 환경의 Amazon EC2 인스턴스 구성을 편집할 수 있습니다.

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

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

  1. Elastic Beanstalk 콘솔을 연 다음 리전 목록에서 해당 AWS 리전을 선택합니다.

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

    참고

    환경이 많은 경우 검색 창을 사용하여 환경 목록을 필터링합니다.

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

  4. 소프트웨어 구성 범주에서 편집을 선택합니다.

Python 설정

  • 프록시 서버 – 환경 인스턴스에서 사용할 프록시 서버입니다. 기본적으로 nginx를 사용합니다.

  • WSGI 경로 – 기본 애플리케이션 파일의 이름 또는 경로입니다. 예를 들어 application.py 또는 django/wsgi.py 등으로 지정할 수 있습니다.

  • NumProcesses – 각 애플리케이션 인스턴스에서 실행할 프로세스 수입니다.

  • NumThreads – 각 프로세스에서 실행할 스레드 수입니다.

AWS X-Ray 설정

  • X-Ray 데몬AWS X-Ray SDK for Python에서 추적 데이터를 처리하려면 AWS X-Ray 데몬을 실행합니다.

로그 옵션

로그 옵션 섹션에는 다음 두 가지 설정이 있습니다.

  • 인스턴스 프로파일(Instance profile) - 애플리케이션과 연결된 Amazon S3 버킷에 액세스할 권한이 있는 인스턴스 프로파일을 지정합니다.

  • Amazon S3에 대한 로그 파일 교체 활성화 – 애플리케이션과 연결된 Amazon S3 버킷에 애플리케이션의 Amazon EC2 인스턴스에 대한 로그 파일을 복사해야 하는지 여부를 지정합니다.

정적 파일

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

구성 파일 또는 Elastic Beanstalk 콘솔을 사용하여 정적 파일을 구성하는 방법에 대한 자세한 내용은 정적 파일 제공 단원을 참조하세요.

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

환경 속성

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

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

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

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

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

자세한 내용은 환경 속성 및 기타 소프트웨어 설정를 참조하십시오.

Python 구성 네임스페이스

구성 파일을 사용하여 구성 옵션을 설정하고 배포 중 다른 인스턴스 구성 작업을 수행할 수 있습니다. 구성 옵션은 Elastic Beanstalk 서비스 또는 사용 중인 플랫폼에서 정의할 수 있으며 네임스페이스로 구성됩니다.

Python 플랫폼은 aws:elasticbeanstalk:environment:proxy, aws:elasticbeanstalk:environment:proxy:staticfilesaws:elasticbeanstalk:container:python 네임스페이스에서 옵션을 정의합니다.

다음 예제 구성 파일에서는 DJANGO_SETTINGS_MODULE라는 환경 속성을 생성하기 위한 구성 옵션 설정을 지정하고, Apache 프록시 서버를 선택하고, statichtml이라는 디렉터리를 /html 경로에 매핑하고 staticimages라는 디렉터리를 /images 경로에 매핑하는 두 개의 정적 파일 옵션을 지정하고, aws:elasticbeanstalk:container: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로 바꿉니다. 예제의 값은 Amazon Linux AMI 플랫폼 버전에서는 지원되지 않는 Gunicorn WSGI 서버에서 작동합니다.

  • 또한 이러한 이전 플랫폼 버전에서는 정적 파일(aws:elasticbeanstalk:container:python:staticfiles)을 구성하는 데 다른 네임스페이스를 사용합니다. 그리고 표준 정적 파일 네임스페이스와 동일한 옵션 이름 및 의미를 지니고 있습니다.

또한 구성 파일은 사용자 환경의 인스턴스에서 소프트웨어를 추가로 수정할 수 있도록 몇 가지 키를 지원합니다. 이 예제에서는 패키지 키를 사용하여 yum컨테이너 명령으로 Memcached를 설치하여 배포 중 서버를 구성하는 명령을 실행합니다.

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를 사용하여 구성 옵션을 설정할 수도 있습니다. 자세한 내용은 구성 옵션를 참조하십시오.