AWS Elastic Beanstalk
개발자 가이드

AWS Elastic Beanstalk 사용자 지정 플랫폼

Elastic Beanstalk는 사용자 지정 플랫폼을 지원합니다. 사용자 지정 플랫폼은 몇 가지 측면에서 사용자 지정 이미지보다 더 세부적인 사용자 지정을 제공합니다. 사용자 지정 플랫폼을 사용할 경우 플랫폼을 완전히 새로 개발하여 Elastic Beanstalk가 플랫폼 인스턴스에서 실행하는 운영 체제, 추가 소프트웨어 및 스크립트를 사용자 지정할 수 있습니다. 따라서 Elastic Beanstalk가 관리형 플랫폼을 제공하지 않는 언어 또는 기타 인프라 소프트웨어를 사용하는 애플리케이션을 위한 플랫폼을 빌드할 수 있습니다. 사용자 지정 이미지와 비교하십시오. 사용자 지정 이미지에서는 기존 Elastic Beanstalk 플랫폼에 사용하는 Amazon 머신 이미지(AMI)를 수정하며 Elastic Beanstalk에서 계속해서 플랫폼 스크립트를 제공하고 해당 플랫폼의 소프트웨어 스택을 제어합니다. 또한 사용자 지정 플랫폼에서는 자동화된 스크립트 방식으로 사용자 지정을 생성하고 유지 관리하고, 사용자 지정 이미지에서는 실행 중인 인스턴스를 수동으로 변경합니다.

사용자 지정 플랫폼을 생성하려면 지원되는 운영 체제인 Ubuntu, RHEL, Amazon Linux 중 하나(정확한 버전은 Platform.yaml 파일 형식flavor 항목 참조)에서 AMI를 빌드한 후 추가로 사용자 지정합니다. Amazon Elastic Compute Cloud(Amazon EC2)용 AMI를 비롯한 다양한 플랫폼의 머신 이미지를 생성할 수 있는 오픈 소스 도구인 Packer를 사용하여 Elastic Beanstalk 플랫폼을 직접 생성합니다. Elastic Beanstalk 플랫폼은 한 애플리케이션을 지원하는 소프트웨어 집합을 실행하도록 구성된 AMI 및 사용자 지정 구성 옵션 및 기본 구성 옵션 설정을 포함할 수 있는 메타데이터로 구성됩니다.

Elastic Beanstalk는 Packer를 별도의 기본 제공 플랫폼으로 관리하므로 Packer 구성 및 버전에 대해서 신경을 쓸 필요가 없습니다.

Packer 템플릿, 그리고 이 템플릿이 호출하는 스크립트 및 파일을 Elastic Beanstalk에 제공해 AMI를 빌드합니다. 이들 구성 요소는 platform definition file를 통해 패키징되며 이러한 플랫폼 정의 파일은 템플릿과 메타데이터를 platform definition archive라는 ZIP 아카이브로 지정합니다.

사용자 지정 플랫폼을 만들면 Packer를 실행하는 Elastic IP가 없는 단일 인스턴스 환경이 실행됩니다. 그런 다음 Packer는 다른 인스턴스를 실행하여 이미지를 만듭니다. 이 환경은 여러 플랫폼 및 각 플랫폼의 여러 버전에 재사용할 수 있습니다.

참고

사용자 지정 플랫폼은 AWS 리전별로 존재합니다. 여러 리전에서 Elastic Beanstalk를 사용하는 경우 리전별로 플랫폼을 따로 생성해야 합니다.

특정 상황에서 Packer를 통해 실행된 인스턴스는 정리되지 않으므로 직접 종료해야 합니다. 이러한 인스턴스를 직접 정리하는 방법은 Packer 인스턴스 정리 단원을 참조하십시오.

귀하의 계정 내 사용자는 환경을 생성할 때 플랫폼 ARN을 지정해 귀하의 사용자 지정 플랫폼을 사용할 수 있습니다. 이러한 ARN은 귀하가 사용자 지정 플랫폼을 생성할 때 사용한 eb platform create 명령을 통해 반환됩니다.

사용자 지정 플랫폼을 빌드할 때마다 Elastic Beanstalk는 새 플랫폼 버전을 생성합니다. 사용자는 이름으로 플랫폼을 지정하여 플랫폼의 최신 버전만 가져오거나 버전 번호를 포함하여 특정 버전을 가져올 수 있습니다.

