Elastic Beanstalk Linux 플랫폼 확장 - AWS Elastic Beanstalk

Elastic Beanstalk Linux 플랫폼 확장

AWS Elastic Beanstalk Linux 플랫폼은 애플리케이션 개발 및 실행을 지원하기 위해 다양한 기능을 기본적으로 제공합니다. 필요한 경우 여러 가지 방법으로 플랫폼을 확장하여 옵션을 구성하고, 소프트웨어를 설치하고, 파일 및 시작 명령을 추가하고, 빌드 및 런타임 지침을 제공하고, 환경의 Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스에 대한 다양한 프로비저닝 단계에서 실행되는 초기화 스크립트를 추가할 수 있습니다.

일부 플랫폼에서는 애플리케이션을 빌드하거나 준비하는 방법을 사용자 지정하고 애플리케이션을 실행하는 프로세스를 지정할 수 있습니다. 각 개별 플랫폼 주제에서는 플랫폼에서 지원하는 경우 Buildfile 및/또는 Procfile에 대해 구체적으로 설명되어 있습니다. Elastic Beanstalk 플랫폼에서 특정 플랫폼을 찾습니다.

모든 지원 플랫폼에서 구문 및 의미는 동일하며 이 페이지의 설명과 같습니다. 애플리케이션을 해당 언어로 빌드하여 실행하기 위한 이러한 파일의 구체적인 사용법은 개별 플랫폼 항목에 나와 있습니다.

Buildfile

애플리케이션에 대한 사용자 지정 빌드 및 구성 명령을 지정하려면 애플리케이션 소스의 루트 디렉터리에 Buildfile이라는 파일을 배치합니다. 파일 이름은 대/소문자를 구분합니다. Buildfile에 대해 다음 구문을 사용합니다.

<process_name>: <command>

Buildfile의 명령은 ^[A-Za-z0-9_-]+:\s*[^\s].*$ 정규식과 일치해야 합니다.

Elastic Beanstalk는 Buildfile을 통해 실행되는 애플리케이션을 모니터링하지 않습니다. 단기간 실행되고 작업 완료 후 종료되는 명령에는 Buildfile을 사용합니다. 종료하면 안 되는 장기 실행 애플리케이션 프로세스의 경우 Procfile을 사용합니다.

Buildfile의 모든 경로는 소스 번들의 루트에 상대적입니다. 다음 Buildfile 예제에서 build.sh는 소스 번들의 루트에 위치한 셸 스크립트입니다.

예 Buildfile

make: ./build.sh

사용자 지정 빌드 단계를 제공하려는 경우 가장 간단한 명령 이외의 작업에는 Buildfile 대신 predeploy 플랫폼 후크를 사용하는 것이 좋습니다. 플랫폼 후크는 다양한 스크립트와 더 향상된 오류 처리를 허용합니다. 플랫폼 후크는 다음 섹션에서 설명합니다.

Procfile

애플리케이션을 시작하고 실행하기 위한 사용자 지정 명령을 지정하려면 애플리케이션 소스의 루트 디렉터리에 Procfile이라는 파일을 배치합니다. 파일 이름은 대/소문자를 구분합니다. Procfile에 대해 다음 구문을 사용합니다. 하나 이상의 명령을 지정할 수 있습니다.

<process_name1>: <command1> <process_name2>: <command2> ...

Procfile의 각 줄은 ^[A-Za-z0-9_-]+:\s*[^\s].*$ 정규식과 일치해야 합니다.

종료하면 안 되는 장기 실행 애플리케이션 프로세스의 경우 Procfile을 사용합니다. Elastic Beanstalk는 프로세스가 Procfile에서 계속 실행될 것으로 기대합니다. Elastic Beanstalk는 이러한 프로세스를 모니터링하고 종료되는 프로세스를 다시 시작합니다. 단기 실행 프로세스의 경우 Buildfile을 사용합니다.

Procfile의 모든 경로는 소스 번들의 루트에 상대적입니다. 다음 예제 Procfile은 세 가지 프로세스를 정의합니다. 예제의 첫 줄에 있는 web기본 웹 애플리케이션입니다.

예 Procfile

web: bin/myserver cache: bin/mycache foo: bin/fooapp

