Elastic Beanstalk 환경을 위한 플랫폼 스크립트 도구
이 주제에서는 Amazon Linux 플랫폼을 사용하는 환경에 대해 AWS Elastic Beanstalk가 제공하는 도구에 대해 설명합니다. 이 도구는 Elastic Beanstalk 환경의 Amazon EC2 인스턴스에 있습니다.
get-config
get-config
도구를 사용하면 환경 변수 값과 기타 플랫폼 및 인스턴스 정보를 검색할 수 있습니다. 이 도구는 /opt/elasticbeanstalk/bin/get-config
에 있습니다.
get-config 명령
각 get-config
도구 명령은 특정 유형의 정보를 반환합니다. 다음 구문을 사용하여 도구의 명령을 실행합니다.
$ /opt/elasticbeanstalk/bin/get-config command
[ options
]
다음 예제에서는 environment
명령을 실행합니다.
$ /opt/elasticbeanstalk/bin/get-config environment -k PORT
선택한 명령 및 옵션에 따라 도구에서 키-값 페어나 단일 값이 있는 객체(JSON 또는 YAML)가 반환됩니다.
SSH를 사용해 Elastic Beanstalk 환경의 EC2 인스턴스에 연결하여 get-config
를 테스트할 수 있습니다.
참고
테스트용으로 get-config
를 실행할 때 일부 명령의 경우 기본 정보에 액세스하기 위해 루트 사용자 권한이 필요할 수 있습니다. 액세스 권한 오류가 발생하면 sudo
로 명령을 다시 실행합니다.
환경에 배포하는 스크립트에서 이 도구를 사용할 때는 sudo
를 추가할 필요가 없습니다. Elastic Beanstalk가 모든 스크립트를 루트 사용자로 실행합니다.
다음 단원에서는 도구의 명령에 대해 설명합니다.
get-config optionsettings
명령은 환경에 설정되고 환경 인스턴스의 플랫폼에서 사용되는 구성 옵션을 나열하는 객체를 반환합니다. 구성 옵션들은 네임스페이스별로 구성됩니다.
$ /opt/elasticbeanstalk/bin/get-config optionsettings
{"aws:elasticbeanstalk:application:environment":{"JDBC_CONNECTION_STRING":""},"aws:elasticbeanstalk:container:tomcat:jvmoptions":{"JVM Options":"","Xms":"256m","Xmx":"256m"},"aws:elasticbeanstalk:environment:proxy":{"ProxyServer":"nginx","StaticFiles":[""]},"aws:elasticbeanstalk:healthreporting:system":{"SystemType":"enhanced"},"aws:elasticbeanstalk:hostmanager":{"LogPublicationControl":"false"}}
특정 구성 옵션 값을 반환하려면 --namespace
(-n
) 옵션을 사용하여 네임스페이스를 지정하고 --option-name
(-o
) 옵션을 사용하여 옵션 이름을 지정합니다.
$ /opt/elasticbeanstalk/bin/get-config optionsettings -n aws:elasticbeanstalk:container:php:phpini
-o memory_limit
256M
get-config environment
명령은 환경 속성 목록이 포함된 객체를 반환합니다. 여기에는 사용자 구성 속성과 Elastic Beanstalk에서 제공하는 속성이 모두 포함됩니다.
$ /opt/elasticbeanstalk/bin/get-config environment
{"JDBC_CONNECTION_STRING":"","RDS_PORT":"3306","RDS_HOSTNAME":"anj9aw1b0tbj6b.cijbpanmxz5u.us-west-2.rds.amazonaws.com","RDS_USERNAME":"testusername","RDS_DB_NAME":"ebdb","RDS_PASSWORD":"testpassword1923851"}
예를 들어 Elastic Beanstalk는 통합 Amazon RDS DB 인스턴스에 연결하기 위한 환경 속성(예: RDS_HOSTNAME
)을 제공합니다. 이러한 RDS 연결 속성은 get-config environment
의 출력에 나타납니다. 그러나 해당 속성은 get-config optionsettings
의 출력에 표시되지 않습니다. 이는 해당 속성들이 구성 옵션에서 설정되지 않았기 때문입니다.
특정 환경 속성을 반환하려면 --key
(-k
) 옵션을 사용하여 속성 키를 지정합니다.
$ /opt/elasticbeanstalk/bin/get-config environment -k TESTPROPERTY
testvalue
get-config container
명령은 환경 인스턴스에 대한 플랫폼 및 환경 구성 값을 나열하는 객체를 반환합니다.
다음 예는 Amazon Linux 2 Tomcat 환경에서 이 명령에 대한 출력을 보여줍니다.
$ /opt/elasticbeanstalk/bin/get-config container
{"common_log_list":["/var/log/eb-engine.log","/var/log/eb-hooks.log"],"default_log_list":["/var/log/nginx/access.log","/var/log/nginx/error.log"],"environment_name":"myenv-1da84946","instance_port":"80","log_group_name_prefix":"/aws/elasticbeanstalk","proxy_server":"nginx","static_files":[""],"xray_enabled":"false"}
특정 키의 값을 반환하려면 --key
(-k
) 옵션을 사용하여 키를 지정합니다.
$ /opt/elasticbeanstalk/bin/get-config container -k environment_name
myenv-1da84946
get-config addons
명령은 환경 추가 기능의 구성 정보가 포함된 객체를 반환합니다. 이 명령을 사용하여 환경에 연결된 Amazon RDS 데이터베이스의 구성을 검색합니다.
$ /opt/elasticbeanstalk/bin/get-config addons
{"rds":{"Description":"RDS Environment variables","env":{"RDS_DB_NAME":"ebdb","RDS_HOSTNAME":"ea13k2wimu1dh8i.c18mnpu5rwvg.us-east-2.rds.amazonaws.com","RDS_PASSWORD":"password","RDS_PORT":"3306","RDS_USERNAME":"user"}}}
두 가지 방법으로 결과를 제한할 수 있습니다. 특정 추가 기능에 대한 값을 검색하려면 --add-on
(-a
) 옵션을 사용하여 추가 기능 이름을 지정합니다.
$ /opt/elasticbeanstalk/bin/get-config addons -a rds
{"Description":"RDS Environment variables","env":{"RDS_DB_NAME":"ebdb","RDS_HOSTNAME":"ea13k2wimu1dh8i.c18mnpu5rwvg.us-east-2.rds.amazonaws.com","RDS_PASSWORD":"password","RDS_PORT":"3306","RDS_USERNAME":"user"}}
추가 기능 내의 특정 키 값을 반환하려면 --key
(-k
) 옵션을 추가하여 키를 지정합니다.
$ /opt/elasticbeanstalk/bin/get-config addons -a rds
-k RDS_DB_NAME
ebdb
get-config platformconfig
명령은 플랫폼 버전별로 동일한 플랫폼 구성 정보가 포함된 객체를 반환합니다. 출력은 동일한 플랫폼 버전을 실행하는 모든 환경에서 동일합니다. 이 명령에 대한 출력 객체에는 다음과 같은 두 임베디드 객체가 있습니다.
-
GeneralConfig
- 모든 Amazon Linux 2 및 Amazon Linux 2023 플랫폼 브랜치의 최신 버전에서 동일한 정보를 포함합니다. -
PlatformSpecificConfig
- 특정 플랫폼 버전에 해당하는 동일한 정보를 포함합니다.
다음 예에서는 Corretto 11을 실행하는 Tomcat 8.5 플랫폼 브랜치를 사용하는 환경의 명령에 대한 출력을 보여줍니다.
$ /opt/elasticbeanstalk/bin/get-config platformconfig
{"GeneralConfig":{"AppUser":"webapp","AppDeployDir":"/var/app/current/","AppStagingDir":"/var/app/staging/","ProxyServer":"nginx","DefaultInstancePort":"80"},"PlatformSpecificConfig":{"ApplicationPort":"8080","JavaVersion":"11","TomcatVersion":"8.5"}}
특정 키의 값을 반환하려면 --key
(-k
) 옵션을 사용하여 키를 지정합니다. 이러한 키는 두 임베디드 객체에서 고유합니다. 키가 포함된 객체는 지정할 필요가 없습니다.
$ /opt/elasticbeanstalk/bin/get-config platformconfig -k AppStagingDir
/var/app/staging/
get-config output 옵션
--output
옵션을 사용하여 출력 객체 형식을 지정합니다. 유효한 값은 JSON
(기본값) 및 YAML
입니다. 이는 전역 옵션입니다. 명령 이름 앞에 지정해야 합니다.
다음 예에서는 YAML 형식의 구성 옵션 값을 반환합니다.
$ /opt/elasticbeanstalk/bin/get-config --output YAML optionsettings
aws:elasticbeanstalk:application:environment:
JDBC_CONNECTION_STRING: ""
aws:elasticbeanstalk:container:tomcat:jvmoptions:
JVM Options: ""
Xms: 256m
Xmx: 256m
aws:elasticbeanstalk:environment:proxy:
ProxyServer: nginx
StaticFiles:
- ""
aws:elasticbeanstalk:healthreporting:system:
SystemType: enhanced
aws:elasticbeanstalk:hostmanager:
LogPublicationControl: "false"
pkg-repo
참고
이pkg-repo
도구는 Amazon 리눅스 2023 플랫폼 기반 환경에서는 사용할 수 없습니다. 하지만 패키지 및 운영 체제 업데이트를 AL2023 인스턴스에 수동으로 적용할 수 있습니다. 자세한 내용은 Amazon Linux 2023 사용 설명서의 패키지 및 운영 체제 업데이트 관리를 참조하십시오
몇몇 긴급한 상황에서는 필수 Elastic Beanstalk 플랫폼 버전과 함께 아직 릴리스되지 않은 Amazon Linux 2 보안 패치를 사용하여 Amazon EC2 인스턴스를 업데이트해야 할 수 있습니다. 기본적으로 Elastic Beanstalk 환경에서 수동 업데이트를 수행할 수 없습니다. 이는 플랫폼 버전이 Amazon Linux 2 리포지토리의 특정 버전으로 잠겨 있기 때문입니다. 이 잠금은 인스턴스가 지원 대상에 해당하고 일관된 소프트웨어 버전을 실행하도록 합니다. 긴급한 경우 pkg-repo
도구를 사용하면 yum 패키지를 새로운 Elastic Beanstalk 플랫폼 버전에 릴리스되기 전에 환경에 설치해야 하는 경우 Amazon Linux 2에서 yum 패키지를 수동으로 업데이트할 수 있는 해결책을 활용할 수 있습니다.
Amazon Linux 2 플랫폼의 pkg-repo
도구는 yum
패키지 리포지토리를 잠금 해제하는 기능을 제공합니다. 그런 다음 보안 패치에 대한 yum update를 수동으로 수행할 수 있습니다. 반대로 추가 업데이트를 방지하기 위해 도구를 사용하여 yum 패키지 리포지토리를 잠가 업데이트를 따를 수 있습니다. 이 pkg-repo
도구는 Elastic Beanstalk 환경에 있는 모든 EC2 인스턴스의 /opt/elasticbeanstalk/bin/pkg-repo
디렉터리에서 사용할 수 있습니다.
pkg-repo
도구를 사용한 변경은 도구가 사용되는 EC2 인스턴스에서만 이루어집니다. 해당 변경은 다른 인스턴스에 영향을 주거나 환경에 대한 향후 업데이트를 방지하지 않습니다. 이 주제의 뒷부분에서 제공되는 예제에서는 스크립트 및 구성 파일에서 pkg-repo
명령을 호출하여 변경 사항을 모든 인스턴스에 적용하는 방법을 설명합니다.
주의
대부분의 사용자에게는 이 도구를 권장하지 않습니다. 잠금 해제된 플랫폼 버전에 적용된 수동 변경은 모두 대역 외로 간주됩니다. 이 옵션은 다음과 같은 위험을 감수할 수 있는 긴급한 상황에 있는 사용자만 이용할 수 있습니다.
-
패키지 버전은 환경의 모든 인스턴스에서 일관성을 보장할 수 없습니다.
-
pkg-repo
도구를 사용하여 수정된 환경은 정상적인 작동이 보장되지 않습니다. 해당 환경은 Elastic Beanstalk가 지원하는 플랫폼에서 테스트 및 확인되지 않았습니다.
테스트 및 취소 계획을 포함하는 모범 사례를 적용하는 것을 권장합니다. 모범 사례가 원활히 적용될 수 있도록, Elastic Beanstalk 콘솔 및 EB CLI를 사용하여 환경을 복제하고 환경 URL을 바꿀 수 있습니다. 이러한 작업 사용에 대한 자세한 내용은, 이 가이드에 포함된 환경 관리 장의 블루/그린 배포를 참조하세요.
yum 리포지토리 구성 파일을 수동으로 편집하려는 경우 우선 pkg-repo
도구를 실행하십시오. pkg-repo
도구는 yum 리포지토리 구성 파일을 수동으로 편집한 Amazon Linux 2 환경에서 의도한 대로 작동하지 않을 수 있습니다. 이는 해당 도구가 구성 변경을 인식하지 못할 수 있기 때문입니다.
Amazon Linux 패키지 리포지토리에 대한 자세한 내용은 Amazon EC2 사용 설명서의 패키지 리포지토리 주제를 참조하세요.
pkg-repo 명령
다음 구문을 사용하여 pkg-repo
도구 명령을 실행합니다.
$ /opt/elasticbeanstalk/bin/pkg-repo command
[options
]
다음은 pkg-repo
명령입니다.
-
lock –
yum
패키지 리포지토리를 특정 버전으로 잠급니다. -
unlock –
yum
패키지 리포지토리를 특정 버전에서 잠금 해제합니다. -
status –
yum
패키지 리포지토리 및 현재 잠금 상태를 모두 나열합니다. -
help – 일반적인 도움말 또는 하나의 명령에 대한 도움말을 표시합니다.
옵션은 다음과 같이 명령에 적용됩니다.
-
lock
,unlock
및status
– 옵션:-h
,--help
또는 없음(기본값) -
help
– 옵션:lock
,unlock
,status
, 또는 없음(기본값)
다음 예제에서는 unlock 명령을 실행합니다.
$ sudo /opt/elasticbeanstalk/bin/pkg-repo unlock
Amazon Linux 2 core package repo successfully unlocked
Amazon Linux 2 extras package repo successfully unlocked
다음 예제에서는 lock 명령을 실행합니다.
$ sudo /opt/elasticbeanstalk/bin/pkg-repo lock
Amazon Linux 2 core package repo successfully locked
Amazon Linux 2 extras package repo successfully locked
다음 예제에서는 status 명령을 실행합니다.
$ sudo /opt/elasticbeanstalk/bin/pkg-repo status
Amazon Linux 2 core package repo is currently UNLOCKED
Amazon Linux 2 extras package repo is currently UNLOCKED
다음 예제에서는 lock 명령에 대한 help 명령을 실행합니다.
$ sudo /opt/elasticbeanstalk/bin/pkg-repo help lock
다음 예제에서는 pkg-repo
도구에 대한 help 명령을 실행합니다.
$ sudo /opt/elasticbeanstalk/bin/pkg-repo help
SSH를 사용해 Elastic Beanstalk 환경의 인스턴스에 연결하여 pkg-repo
를 테스트할 수 있습니다. SSH 옵션 중 하나는 EB CLI eb ssh 명령입니다.
참고
이 pkg-repo
도구를 실행하려면 루트 사용자 권한이 필요합니다. 액세스 권한 오류가 발생하면 sudo
로 명령을 다시 실행합니다.
환경에 배포하는 스크립트 또는 구성 파일에서 이 도구를 사용할 때는 sudo
를 추가할 필요가 없습니다. Elastic Beanstalk가 모든 스크립트를 루트 사용자로 실행합니다.
pkg-repo 예제
이전 섹션은 Elastic Beanstalk 환경의 개별 EC2 인스턴스에서 테스트하기 위한 명령줄 예제를 제공합니다. 이러한 접근 방식은 테스트에 도움이 될 수 있습니다. 그러나 이 방식은 한 번에 하나의 인스턴스만 업데이트하므로 환경의 모든 인스턴스에 변경 사항을 적용하는 경우에는 실용적이지 않습니다.
보다 실용적인 접근 방식은 플랫폼 후크 스크립트 또는 .ebextensions 구성 파일을 사용하여 모든 인스턴스에 일관된 방식으로 변경 사항을 적용하는 것입니다.
다음 예제는 .ebextensions 폴더의 구성 파일에서 pkg-repo
를 호출합니다. Elastic Beanstalk는 애플리케이션 소스 번들을 배포할 때 update_package.config
파일의 명령을 실행합니다.
.ebextensions
└── update_package.config
최신 버전의 도커 패키지를 수신하기 위해 이 구성은 yum update 명령에 도커 패키지를 지정합니다.
### update_package.config ### commands: update_package: command: | /opt/elasticbeanstalk/bin/pkg-repo unlock yum update docker -y /opt/elasticbeanstalk/bin/pkg-repo lock yum clean all -y rm -rf /var/cache/yum
이 구성은 yum update 명령에 어떤 패키지도 지정하지 않습니다. 사용 가능한 모든 업데이트가 결과로 적용됩니다.
### update_package.config ### commands: update_package: command: | /opt/elasticbeanstalk/bin/pkg-repo unlock yum update -y /opt/elasticbeanstalk/bin/pkg-repo lock yum clean all -y rm -rf /var/cache/yum
다음 예제는 bash 스크립트에서 플랫폼 후크로 pkg-repo
를 호출합니다. Elastic Beanstalk는 prebuild
하위 디렉터리에 있는 update_package.sh
스크립트 파일을 실행합니다.
.platform
└── hooks
└── prebuild
└── update_package.sh
최신 버전의 도커 패키지를 수신하기 위해 이 스크립트는 yum update 명령에 도커 패키지를 지정합니다. 패키지 이름을 생략하면 사용 가능한 업데이트가 모두 적용됩니다. 이전 구성 파일 예제는 이에 대해 설명합니다.
### update_package.sh ### #!/bin/bash /opt/elasticbeanstalk/bin/pkg-repo unlock yum update docker -y /opt/elasticbeanstalk/bin/pkg-repo lock yum clean all -y rm -rf /var/cache/yum
download-source-bundle(Amazon Linux AMI에만 해당)
Amazon Linux AMI 플랫폼 브랜치(이전 Amazon Linux 2)에서 Elastic Beanstalk는 추가 도구인 download-source-bundle
을 제공합니다. 이 도구를 사용하여 플랫폼 배포 시 애플리케이션 소스 코드를 다운로드합니다. 이 도구는 /opt/elasticbeanstalk/bin/download-source-bundle
에 있습니다.
환경 인스턴스의 appdeploy/pre
폴더에 예제 스크립트 00-unzip.sh
가 있습니다. 이는 배포 시 download-source-bundle
을 사용하여 애플리케이션 소스 코드를 /opt/elasticbeanstalk/deploy/appsource
폴더에 다운로드하는 방법을 보여줍니다.