예를 들어 ARN이 MyCustomPlatformARN이고 버전이 3.0인 사용자 지정 플랫폼의 최신 버전을 배포하려면 EB CLI 명령줄이 다음과 같아야 합니다.

eb create -p MyCustomPlatformARN

버전 2.1을 배포하려면 EB CLI 명령줄이 다음과 같아야 합니다.

eb create -p MyCustomPlatformARN --version 2.1

사용자 지정 플랫폼 버전을 생성할 때 해당 버전에 태그를 적용하고 기존 사용자 지정 플랫폼 버전의 태그를 편집할 수 있습니다. 자세한 내용은 사용자 지정 플랫 버전에 태그 지정 단원을 참조하십시오.

사용자 지정 플랫폼 생성

사용자 지정 플랫폼을 만들려면 애플리케이션의 루트에 platform definition file, platform.yaml 파일이 있어야 합니다. 이 파일은 사용자 지정 플랫폼을 생성하는 데 사용한 빌더 유형을 정의합니다. 이 파일의 형식은 Platform.yaml 파일 형식에서 설명합니다. 사용자 지정 플랫폼을 처음부터 직접 만들거나, 샘플 사용자 지정 플랫폼 중 하나를 사용하여 만들 수 있습니다.

샘플 사용자 지정 플랫폼 사용

사용자 지정 플랫폼을 직접 생성하는 대신 platform definition archive 샘플 중 하나를 사용하여 사용자 지정 플랫폼을 부트스트랩할 수 있습니다. 사용할 수 있기 전에 샘플에서 구성해야 하는 유일한 항목은 소스 AMI 및 리전입니다.

참고

수정하지 않은 샘플 사용자 지정 플랫폼을 프로덕션에서 사용하지 마십시오. 이러한 샘플의 목적은 사용자 지정 플랫폼에서 사용할 수 있는 일부 기능을 보여 주는 것이며, 이러한 샘플은 프로덕션용으로 적절하지 않습니다.

NodePlatform_Ubuntu.zip

이 사용자 지정 플랫폼은 Ubuntu 16.04에 기반하며 Node.js 4.4.4를 지원합니다. 이 단원에서는 이 사용자 지정 플랫폼을 예로 사용하겠습니다.

NodePlatform_RHEL.zip

이 사용자 지정 플랫폼은 RHEL 7.2에 기반하며 Node.js 4.4.4를 지원합니다.

NodePlatform_AmazonLinux.zip

이 사용자 지정 플랫폼은 Amazon Linux 2016.09.1에 기반하며 Node.js 4.4.4를 지원합니다.

TomcatPlatform_Ubuntu.zip

이 사용자 지정 플랫폼은 Ubuntu 16.04에 기반하며 Tomcat 7/Java 8을 지원합니다.

CustomPlatform_NodeSampleApp.zip

expressejs를 사용하여 정적 웹 페이지를 표시하는 Node.js 샘플입니다.

CustomPlatform_TomcatSampleApp.zip

배포 시 정적 웹 페이지를 표시하는 Tomcat 샘플입니다.

샘플 platform definition archiveNodePlatform_Ubuntu.zip를 다운로드합니다. 이 파일에는 platform definition file, Packer 템플릿, 이미지를 생성할 때 Packer가 실행하는 스크립트, 플랫폼을 생성할 때 Packer가 빌더 인스턴스에 복사하는 스크립트 및 구성 파일이 포함되어 있습니다.

예 NodePlatform_Ubuntu.zip

|-- builder Contains files used by Packer to create the custom platform |-- custom_platform.json Packer template |-- platform.yaml Platform definition file |-- ReadMe.txt Briefly describes the sample

platform definition file, platform.yaml은 Packer 템플릿 이름 custom_platform.json을 Elastic Beanstalk에 알려 줍니다.

version: "1.0" provisioner: type: packer template: custom_platform.json flavor: ubuntu1604