Elastic Beanstalk는 포트 5000의 주 웹 애플리케이션에 요청을 전달하도록 프록시 서버를 구성하며 이 포트 번호를 구성할 수 있습니다. Procfile의 일반적인 용도는 이 포트 번호를 애플리케이션에 명령 인수로 전달하는 것입니다. 프록시 구성에 대한 자세한 내용을 보려면 이 페이지의 역방향 프록시 구성 섹션을 확장하십시오.

Elastic Beanstalk는 로그 파일의 Procfile 프로세스에서 표준 출력 및 오류 스트림을 캡처합니다. Elastic Beanstalk는 프로세스의 이름을 따서 로그 파일의 이름을 지정하고 /var/log에 저장합니다 예를 들어 앞의 예제에서 web 프로세스는 web-1.logweb-1.error.log에 대해 각각 stdoutstderr라는 로그를 생성합니다.

플랫폼 후크는 환경의 플랫폼을 확장하도록 특별히 설계되었습니다. 플랫폼 후크는 애플리케이션 소스 코드의 일부로 배포되는 사용자 지정 스크립트 및 기타 실행 파일로서 다양한 인스턴스 프로비저닝 단계에서 Elastic Beanstalk에 의해 실행됩니다.

참고

Amazon Linux AMI 플랫폼 버전(이전 Amazon Linux 2)에서는 플랫폼 후크가 지원되지 않습니다.

애플리케이션 배포 플랫폼 후크

애플리케이션 배포는 배포할 새 소스 번들을 제공하거나 모든 환경 인스턴스를 종료하고 재생성해야 하는 구성 변경을 수행할 때 발생합니다.

애플리케이션 배포 중에 실행되는 플랫폼 후크를 제공하려면 소스 번들의 .platform/hooks 디렉터리 아래에 있는 다음 하위 디렉터리 중 하나에 파일을 배치합니다.

  • prebuild - 파일은 Elastic Beanstalk 플랫폼 엔진이 애플리케이션 소스 번들을 다운로드하고 추출한 후 애플리케이션과 웹 서버를 설정하고 구성하기 전에 실행됩니다.

    prebuild 파일은 구성 파일의 commands 섹션에 있는 명령을 실행한 후 Buildfile 명령을 실행하기 전에 실행됩니다.

  • predeploy - 파일은 Elastic Beanstalk 플랫폼 엔진이 애플리케이션 및 웹 서버를 설정하고 구성한 후 최종 런타임 위치에 배포하기 전에 실행됩니다.

    predeploy 파일은 구성 파일의 container_commands 섹션에 있는 명령을 실행한 후 Procfile 명령을 실행하기 전에 실행됩니다.

  • postdeploy - 파일은 Elastic Beanstalk 플랫폼 엔진이 애플리케이션 및 프록시 서버를 배포한 후에 실행됩니다.

    이것이 마지막 배포 워크플로우 단계입니다.

구성 배포 플랫폼 후크

구성 배포는 환경 인스턴스를 다시 만들지 않고 단지 업데이트하는 구성 변경을 수행할 때 발생합니다. 다음 옵션 업데이트 시 구성 업데이트가 이루어집니다.

구성 배포 중에 실행되는 후크를 제공하려면 소스 번들의 .platform/confighooks 디렉터리 아래에 후크를 배치합니다. 애플리케이션 배포 후크의 경우와 동일한 세 개의 하위 디렉터리가 적용됩니다.

플랫폼 후크에 대한 자세한 정보

후크 파일은 이진 파일 또는 해당 인터프리터 경로를 포함하는 #! 줄(#!/bin/bash)로 시작하는 스크립트 파일일 수 있습니다. 모든 파일에는 실행 권한이 있어야 합니다. 후크 파일에 대한 실행 권한을 설정하려면 chmod +x를 사용합니다.

Elastic Beanstalk는 파일 이름의 사전 순서에 따라 각 디렉터리의 파일을 실행합니다. 모든 파일은 root 사용자로 실행됩니다. 플랫폼 후크의 현재 작업 디렉터리(cwd)는 애플리케이션의 루트 디렉터리입니다. prebuildpredeploy 파일의 경우 애플리케이션 스테이징 디렉터리이고 postdeploy 파일의 경우 현재 애플리케이션 디렉터리입니다. 파일 중 하나가 실패하면(0이 아닌 종료 코드로 종료) 배포가 중단되고 실패합니다.

후크 파일은 애플리케이션 옵션에서 정의한 모든 환경 속성 및 시스템 환경 변수 HOME, PATHPORT에 액세스할 수 있습니다.

