기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
Linux 서버에서 소프트웨어 사용자 지정
이 섹션에서는 Linux를 실행하는 EC2 인스턴스에서 소프트웨어를 사용자 지정하기 위해 구성 파일에 포함할 수 있는 정보의 유형을 설명합니다. Elastic Beanstalk 환경을 사용자 지정하고 구성하는 것에 대한 일반적인 정보는 Elastic Beanstalk 환경 구성 단원을 참조하세요. Windows를 실행하는 EC2 인스턴스에서 소프트웨어를 사용자 지정하는 방법에 대한 자세한 내용은 섹션을 참조하세요Windows 서버에서 소프트웨어 사용자 지정.
애플리케이션이 사용하는 소프트웨어를 사용자 지정하고 구성하고자 할 수 있습니다. 인스턴스 프로비저닝 중에 실행할 명령을 추가하고, Linux 사용자 및 그룹을 정의하고, 환경 인스턴스에서 파일을 다운로드하거나 직접 생성할 수 있습니다. 이러한 파일은 애플리케이션에 필요한 종속 항목(예: yum 리포지토리의 추가 패키지)이거나 구성 파일(예: Elastic Beanstalk에서 기본값으로 설정된 특정 설정을 재정의하는 프록시 구성 파일의 대체)일 수 있습니다.
참고
-
Amazon Linux 2 플랫폼에서는 .ebextensions 구성 파일에 파일과 명령을 제공하는 대신 Buildfile을 사용하는 것이 좋습니다. 가능하면 Procfile 및 플랫폼 후크를 사용하여 인스턴스 프로비저닝 중에 환경 인스턴스에서 사용자 지정 코드를 구성 및 실행합니다. 이러한 메커니즘에 대한 자세한 내용은 Elastic Beanstalk Linux 플랫폼 확장 단원을 참조하십시오.
-
YAML 는 일관된 들여쓰기에 의존합니다. 예제 구성 파일의 콘텐츠를 바꿀 때 들여쓰기 레벨을 일치시키고, 텍스트 편집기가 탭 문자 대신 공백을 사용해 들여쓰기를 하도록 합니다.
구성 파일은 애플리케이션이 실행되는 Linux 서버에 영향을 주는 다음 키를 지원합니다.
키는 여기에 나열된 순서대로 처리됩니다.
구성 파일을 개발하고 테스트하는 동안 환경의 이벤트를 주시합니다. Elastic Beanstalk는 잘못된 키 등 확인 오류가 포함된 구성 파일을 무시하며, 동일한 파일에서 다른 모든 키를 처리하지 않습니다. 이런 일이 일어날 경우, Elastic Beanstalk는 이벤트 로그에 경고 이벤트를 추가합니다.
패키지
packages
키를 사용하여 사전 패키지된 애플리케이션 및 구성 요소를 다운로드하고 설치할 수 있습니다.
구문
packages:
name of package manager
:
package name
: version
...
name of package manager
:
package name
: version
...
...
각 패키지 관리자의 키 아래에 여러 패키지를 지정할 수 있습니다.
지원되는 패키지 형식
Elastic Beanstalk는 현재 yum, rubygems, python 및 rpm 등의 패키지 관리자를 지원합니다. 패키지는 rpm, yum, rubygems 및 python의 순서대로 처리됩니다. rubygems와 python 간에는 순서가 없습니다. 각 패키지 관리자에서 패키지 설치 순서는 보장되지 않습니다. 운영 체제에서 지원하는 패키지 관리자를 사용하십시오.
참고
Elastic Beanstalk는 Python, pip 및 easy_install에 대한 기본 패키지 관리자 두 가지를 지원합니다. 그러나 구성 파일의 구문에서 패키지 관리자의 이름을 python
으로 지정해야 합니다. 구성 파일을 사용하여 Python 패키지 관리자를 지정할 때, Elastic Beanstalk는 Python 2.7을 사용합니다. 애플리케이션이 다양한 버전의 Python을 사용하는 경우, requirements.txt
파일에 설치할 패키지를 지정할 수 있습니다. 자세한 내용은 Elastic Beanstalk의 요구 사항 파일을 사용하여 종속성 지정하기 단원을 참조하십시오.
버전 지정
각 패키지 관리자 내에서 각 패키지는 패키지 이름과 버전 목록으로 지정됩니다. 버전은 문자열, 버전 목록 또는 빈 문자열이나 목록일 수 있습니다. 빈 문자열이나 목록은 최신 버전 사용을 나타냅니다. rpm 관리자의 경우 버전은 디스크 또는 의 파일에 대한 경로로 지정됩니다URL. 상대 경로는 지원되지 않습니다.
패키지 버전을 지정하는 경우 Elastic Beanstalk는 패키지의 새 버전이 인스턴스에 이미 설치되었더라도 해당 버전을 설치하려고 합니다. 최신 버전이 이미 설치된 경우, 배포에 실패합니다. 일부 패키지 관리자는 여러 버전을 지원하지만 다른 패키지 관리자는 지원하지 않을 수도 있습니다. 자세한 내용은 패키지 관리자 설명서를 확인하십시오. 버전을 지정하지 않았으며 패키지 버전이 이미 설치된 경우, Elastic Beanstalk는 새 버전을 설치할 수 없으며 사용자가 기존 버전을 유지하고 사용하고자 한다고 가정합니다.
예제 코드 조각
다음 조각은 rpmURL용 버전을 지정하고, yum에서 최신 버전을 요청하고, rubygems에서 쉐프 버전 0.10.2를 요청합니다.
packages:
yum:
libmemcached: []
ruby-devel: []
gcc: []
rpm:
epel: http://download.fedoraproject.org/pub/epel/5/i386/epel-release-5-4.noarch.rpm
rubygems:
chef: '0.10.2'
그룹
groups
키를 사용하여 Linux/UNIX 그룹을 생성하고 그룹 를 할당할 수 있습니다IDs. 그룹을 생성하려면 새 그룹 이름을 그룹 ID(선택 사항)로 매핑하는 새 키-값 페어를 추가합니다. groups 키에는 하나 이상의 그룹 이름이 포함될 수 있습니다. 다음 표에는 가용 키가 나열되어 있습니다.
구문
groups:
name of group
: {}
name of group
:
gid: "group id
"
옵션
gid
-
그룹 ID 번호입니다.
그룹 ID를 지정했으며 그룹 이름이 이미 존재하는 경우 그룹이 생성되지 않습니다. 다른 그룹에 해당 그룹 ID를 지정한 경우 운영 체제에서 그룹 생성을 거부할 수도 있습니다.
예제 코드 조각
다음 코드 조각은 그룹 ID를 할당 groupOne 하지 않고 라는 그룹과 45의 그룹 ID 값을 groupTwo 지정한 라는 그룹을 지정합니다.
groups:
groupOne: {}
groupTwo:
gid: "45
"
사용자
users
키를 사용하여 EC2 인스턴스에서 Linux/UNIX 사용자를 생성할 수 있습니다.
구문
users:
name of user
:
groups:
- name of group
uid: "id of the user
"
homeDir: "user's home directory
"
옵션
uid
-
사용자 ID. 다른 사용자 ID의 사용자 이름이 존재하는 경우 생성 프로세스가 실패합니다. 해당 사용자 ID가 기존 사용자에게 이미 할당된 경우 운영 체제에서 생성 요청을 거부할 수 있습니다.
groups
-
그룹 이름 목록. 사용자는 목록의 각 그룹에 추가됩니다.
homeDir
-
사용자의 홈 디렉터리.
사용자는 /sbin/nologin
셸을 사용하여 비 대화식 시스템 사용자로 생성됩니다. 이러한 생성은 설계에 따른 것이므로 수정할 수 없습니다.
예제 코드 조각
users:
myuser:
groups:
- group1
- group2
uid: "50
"
homeDir: "/tmp
"
소스
sources
키를 사용하여 퍼블릭에서 아카이브 파일을 다운로드URL하고 EC2 인스턴스의 대상 디렉터리에서 압축을 풀 수 있습니다.
구문
sources:
target directory
: location of archive file
지원되는 형식
지원되는 형식은 tar, tar+gzip, tar+bz2 및 zip입니다. URL 에 공개적으로 액세스할 수 있는 한 Amazon Simple Storage Service(Amazon S3)(예: https://mybucket.s3.amazonaws.com/myobject
)와 같은 외부 위치를 참조할 수 있습니다.
예제 코드 조각
다음 예제에서는 Amazon S3 버킷에서 퍼블릭 .zip 파일을 다운로드하여 /etc/myapp
에 압축을 풉니다.
sources:
/etc/myapp: https://mybucket.s3.amazonaws.com/myobject
참고
여러 추출에서 동일한 대상 경로를 사용하면 안 됩니다. 다른 소스를 동일한 대상 경로로 추출하면 내용에 추가되는 대신 내용을 교체합니다.
파일
files
키를 사용하여 EC2 인스턴스에 파일을 생성할 수 있습니다. 콘텐츠는 구성 파일에서 인라인이거나 에서 가져올 수 있습니다URL. 파일은 사전 순서로 디스크에 작성됩니다.
files
키로 권한 부여를 위한 인스턴스 프로파일을 제공하여 Amazon S3에서 프라이빗 파일을 다운로드합니다.
지정한 파일 경로가 인스턴스에 이미 있는 경우, 기존 파일은 해당 이름에 추가되는 확장명(.bak
)과 함께 유지됩니다.
구문
files:
"target file location on disk
":
mode: "six-digit octal value
"
owner: name of owning user for file
group: name of owning group for file
source: URL
authentication: authentication name
:
"target file location on disk
":
mode: "six-digit octal value
"
owner: name of owning user for file
group: name of owning group for file
content: |
# this is my
# file content
encoding: encoding format
authentication: authentication name
:
옵션
content
-
파일에 추가할 문자열 콘텐츠.
content
또는source
중 하나를 지정하며 둘 다 지정하지 않습니다. source
-
URL 다운로드할 파일의 입니다.
content
또는source
중 하나를 지정하며 둘 다 지정하지 않습니다. encoding
-
content
옵션으로 지정된 문자열의 인코딩 형식.유효한 값:
plain
|base64
group
-
파일을 소유한 Linux 그룹.
owner
-
파일을 소유한 Linux 사용자.
mode
-
이 파일의 모드를 나타내는 6자리 8진수 값입니다. Windows 시스템에는 지원되지 않습니다. symlink에는 처음 세 자리를 사용하고 설정 권한에는 마지막 세 자리를 사용합니다. symlink를 만들려면
120
를 지정합니다. 이때xxx
xxx
는 대상 파일의 권한을 정의합니다. 파일의 권한을 지정하려면 마지막 세 자리를 사용합니다(예:000644
). authentication
-
사용할 AWS CloudFormation 인증 방법의 이름입니다. 리소스 키로 자동 크기 조정 그룹 메타데이터에 인증 방법을 추가할 수 있습니다. 아래 예제를 참조하십시오.
예제 코드 조각
files:
"/home/ec2-user/myfile" :
mode: "000755"
owner: root
group: root
source: http://foo.bar/myfile
"/home/ec2-user/myfile2" :
mode: "000755"
owner: root
group: root
content: |
this is my
file content
symlink를 사용하는 예제. 기존 파일 /tmp/myfile2.txt
를 가리키는 링크 /tmp/myfile1.txt
를 생성합니다.
files:
"/tmp/myfile2.txt" :
mode: "120400"
content: "/tmp/myfile1.txt"
다음 예제에서는 리소스 키를 사용하여 S3Auth라는 인증 방법을 추가하고, 이를 사용하여 Amazon S3 버킷에서 프라이빗 파일을 다운로드합니다.
Resources:
AWSEBAutoScalingGroup:
Metadata:
AWS::CloudFormation::Authentication:
S3Auth
:
type: "s3"
buckets: ["elasticbeanstalk-us-west-2-123456789012
"]
roleName:
"Fn::GetOptionSetting":
Namespace: "aws:autoscaling:launchconfiguration"
OptionName: "IamInstanceProfile"
DefaultValue: "aws-elasticbeanstalk-ec2-role"
files:
"/tmp/data.json
" :
mode: "000755"
owner: root
group: root
authentication: "S3Auth
"
source: https://elasticbeanstalk-us-west-2-123456789012.s3-us-west-2.amazonaws.com/data.json
명령
commands
키를 사용하여 EC2 인스턴스에서 명령을 실행할 수 있습니다. 명령은 애플리케이션 및 웹 서버가 설정되고 애플리케이션 버전 파일이 추출되기 전에 실행됩니다.
지정한 명령은 루트 사용자로 실행되며, 이름의 영문자 순서대로 처리됩니다. 기본적으로 명령은 루트 디렉터리에서 실행됩니다. 다른 디렉터리에서 명령을 실행하려면 cwd
옵션을 사용합니다.
명령 관련 문제를 해결하려면 인스턴스 로그의 출력을 확인합니다.
구문
commands:
command name
:
command: command to run
cwd: working directory
env:
variable name
: variable value
test: conditions for command
ignoreErrors: true
옵션
command
-
실행할 명령을 지정하는 배열( YAML 구문의 블록 시퀀스 컬렉션
) 또는 문자열입니다. 중요 정보: -
문자열을 사용하는 경우, 전체 문자열을 따옴표로 묶을 필요가 없습니다. 따옴표를 사용하는 경우, 동일한 유형의 따옴표의 리터럴(literal) 발생을 이스케이프합니다.
-
어레이를 사용하는 경우 특수 문자를 이스케이프하거나 명령 파라미터를 따옴표로 묶을 필요가 없습니다. 각 어레이 요소는 단일 명령 인수입니다. 다중 명령 지정에 어레이를 사용하지 않습니다.
다음에 예가 나와 있습니다.
commands: command1: command: git commit -m "This is a comment." command2: command: "git commit -m \"This is a comment.\"" command3: command: 'git commit -m "This is a comment."' command4: command: - git - commit - -m - This is a comment.
여러 명령을 지정하려면 다음 예와 같이 리터럴 블록 스칼라
를 사용합니다. commands: command block: command: | git commit -m "This is a comment." git push
-
env
-
(선택 사항) 명령에 대한 환경 변수를 설정합니다. 이 속성은 기존 환경을 추가하는 것이 아니라 덮어씁니다.
cwd
-
(선택 사항) 작업 디렉터리입니다. 지정하지 않으면 명령은 루트 디렉터리(/)에서 실행됩니다.
test
-
(선택 사항)
command
키에 포함된 셸 스크립트 등 Elastic Beanstalk에서 명령을 처리하려면 반드시true
값(종료 코드 0)을 반환해야 하는 명령입니다. ignoreErrors
-
(선택 사항)
command
키에 포함된 명령이 실패할 경우 다른 명령이 실행되는지 여부를 결정하는 부울 값(0이 아닌 값 반환). 명령이 실패하더라도 명령을 계속 실행하려면 이 값을true
로 설정합니다. 명령이 실패할 경우 실행 중인 명령을 중지하려면false
로 설정합니다. 기본값은false
입니다.
예제 코드 조각
다음 예의 코드 조각은 Python 스크립트를 실행합니다.
commands:
python_install:
command: myscript.py
cwd: /home/ec2-user
env:
myvarname: myvarvalue
test: "[ -x /usr/bin/python ]"
서비스
services
키를 사용하여 인스턴스가 시작될 때 시작하거나 중지할 서비스를 정의할 수 있습니다. services
키를 사용하면 소스, 패키지 및 파일에 대한 종속 항목을 지정할 수 있으므로 설치하려는 파일로 인해 재시작해야 하는 경우 Elastic Beanstalk가 서비스 재시작을 처리합니다.
구문
services:
sysvinit:
name of service
:
enabled: "true"
ensureRunning: "true"
files:
- "file name
"
sources:
- "directory
"
packages:
name of package manager
:
"package name
[: version
]"
commands:
- "name of command
"
옵션
ensureRunning
-
Elastic Beanstalk에서 작업을 완료한 후에도 서비스를 실행 중인 상태로 유지하려면
true
로 설정합니다.Elastic Beanstalk에서 작업을 완료한 후에 서비스를 실행 중이지 않은 상태로 유지하려면
false
로 설정합니다.서비스 상태를 변경하지 않으려면 이 키를 생략합니다.
enabled
-
서비스가 부팅 시 자동으로 시작되도록 하려면
true
로 설정합니다.서비스가 부팅 시 자동으로 시작되지 않도록 하려면
false
로 설정합니다.이 속성을 변경하지 않으려면 이 키를 생략합니다.
files
-
파일 목록입니다. Elastic Beanstalk에서 파일 블록을 통해 직접 변경할 경우 서비스가 다시 시작됩니다.
sources
-
디렉터리 목록입니다. Elastic Beanstalk가 이러한 디렉터리 중 하나로 아카이브의 압축을 푸는 경우 서비스가 다시 시작됩니다.
packages
-
패키지 관리자와 패키지 이름 목록 간 맵입니다. Elastic Beanstalk가 이러한 패키지 중 하나를 설치하거나 업데이트하는 경우 서비스가 다시 시작됩니다.
commands
-
명령 이름 목록입니다. Elastic Beanstalk에서 지정된 명령을 실행할 경우 서비스가 다시 시작됩니다.
예제 코드 조각
다음은 예제 코드 조각입니다.
services:
sysvinit:
myservice:
enabled: true
ensureRunning: true
컨테이너 명령
container_commands
키를 사용하여 애플리케이션 소스 코드에 영향을 주는 명령을 실행할 수 있습니다. 컨테이너 명령은 애플리케이션과 웹 서버를 설정하고 애플리케이션 버전 아카이브의 압축을 푼 후 애플리케이션 버전을 배포하기 이전에 실행됩니다. 비컨테이너 명령과 기타 사용자 지정 작업은 추출하려는 애플리케이션 소스 코드보다 먼저 수행됩니다.
지정한 명령은 루트 사용자로 실행되며, 이름의 영문자 순서대로 처리됩니다. 컨테이너 명령은 준비 디렉터리에서 실행됩니다. 준비 디렉터리는 소스 코드를 애플리케이션 서버에 배포하기 이전에 추출하는 곳입니다. 컨테이너 명령을 사용하여 준비 디렉터리에서 소스 코드를 변경한 경우 변경 사항은 코스를 최종 위치에 배포할 때 포함됩니다.
참고
컨테이너 명령의 출력은 cfn-init-cmd.log
인스턴스 로그에 기록됩니다. 인스턴스 로그 검색 및 보기에 대한 자세한 내용은 Amazon EC2 인스턴스에서 로그 보기를 참조하세요.
테스트 명령이 leader_only
로 평가될 때 test
를 구성하거나, true
를 사용하여 단일 인스턴스에서 명령을 실행하기만 하면 됩니다. Leader-only 컨테이너 명령은 환경을 생성하고 배포하는 중에만 실행되고, 다른 명령 및 서버 사용자 지정 작업은 인스턴스를 프로비저닝하거나 업데이트할 때마다 수행됩니다. 리더 전용 컨테이너 명령은 AMI ID 또는 인스턴스 유형의 변경과 같은 시작 구성 변경으로 인해 실행되지 않습니다.
구문
container_commands:
name of container_command
:
command: "command to run
"
leader_only: true
name of container_command
:
command: "command to run
"
옵션
command
-
실행할 문자열 또는 문자열 배열입니다.
env
-
(선택 사항) 명령을 실행하기 이전에 기존 값을 재정의하여 환경 변수를 설정합니다.
cwd
-
(선택 사항) 작업 디렉터리입니다. 기본적으로 압축 해제된 애플리케이션의 준비 디렉터리입니다.
leader_only
-
(선택 사항) Elastic Beanstalk에서 선택한 단일 인스턴스에 대해서만 명령을 실행합니다. Leader-only 컨테이너 명령은 다른 컨테이너 명령보다 먼저 실행됩니다. 명령은 leader-only이거나
test
를 포함할 수 있으나, 둘 다 사용할 수 없습니다(leader_only
가 우선 적용됨). test
-
(선택 사항) 컨테이너 명령을 실행하려면
true
를 반환해야 하는 테스트 명령을 실행합니다. 명령은 leader-only이거나test
를 포함할 수 있으나, 둘 다 사용할 수 없습니다(leader_only
가 우선 적용됨). ignoreErrors
-
(선택 사항) 컨테이너 명령이 0이 아닌 값을 반환하는 경우(성공) 배포에 실패하지 않습니다. 활성화하려면
true
로 설정합니다.
예제 코드 조각
다음은 예제 코드 조각입니다.
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
99customize:
command: "scripts/customize.sh"