Packer 템플릿은 플랫폼의 AMI를 빌드하는 방법을 Packer에 알려 주며, HVM 인스턴스 유형의 경우 Ubuntu AMI를 플랫폼 이미지의 기반으로 사용합니다. provisioners 섹션은 아카이브의 builder 폴더에 있는 모든 파일을 인스턴스에 복사하고 인스턴스에서 builder.sh 스크립트를 실행할 것을 Packer에 알려 줍니다. 스크립트가 완료되면 Packer는 수정된 인스턴스에서 이미지를 생성합니다.

Elastic Beanstalk는 다음과 같이 Packer에서 AMI에 태그를 지정하는 데 사용할 수 있는 환경 변수 세 가지를 생성합니다.

AWS_EB_PLATFORM_ARN

사용자 지정 플랫폼의 ARN입니다.

AWS_EB_PLATFORM_NAME

사용자 지정 플랫폼의 이름입니다.

AWS_EB_PLATFORM_VERSION

사용자 지정 플랫폼의 버전입니다.

샘플 custom_platform.json 파일은 이들 변수를 사용해 다음 값을 정의하여 스크립트에 사용합니다.

  • platform_name(platform.yaml에 의해 설정)

  • platform_version(platform.yaml에 의해 설정)

  • platform_arn(메인 빌드 스크립트에 의해 설정), builder.sh(샘플 custom_platform.json 파일 마지막에 표시)

custom_platform.json 파일에는 해당 값을 제공해야 하는 두 가지 속성(source_amiregion)이 포함됩니다. 올바른 AMI 및 리전 값 선택에 대한 자세한 내용은 eb-custom-platforms-samples GitHub 리포지토리의 Packer 템플릿 업데이트를 참조하십시오.

예 custom_platform.json

{ "variables": { "platform_name": "{{env `AWS_EB_PLATFORM_NAME`}}", "platform_version": "{{env `AWS_EB_PLATFORM_VERSION`}}", "platform_arn": "{{env `AWS_EB_PLATFORM_ARN`}}" }, "builders": [ { ... "region": "", "source_ami": "", ... } ], "provisioners": [ {...}, { "type": "shell", "execute_command": "chmod +x {{ .Path }}; {{ .Vars }} sudo {{ .Path }}", "scripts": [ "builder/builder.sh" ] } ] }

platform definition archive에 포함시키는 스크립트 및 기타 파일은 인스턴스에 적용하고자 하는 수정 내용에 따라 크게 달라집니다. 샘플 플랫폼에는 다음 스크립트가 포함되어 있습니다.

  • 00-sync-apt.sh – 코멘트 아웃되었습니다(apt -y update). 이 명령은 사용자 입력을 요구하여 자동 패키지 업데이트를 중단시키므로 AWS에서 이 명령을 코멘트 아웃했습니다. 이는 Ubuntu 문제일 수 있습니다. 하지만 여전히 apt -y update 실행을 모범 사례로 권장합니다. 이 때문에 이 명령을 참조용 샘플 스크립트에 남겨 두었습니다.

  • 01-install-nginx.sh – nginx를 설치합니다.

  • 02-setup-platform.shwget, tree, git를 설치합니다. 후크 및 로깅 구성을 인스턴스에 복사하고 다음 디렉터리를 생성합니다.

    • /etc/SampleNodePlatform – 배포할 때 컨테이너 구성 파일이 업로드되는 위치입니다.

    • /opt/elasticbeanstalk/deploy/appsource/ – 배포할 때 00-unzip.sh 스크립트가 애플리케이션 소스 코드를 업로드하는 위치입니다(이 스크립트에 대한 자세한 내용은 플랫폼 스크립트 단원 참조).

    • /var/app/staging/ – 배포할 때 애플리케이션 소스 코드가 처리되는 위치입니다.

    • /var/app/current/ – 처리 후 애플리케이션 소스 코드가 실행되는 위치입니다.

    • /var/log/nginx/healthd/확장 상태 확인 에이전트가 로그를 작성하는 위치입니다.

    • /var/nodejs – 배포할 때 Node.js 파일이 업로드되는 위치입니다.

EB CLI를 사용해 샘플 platform definition archive로 최초의 사용자 지정 플랫폼을 생성해 보십시오.