환경 변수 및 기타 구성 옵션의 값을 플랫폼 후크 스크립트로 가져오려는 경우 환경 인스턴스에서 Elastic Beanstalk가 제공하는 get-config 유틸리티를 사용할 수 있습니다. 자세한 내용은 플랫폼 스크립트 도구을(를) 참조하십시오.

애플리케이션 소스 코드의 .ebextensions 디렉터리에 구성 파일을 추가하여 Elastic Beanstalk 환경의 다양한 측면을 구성할 수 있습니다. 구성 파일을 사용하면 환경 인스턴스에서 소프트웨어 및 기타 파일을 사용자 지정하고 인스턴스에서 초기화 명령을 실행할 수 있습니다. 자세한 내용은 Linux 서버에서 소프트웨어 사용자 지정 단원을 참조하세요.

구성 파일을 사용하여 구성 옵션을 설정할 수도 있습니다. 플랫폼 동작을 제어하는 옵션에는 여러 가지가 있으며 이러한 옵션 중 일부는 플랫폼에 따라 다릅니다.

Amazon Linux 2 플랫폼에서는 Buildfile, Procfile플랫폼 후크를 사용하여 인스턴스 프로비저닝 중에 환경 인스턴스에서 사용자 지정 코드를 구성하고 실행하는 것이 좋습니다. 이러한 메커니즘은 이 페이지의 이전 섹션에 설명되어 있습니다. .ebextensions 구성 파일에서 명령과 컨테이너 명령을 계속 사용할 수 있지만 작업하기가 쉽지 않습니다. 예를 들어, YAML 파일 내에 명령 스크립트를 작성하는 것은 구문 관점에서 어려울 수 있습니다. AWS CloudFormation 리소스에 대한 참조가 필요한 스크립트에 대해서는 .ebextensions 구성 파일을 사용해야 합니다.

모든 Amazon Linux 2 플랫폼 버전은 nginx를 기본 역방향 프록시 서버로 사용합니다. Tomcat, Node.js, PHP 및 Python 플랫폼은 Apache HTTPD도 대안으로 지원합니다. 이러한 플랫폼에서 Apache를 선택하려면 aws:elasticbeanstalk:environment:proxy 네임스페이스의 ProxyServer 옵션을 apache로 설정합니다. 모든 플랫폼에서는 이 단원에 설명된 것처럼 일관된 방식으로 프록시 서버를 구성할 수 있습니다.

참고

Amazon Linux AMI 플랫폼 버전(이전 Amazon Linux 2)에서는 프록시 서버를 다르게 구성해야 할 수 있습니다. 레거시 세부 정보는 이 가이드의 해당 플랫폼 항목에서 확인할 수 있습니다.

Elastic Beanstalk는 환경의 루트 URL(예: http://my-env.elasticbeanstalk.com)에 있는 기본 웹 애플리케이션으로 웹 트래픽을 전달하도록 환경 인스턴스에서 프록시 서버를 구성합니다.

기본적으로 Elastic Beanstalk는 포트 80에서 수신되는 요청을 포트 5000의 기본 웹 애플리케이션에 전달하도록 프록시를 구성합니다. 다음 예제와 같이 구성 파일에서 aws:elasticbeanstalk:application:environment 네임스페이스를 사용하는 PORT 환경 속성을 설정하여 이 포트 번호를 구성할 수 있습니다.

option_settings: - namespace: aws:elasticbeanstalk:application:environment option_name: PORT value: <main_port_number>

애플리케이션의 환경 변수 설정에 대한 자세한 내용은 옵션 설정을 참조하십시오.

애플리케이션은 프록시에 구성된 포트에서 수신 대기해야 합니다. PORT 환경 속성을 사용하여 기본 포트를 변경하면 코드에서 PORT 환경 변수의 값을 읽어 해당 포트에 액세스할 수 있습니다. 예를 들어 Go에서 os.Getenv("PORT")를 호출하거나 Java에서 System.getenv("PORT")를 호출합니다. 여러 애플리케이션 프로세스로 트래픽을 보내도록 프록시를 구성하는 경우 여러 환경 속성을 구성하고 프록시 구성 및 애플리케이션 코드 모두에서 해당 값을 사용할 수 있습니다. 또 다른 옵션은 포트 값을 Procfile의 명령 인수로 프로세스에 전달하는 것입니다. 자세한 내용은 이 페이지의 Buildfile 및 Buildfile 섹션을 확장하십시오.

nginx 구성

Elastic Beanstalk는 nginx를 기본 역방향 프록시로 사용하여 애플리케이션을 Elastic Load Balancing 로드 밸런서에 매핑합니다. Elastic Beanstalk는 확장하거나 자체 구성으로 완전히 재정의할 수 있는 기본 nginx 구성을 제공합니다.

참고

nginx .conf 구성 파일을 추가하거나 편집할 때는 UTF-8로 인코딩해야 합니다.

Elastic Beanstalk의 기본 nginx 구성을 확장하려면 애플리케이션 소스 번들의 .platform/nginx/conf.d/라는 폴더에 .conf 구성 파일을 추가합니다. Elastic Beanstalk nginx 구성에는 이 폴더의 .conf 파일이 자동으로 포함됩니다.

~/workspace/my-app/ |-- .platform | `-- nginx | `-- conf.d | `-- myconf.conf `-- other source files

Elastic Beanstalk의 기본 nginx 구성을 완전히 재정의하려면 .platform/nginx/nginx.conf의 소스 번들에 구성을 포함시킵니다.

~/workspace/my-app/ |-- .platform | `-- nginx | `-- nginx.conf `-- other source files

Elastic Beanstalk의 nginx 구성을 재정의하는 경우 nginx.conf에 다음 줄을 추가하여 향상된 상태 보고 및 모니터링, 자동 애플리케이션 매핑 및 정적 파일에 대한 Elastic Beanstalk 구성을 가져옵니다.

include conf.d/elasticbeanstalk/*.conf;

Apache HTTPD 설정

Tomcat, Node.js, PHP, Python 플랫폼에서는 nginx에 대한 대안으로 Apache HTTPD 프록시 서버를 선택할 수 있습니다. 이는 기본값이 아닙니다. 다음 예제는 Apache HTTPD를 사용하도록 Elastic Beanstalk를 구성합니다.

예 .ebextensions/httpd-proxy.config

option_settings: aws:elasticbeanstalk:environment:proxy: ProxyServer: apache

추가 구성 파일을 사용하여 Elastic Beanstalk 기본 Apache 구성을 확장할 수 있습니다. 또는 Elastic Beanstalk 기본 Apache 구성을 완전히 재정의할 수 있습니다.

Elastic Beanstalk의 기본 Apache 구성을 확장하려면 애플리케이션 소스 번들의 .platform/httpd/conf.d라는 폴더에 .conf 구성 파일을 추가합니다. Elastic Beanstalk의 Apache 구성에는 이 폴더의 .conf 파일이 자동으로 포함됩니다.

~/workspace/my-app/ |-- .ebextensions | -- httpd-proxy.config |-- .platform | -- httpd | -- conf.d | -- port5000.conf | -- ssl.conf -- index.jsp

예를 들어, 다음 Apache 2.4 구성은 포트 5000에 리스너를 추가합니다.

예 .platform/httpd/conf.d/port5000.conf

listen 5000 <VirtualHost *:5000> <Proxy *> Require all granted </Proxy> ProxyPass / http://localhost:8080/ retry=0 ProxyPassReverse / http://localhost:8080/ ProxyPreserveHost on ErrorLog /var/log/httpd/elasticbeanstalk-error_log </VirtualHost>

Elastic Beanstalk의 기본 Apache 구성을 완전히 재정의하려면 .platform/httpd/conf/httpd.conf의 소스 번들에 구성을 포함시킵니다.

~/workspace/my-app/ |-- .ebextensions | -- httpd-proxy.config |-- .platform | `-- httpd | `-- conf | `-- httpd.conf `-- index.jsp

Elastic Beanstalk의 Apache 구성을 재정의하는 경우 httpd.conf에 다음 줄을 추가하여 향상된 상태 보고 및 모니터링, 자동 애플리케이션 매핑 및 정적 파일에 대한 Elastic Beanstalk 구성을 가져옵니다.

IncludeOptional conf.d/elasticbeanstalk/*.conf

Elastic Beanstalk 애플리케이션을 Amazon Linux 2 플랫폼으로 마이그레이션하는 경우 Elastic Beanstalk Linux 애플리케이션을 Amazon Linux 2로 마이그레이션의 정보도 읽어보세요.

확장자가 있는 애플리케이션 예제

다음 예제에서는 Elastic Beanstalk Amazon Linux 2 플랫폼이 지원하는 여러 확장 기능이 있는 애플리케이션 소스 번들(Procfile, .ebextensions 구성 파일, 사용자 지정 후크 및 프록시 구성 파일)을 보여줍니다.

~/my-app/ |-- web.jar |-- Procfile |-- readme.md |-- .ebextensions/ | |-- options.config # Option settings | `-- cloudwatch.config # Other .ebextensions sections, for example files and container commands `-- .platform/ |-- nginx/ # Proxy configuration | |-- nginx.conf | `-- conf.d/ | `-- custom.conf |-- hooks/ # Application deployment hooks | |-- prebuild/ | | |-- 01_set_secrets.sh | | `-- 12_update_permissions.sh | |-- predeploy/ | | `-- 01_some_service_stop.sh | `-- postdeploy/ | |-- 01_set_tmp_file_permissions.sh | |-- 50_run_something_after_app_deployment.sh | `-- 99_some_service_start.sh `-- confighooks/ # Configuration deployment hooks |-- prebuild/ | `-- 01_set_secrets.sh |-- predeploy/ | `-- 01_some_service_stop.sh `-- postdeploy/ |-- 01_run_something_after_config_deployment.sh `-- 99_some_service_start.sh
참고

Amazon Linux AMI 플랫폼 버전(이전 Amazon Linux 2)에서는 이러한 확장 중 일부가 지원되지 않습니다.

인스턴스 배포 워크플로

여러 가지 방법으로 환경 플랫폼을 확장할 수 있으므로 Elastic Beanstalk가 인스턴스를 프로비저닝하거나 인스턴스에 대해 배포를 실행할 때마다 어떤 일이 발생하는지 알면 유용합니다. 다음 다이어그램은 이 전체 배포 워크플로우를 보여줍니다. 여기서는 배포의 여러 단계와 각 단계에서 Elastic Beanstalk가 수행하는 단계가 나와 있습니다.

참고
  • 다이어그램은 배포 중에 환경 인스턴스에서 Elastic Beanstalk가 실행하는 전체 단계 세트를 나타내지 않습니다. 사용자 지정 실행을 위한 순서와 컨텍스트를 제공하기 위해 이 다이어그램을 제공합니다.

  • 간단하게 설명하기 위해 다이어그램에는 .platform/hooks/* 후크 하위 디렉터리(애플리케이션 배포용)만 표시되어 있고 .platform/confighooks/* 후크 하위 디렉터리(구성 배포용)는 표시되어 있지 않습니다. 후자의 하위 디렉터리의 후크는 다이어그램에 표시된 해당 하위 디렉터리의 후크와 정확히 동일한 단계에서 실행됩니다.


        Amazon Linux 2 플랫폼 버전을 사용하여 환경의 인스턴스에서 확장 실행 순서

다음 목록에서는 배포 단계에 대해 자세히 설명합니다.

  1. 초기 단계

    Elastic Beanstalk는 애플리케이션을 다운로드하고 추출합니다. 이러한 각 단계 후에는 Elastic Beanstalk가 확장성 단계 중 하나를 실행합니다.

    1. 구성 파일의 commands: 섹션에 있는 명령을 실행합니다.

    2. 소스 번들의 .platform/hooks/prebuild 디렉터리(구성 배포의 경우 .platform/confighooks/prebuild)에 있는 모든 실행 파일을 실행합니다.

  2. 구성

    Elastic Beanstalk는 애플리케이션과 프록시 서버를 구성합니다.

    1. 소스 번들의 Buildfile에 있는 명령을 실행합니다.

    2. 사용자 지정 프록시 구성 파일(소스 번들의 .platform/nginx 디렉터리에 있는 경우)을 런타임 위치로 복사합니다.

    3. 구성 파일의 container_commands: 섹션에 있는 명령을 실행합니다.

    4. 소스 번들의 .platform/hooks/predeploy 디렉터리(구성 배포의 경우 .platform/confighooks/predeploy)에 있는 모든 실행 파일을 실행합니다.

  3. 배포

    Elastic Beanstalk는 애플리케이션과 프록시 서버를 배포 및 실행합니다.

    1. 소스 번들의 Procfile 파일에 있는 명령을 실행합니다.

    2. 사용자 지정 프록시 구성 파일이 있는 경우 프록시 서버를 실행하거나 다시 실행합니다.

    3. 소스 번들의 .platform/hooks/postdeploy 디렉터리(구성 배포의 경우 .platform/confighooks/postdeploy)에 있는 모든 실행 파일을 실행합니다.