사용자 지정 플랫폼을 생성하는 방법

  1. EB CLI를 설치합니다.

  2. 샘플 사용자 지정 플랫폼의 압축을 해제할 디렉터리를 생성합니다.

    ~$ mkdir ~/custom-platform
  3. 디렉터리에 NodePlatform_Ubuntu.zip 압축을 풀고 해당 디렉터리로 변경합니다.

    ~$ cd ~/custom-platform ~/custom-platform$ unzip ~/NodePlatform_Ubuntu.zip ~/custom-platform$ cd NodePlatform_Ubuntu
  4. custom_platform.json 파일을 편집하고, source_amiregion 속성의 값을 입력합니다. 자세한 내용은 Packer 템플릿 업데이트를 참조하십시오.

  5. eb platform init를 실행하고 프롬프트의 메시지를 따라 플랫폼 리포지토리를 초기화합니다.

    eb platformebp로 줄일 수 있습니다.

    참고

    Windows PowerShell은 ebp를 명령 별칭으로 사용합니다. Windows PowerShell에서 EB CLI를 실행하는 경우 이 명령의 긴 형식(eb platform)을 사용합니다.

    ~/custom-platform$ eb platform init

    이 명령은 또한 현재 디렉터리에 .elasticbeanstalk 디렉터리를 생성하고 구성 파일 config.yml을 해당 디렉터리에 추가합니다. 이 파일을 변경하거나 삭제하지 마십시오. Elastic Beanstalk가 사용자 지정 플랫폼을 생성할 때 이 파일을 사용합니다.

    기본적으로 eb platform init는 현재 폴더의 이름을 사용자 지정 플랫폼의 이름으로 사용합니다. 이 예제에서는 custom-platform입니다.

  6. eb platform create를 실행해 Packer 환경을 시작하고 사용자 지정 플랫폼의 ARN을 확인합니다. 이 값은 나중에 사용자 지정 플랫폼에서 환경을 생성할 때 필요합니다.

    ~/custom-platform$ eb platform create ...

    기본적으로 Elastic Beanstalk는 사용자 지정 플랫폼에 인스턴스 프로파일 aws-elasticbeanstalk-custom-platform-ec2-role을 생성합니다. 대신 기본 인스턴스 프로파일을 사용하려면 옵션 -ip INSTANCE_PROFILEeb platform create 명령에 추가하면 됩니다.

    참고

    Elastic Beanstalk 기본 인스턴스 프로파일 aws-elasticbeanstalk-ec2-role을 사용하면 Packer가 사용자 지정 플랫폼을 생성하지 못합니다.

    EB CLI는 빌드가 완료될 때까지 Packer 환경의 이벤트 출력을 표시합니다. Ctrl+C를 누르면 이벤트 보기를 종료할 수 있습니다.

  7. eb platform logs 명령을 사용해 오류 로그를 확인할 수 있습니다.

    ~/custom-platform$ eb platform logs ...
  8. eb platform events로 나중에 프로세스를 확인할 수 있습니다.

    ~/custom-platform$ eb platform events ...
  9. eb platform status로 플랫폼의 상태를 확인합니다.

    ~/custom-platform$ eb platform status ...

작업이 완료되면 Elastic Beanstalk 환경을 시작하는 데 사용할 수 있는 플랫폼이 준비됩니다.

콘솔에서 환경을 생성할 때 이 사용자 지정 플랫폼을 사용할 수 있습니다. 새 환경 만들기 마법사 단원을 참조하십시오.

사용자 지정 플랫폼에서 환경을 시작하려면

  1. 애플리케이션용 디렉터리를 생성합니다.

    ~$ mkdir custom-platform-app ~$ cd ~/custom-platform-app
  2. 애플리케이션 리포지토리를 초기화합니다.

    ~/custom-platform-app$ eb init ...
  3. 샘플 애플리케이션 NodeSampleApp.zip을 다운로드합니다.

  4. 샘플 애플리케이션의 압축을 풉니다.

    ~/custom-platform-app$ unzip ~/NodeSampleApp.zip
  5. eb create -p CUSTOM-PLATFORM-ARN을 실행해 사용자 지정 플랫폼을 실행하는 환경을 시작합니다. CUSTOM-PLATFORM-ARNeb platform create 명령에 의해 반환되는 ARN입니다.

    ~/custom-platform-app$ eb create -p CUSTOM-PLATFORM-ARN ...