

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# 구성 파일(`.ebextensions`)을 사용하여 고급 환경 사용자 지정
<a name="ebextensions"></a>

웹 애플리케이션의 소스 코드에 AWS Elastic Beanstalk 구성 파일(`.ebextensions`)을 추가하여 환경을 구성하고 환경에 포함된 AWS 리소스를 사용자 지정할 수 있습니다. 구성 파일은 `.config` 파일 확장명을 사용하는 YAML이나 JSON 형식 문서로, `.ebextensions` 폴더에 놓고 애플리케이션 [소스 번들](applications-sourcebundle.md)에서 배포합니다.

**Example .ebextensions/network-load-balancer.config**  
이 예에서는 간단한 구성을 변경합니다. 해당 환경의 로드 밸런서 유형을 Network Load Balancer로 설정하기 위해 구성 옵션을 수정합니다.  

```
option_settings:
  aws:elasticbeanstalk:environment:
    LoadBalancerType: network
```

구성 파일에 JSON보다 더 쉽게 읽을 수 있는 YAML을 사용하는 것이 좋습니다. YAML은 설명과 복수 명령줄, 따옴표를 사용할 수 있는 몇몇 대안 등을 지원합니다. 하지만 YAML이나 JSON을 사용해 동일한 방식으로 Elastic Beanstalk 구성 파일의 구성을 변경할 수 있습니다.

**도움말**  
새 구성 파일을 개발하거나 테스트할 때 기본 애플리케이션을 실행하는 정리된 환경을 시작하고 여기에 배포합니다. 구성 파일의 형식을 잘못 지정하면 새 환경 시작이 복구 불가능하게 실패할 수 있습니다.

구성 파일의 `option_settings` 섹션은 [구성 옵션](command-options.md)의 값을 정의합니다. 구성 옵션을 사용하면 Elastic Beanstalk 환경, 환경의 AWS 리소스 및 애플리케이션을 실행하는 소프트웨어를 구성할 수 있습니다. 구성 파일은 구성 옵션을 설정하는 여러 방법 중 하나일 뿐입니다.

이 [`Resources` 섹션에서는](environment-resources.md) 애플리케이션 환경의 리소스를 추가로 사용자 지정하고 구성 옵션에서 제공하는 기능 이외의 추가 AWS 리소스를 정의할 수 있습니다. Elastic Beanstalk AWS CloudFormation가 환경을 생성하는 데 사용하는에서 지원하는 모든 리소스를 추가하고 구성할 수 있습니다.

구성 파일의 다른 섹션(`packages`, `sources`, `files`, `users`, `groups`, `commands`, `container_commands`, `services`)에서는 환경에서 시작하는 EC2 인스턴스를 구성할 수 있습니다. 서버가 환경에서 시작될 때마다 Elastic Beanstalk는 이러한 섹션에 정의된 작업을 실행하여 애플리케이션의 운영 체제와 스토리지 시스템을 준비합니다.

일반적으로 사용되는 .ebextensions의 예제에 대해서는 [Elastic Beanstalk 구성 파일 리포지토리](https://github.com/awsdocs/elastic-beanstalk-samples/tree/master/configuration-files)를 참조하세요.

**요구 사항**
+ **위치** - Elastic Beanstalk는 배포에 있는 모든 `.ebextensions` 폴더를 처리합니다. 그러나 모든 구성 파일을 소스 번들 루트의 `.ebextensions`라는 단일 폴더에 저장합니다. 점으로 시작하는 폴더는 파일 브라우저에서 숨길 수 있으므로 소스 번들을 생성할 때 해당 폴더가 추가되는지 확인합니다. 자세한 내용은 [Elastic Beanstalk 애플리케이션 소스 번들 생성](applications-sourcebundle.md) 단원을 참조하십시오.
+ **이름 지정** - 구성 파일의 파일 확장명은 `.config`여야 합니다.
+ **형식 지정** - 구성 파일은 YAML이나 JSON의 사양을 준수해야 합니다.

  YAML을 사용하는 경우 항상 Space를 사용해 각기 다른 중첩 수준에서 키를 들여쓰기 합니다. YAML에 대한 자세한 내용은 [YAML Ain't Markup Language(YAML™) Version 1.1](http://yaml.org/spec/current.html)을 참조하십시오.
+ **고유성** - 각 구성 파일에 각 키를 한 번만 사용합니다.
**경고**  
동일한 구성 파일에 키(예: `option_settings`)를 두 번 사용하면 섹션 중 하나가 삭제됩니다. 중복 섹션을 단일 섹션으로 결합하거나 별도의 구성 파일에 배치하십시오.

배포 프로세스는 환경을 관리하는 데 사용하는 클라이언트에 따라 조금씩 다릅니다. 세부 정보는 다음 섹션을 참조하세요.
+ [Elastic Beanstalk 콘솔](environment-configuration-methods-during.md#configuration-options-during-console-ebextensions)
+ [EB CLI](environment-configuration-methods-during.md#configuration-options-during-ebcli-ebextensions)
+ [AWS CLI](environment-configuration-methods-during.md#configuration-options-during-awscli-ebextensions)

**Topics**
+ [

# 옵션 설정
](ebextensions-optionsettings.md)
+ [

# Linux 서버에서 소프트웨어 사용자 지정
](customize-containers-ec2.md)
+ [

# Windows 서버에서 소프트웨어 사용자 지정
](customize-containers-windows-ec2.md)
+ [

# Elastic Beanstalk 환경 리소스 추가 및 사용자 지정
](environment-resources.md)

# 옵션 설정
<a name="ebextensions-optionsettings"></a>

`option_settings` 키를 사용하여 Elastic Beanstalk 구성을 수정하고 환경 변수를 사용하여 애플리케이션에서 검색할 수 있는 변수를 정의할 수 있습니다. 일부 네임스페이스를 사용하여 파라미터 수를 늘리고, 파라미터 이름을 지정할 수 있습니다. 네임스페이스 및 구성 옵션 목록은 [구성 옵션](command-options.md)를 참조하십시오.

환경을 생성하거나 환경을 업데이트하는 동안 옵션 설정을 환경에 직접 적용할 수도 있습니다. 환경에 직접 적용된 설정은 구성 파일의 동일한 옵션에 대한 설정을 재정의합니다. 환경의 구성에서 설정을 제거하면 구성 파일의 설정이 적용됩니다. 세부 정보는 [우선 순위](command-options.md#configuration-options-precedence) 섹션을 참조하세요.

## 구문
<a name="ebextensions-optionsettings-syntax"></a>

옵션 설정의 표준 구문은 객체 배열로, 각각 `namespace`, `option_name`, `value` 키를 갖고 있습니다.

```
option_settings:
  - namespace:  namespace
    option_name:  option name
    value:  option value
  - namespace:  namespace
    option_name:  option name
    value:  option value
```

`namespace` 키는 선택 사항입니다. 네임스페이스를 지정하지 않으면 사용되는 기본값은 `aws:elasticbeanstalk:application:environment`입니다.

```
option_settings:
  - option_name:  option name
    value:  option value
  - option_name:  option name
    value:  option value
```

또한 Elastic Beanstalk는 네임스페이스 아래의 키-값 페어로 옵션을 지정할 수 있는 옵션 설정의 간편 구문도 지원합니다.

```
option_settings:
  namespace:
    option name: option value
    option name: option value
```

## 예제
<a name="ebextensions-optionsettings-snippet"></a>

다음 예제에서는 `aws:elasticbeanstalk:container:tomcat:jvmoptions` 네임스페이스 및 `MYPARAMETER`라는 환경 속성에서 Tomcat 플랫폼별 옵션을 설정합니다.

표준 YAML 형식은 다음과 같습니다.

**Example .ebextensions/options.config**  

```
option_settings:
  - namespace:  aws:elasticbeanstalk:container:tomcat:jvmoptions
    option_name:  Xmx
    value:  256m
  - option_name: MYPARAMETER
    value: parametervalue
```

간편 형식은 다음과 같습니다.

**Example .ebextensions/options.config**  

```
option_settings:
  aws:elasticbeanstalk:container:tomcat:jvmoptions:
    Xmx: 256m
  aws:elasticbeanstalk:application:environment:
    MYPARAMETER: parametervalue
```

JSON은 다음과 같습니다.

**Example .ebextensions/options.config**  

```
{
  "option_settings": [
    {
      "namespace": "aws:elasticbeanstalk:container:tomcat:jvmoptions",
      "option_name": "Xmx",
      "value": "256m"
    },
    {
      "option_name": "MYPARAMETER",
      "value": "parametervalue"
    }
  ]
}
```

# Linux 서버에서 소프트웨어 사용자 지정
<a name="customize-containers-ec2"></a>

이 단원에서는 Linux를 실행하는 EC2 인스턴스에서 소프트웨어를 사용자 지정하는 구성 파일을 포함하는 정보 유형을 설명합니다. Elastic Beanstalk 환경을 사용자 지정하고 구성하는 것에 대한 일반적인 정보는 [Elastic Beanstalk 환경 구성](customize-containers.md) 단원을 참조하세요. Windows를 실행하는 EC2 인스턴스에서 소프트웨어를 사용자 지정하는 것에 대한 내용은 [Windows 서버에서 소프트웨어 사용자 지정](customize-containers-windows-ec2.md) 단원을 참조하십시오.

애플리케이션이 사용하는 소프트웨어를 사용자 지정하고 구성하고자 할 수 있습니다. 인스턴스 프로비저닝 중에 실행할 명령을 추가하고, Linux 사용자 및 그룹을 정의하고, 환경 인스턴스에서 파일을 다운로드하거나 직접 생성할 수 있습니다. 이러한 파일은 애플리케이션에 필요한 종속 항목(예: yum 리포지토리의 추가 패키지)이거나 구성 파일(예: Elastic Beanstalk에서 기본값으로 설정된 특정 설정을 재정의하는 프록시 구성 파일의 대체)일 수 있습니다.

**참고**  
Amazon Linux 2 플랫폼에서는 .ebextensions 구성 파일에 파일과 명령을 제공하는 대신 *Buildfile*을 사용하는 것이 좋습니다. 가능하면 *Procfile* 및 *플랫폼 후크*를 사용하여 인스턴스 프로비저닝 중에 환경 인스턴스에서 사용자 지정 코드를 구성 및 실행합니다. 이러한 메커니즘에 대한 자세한 내용은 [Elastic Beanstalk Linux 플랫폼 확장](platforms-linux-extend.md) 단원을 참조하십시오.
YAML은 일정한 들여쓰기를 사용합니다. 예제 구성 파일의 콘텐츠를 바꿀 때 들여쓰기 레벨을 일치시키고, 텍스트 편집기가 탭 문자 대신 공백을 사용해 들여쓰기를 하도록 합니다.

구성 파일은 애플리케이션이 실행되는 Linux 서버에 영향을 주는 다음 키를 지원합니다.

**Topics**
+ [

## Packages
](#linux-packages)
+ [

## 그룹
](#linux-groups)
+ [

## Users
](#linux-users)
+ [

## 소스
](#linux-sources)
+ [

## 파일
](#linux-files)
+ [

## 명령
](#linux-commands)
+ [

## 서비스
](#linux-services)
+ [

## 컨테이너 명령
](#linux-container-commands)
+ [

# 예: 사용자 지정 Amazon CloudWatch 지표 사용
](customize-containers-cw.md)

키는 여기에 나열된 순서대로 처리됩니다.

구성 파일을 개발하고 테스트하는 동안 환경의 [이벤트](using-features.events.md)를 주시합니다. Elastic Beanstalk는 잘못된 키 등 확인 오류가 포함된 구성 파일을 무시하며, 동일한 파일에서 다른 모든 키를 처리하지 않습니다. 이런 일이 일어날 경우, Elastic Beanstalk는 이벤트 로그에 경고 이벤트를 추가합니다.

## Packages
<a name="linux-packages"></a>

`packages` 키를 사용하여 사전 패키지된 애플리케이션 및 구성 요소를 다운로드하고 설치할 수 있습니다.

### 구문
<a name="linux-packages-syntax"></a>

```
packages: 
  name of package manager:
    package name: version
    ...
  name of package manager:
    package name: version
    ...
  ...
```

각 패키지 관리자의 키 아래에 여러 패키지를 지정할 수 있습니다.

### 지원되는 패키지 형식
<a name="linux-packages-support"></a>

Elastic Beanstalk는 현재 yum, rubygems, python 및 rpm 등의 패키지 관리자를 지원합니다. 패키지는 rpm, yum, rubygems 및 python의 순서대로 처리됩니다. rubygems와 python 간에는 순서가 없습니다. 각 패키지 관리자에서 패키지 설치 순서는 보장되지 않습니다. 운영 체제에서 지원하는 패키지 관리자를 사용하십시오.

**참고**  
Elastic Beanstalk는 Python, pip 및 easy\$1install에 대한 기본 패키지 관리자 두 가지를 지원합니다. 그러나 구성 파일의 구문에서 패키지 관리자의 이름을 `python`으로 지정해야 합니다. 구성 파일을 사용하여 Python 패키지 관리자를 지정할 때, Elastic Beanstalk는 Python 2.7을 사용합니다. 애플리케이션이 다양한 버전의 Python을 사용하는 경우, `requirements.txt` 파일에 설치할 패키지를 지정할 수 있습니다. 자세한 내용은 [Elastic Beanstalk에서 요구 서헝 파일을 사용하여 종속성 지정](python-configuration-requirements.md) 단원을 참조하십시오.

### 버전 지정
<a name="linux-packages-versions"></a>

각 패키지 관리자 내에서 각 패키지는 패키지 이름과 버전 목록으로 지정됩니다. 버전은 문자열, 버전 목록 또는 빈 문자열이나 목록일 수 있습니다. 빈 문자열이나 목록은 최신 버전 사용을 나타냅니다. rpm 관리자에서 버전은 디스크의 파일 경로 또는 URL로 지정됩니다. 상대 경로는 지원되지 않습니다.

패키지 버전을 지정하는 경우 Elastic Beanstalk는 패키지의 새 버전이 인스턴스에 이미 설치되었더라도 해당 버전을 설치하려고 합니다. 최신 버전이 이미 설치된 경우, 배포에 실패합니다. 일부 패키지 관리자는 여러 버전을 지원하지만 다른 패키지 관리자는 지원하지 않을 수도 있습니다. 자세한 내용은 패키지 관리자 설명서를 확인하십시오. 버전을 지정하지 않았으며 패키지 버전이 이미 설치된 경우, Elastic Beanstalk는 새 버전을 설치할 수 없으며 사용자가 기존 버전을 유지하고 사용하고자 한다고 가정합니다.

### 예제 코드 조각
<a name="linux-packages-snippet"></a>

다음 코드 조각은 rpm용 버전 URL을 지정하고, yum의 최신 버전과 rubygems의 chef 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'
```

## 그룹
<a name="linux-groups"></a>

`groups` 키를 사용하여 Linux/UNIX 그룹을 생성하고 그룹 ID를 할당할 수 있습니다. 그룹을 생성하려면 새 그룹 이름을 그룹 ID(선택 사항)로 매핑하는 새 키-값 페어를 추가합니다. groups 키에는 하나 이상의 그룹 이름이 포함될 수 있습니다. 다음 표에는 가용 키가 나열되어 있습니다.

### 구문
<a name="linux-groups-syntax"></a>

```
groups:
  name of group: {}
  name of group:
    gid: "group id"
```

### 옵션
<a name="linux-groups-options"></a>

`gid`  
그룹 ID 번호입니다.  
그룹 ID를 지정했으며 그룹 이름이 이미 존재하는 경우 그룹이 생성되지 않습니다. 다른 그룹에 해당 그룹 ID를 지정한 경우 운영 체제에서 그룹 생성을 거부할 수도 있습니다.

### 예제 코드 조각
<a name="linux-groups-snippet"></a>

다음 코드 조각은 그룹 ID를 할당하지 않은 groupOne이라는 그룹과 그룹 ID 값을 45로 지정한 groupTwo라는 그룹을 지정합니다.

```
groups:
  groupOne: {}
  groupTwo:
    gid: "45"
```

## Users
<a name="linux-users"></a>

`users` 키를 사용하여 EC2 인스턴스에서 Linux/UNIX 사용자를 생성할 수 있습니다.

### 구문
<a name="linux-users-syntax"></a>

```
users:
  name of user:
    groups:
      - name of group
    uid: "id of the user"
    homeDir: "user's home directory"
```

### 옵션
<a name="linux-users-options"></a>

`uid`  
사용자 ID. 다른 사용자 ID의 사용자 이름이 존재하는 경우 생성 프로세스가 실패합니다. 해당 사용자 ID가 기존 사용자에게 이미 할당된 경우 운영 체제에서 생성 요청을 거부할 수 있습니다.

`groups`  
그룹 이름 목록. 사용자는 목록의 각 그룹에 추가됩니다.

`homeDir`  
사용자의 홈 디렉터리.

사용자는 `/sbin/nologin` 셸을 사용하여 비 대화식 시스템 사용자로 생성됩니다. 이러한 생성은 설계에 따른 것이므로 수정할 수 없습니다.

### 예제 코드 조각
<a name="linux-users-snippet"></a>

```
users:
  myuser:
    groups:
      - group1
      - group2
    uid: "50"
    homeDir: "/tmp"
```

## 소스
<a name="linux-sources"></a>

`sources` 키를 사용하여 퍼블릭 URL에서 아카이브 파일을 다운로드한 후 EC2 인스턴스의 대상 디렉터리에 압축을 풉니다.

### 구문
<a name="linux-sources-syntax"></a>

```
sources:
  target directory: location of archive file
```

### 지원되는 형식
<a name="linux-sources-support"></a>

지원되는 형식은 tar, tar\$1gzip, tar\$1bz2 및 zip입니다. URL에 공개적으로 액세스할 수 있는 한, Amazon Simple Storage Service(Amazon S3)(예: `https://amzn-s3-demo-bucket.s3.amazonaws.com/myobject`) 등의 외부 위치를 참조할 수 있습니다.

### 예제 코드 조각
<a name="linux-sources-example"></a>

다음 예제에서는 Amazon S3 버킷에서 퍼블릭 .zip 파일을 다운로드하여 `/etc/myapp`에 압축을 풉니다.

```
sources:  
  /etc/myapp: https://amzn-s3-demo-bucket.s3.amazonaws.com/myobject
```

**참고**  
여러 추출에서 동일한 대상 경로를 사용하면 안 됩니다. 다른 소스를 동일한 대상 경로로 추출하면 내용에 추가되는 대신 내용을 교체합니다.

## 파일
<a name="linux-files"></a>

`files` 키를 사용하여 EC2 인스턴스에서 파일을 생성할 수 있습니다. 콘텐츠는 구성 파일의 인라인이거나 URL에서 내용을 가져올 수 있습니다. 파일은 사전 순서로 디스크에 작성됩니다.

`files` 키로 권한 부여를 위한 인스턴스 프로파일을 제공하여 Amazon S3에서 프라이빗 파일을 다운로드합니다.

지정한 파일 경로가 인스턴스에 이미 있는 경우, 기존 파일은 해당 이름에 추가되는 확장명(`.bak`)과 함께 유지됩니다.

### 구문
<a name="linux-files-syntax"></a>

```
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:
```

### 옵션
<a name="linux-files-options"></a>

`content`  
파일에 추가할 문자열 콘텐츠. `content` 또는 `source` 중 하나를 지정하며 둘 다 지정하지 않습니다.

`source`  
다운로드할 파일의 URL. `content` 또는 `source` 중 하나를 지정하며 둘 다 지정하지 않습니다.

`encoding`  
`content` 옵션으로 지정된 문자열의 인코딩 형식.  
유효한 값: `plain` \$1 `base64`

`group`  
파일을 소유한 Linux 그룹.

`owner`  
파일을 소유한 Linux 사용자.

`mode`  
이 파일의 모드를 나타내는 6자리 8진수 값입니다. Windows 시스템에는 지원되지 않습니다. symlink에는 처음 세 자리를 사용하고 설정 권한에는 마지막 세 자리를 사용합니다. symlink를 만들려면 `120xxx`를 지정합니다. 이때 `xxx`는 대상 파일의 권한을 정의합니다. 파일의 권한을 지정하려면 마지막 세 자리를 사용합니다(예: `000644`).

`authentication`  
사용할 [CloudFormation 인증 방법](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-authentication.html)의 이름입니다. 리소스 키로 자동 크기 조정 그룹 메타데이터에 인증 방법을 추가할 수 있습니다. 아래 예제를 참조하십시오.

### 예제 코드 조각
<a name="linux-files-snippet"></a>

```
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: ["amzn-s3-demo-bucket2"]
          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
```

## 명령
<a name="linux-commands"></a>

`commands` 키를 사용하여 EC2 인스턴스에서 명령을 실행할 수 있습니다. 명령은 애플리케이션 및 웹 서버가 설정되고 애플리케이션 버전 파일이 추출되기 전에 실행됩니다.

지정한 명령은 루트 사용자로 실행되며, 이름의 영문자 순서대로 처리됩니다. 기본적으로 명령은 루트 디렉터리에서 실행됩니다. 다른 디렉터리에서 명령을 실행하려면 `cwd` 옵션을 사용합니다.

명령 관련 문제를 해결하려면 [인스턴스 로그](using-features.logging.md)의 출력을 확인합니다.

### 구문
<a name="linux-commands-syntax"></a>

```
commands:
  command name: 
    command: command to run
    cwd: working directory
    env: 
      variable name: variable value
    test: conditions for command 
    ignoreErrors: true
```

### 옵션
<a name="linux-commands-options"></a>

`command`  
실행할 명령을 지정하는 어레이(YAML구문의 [ 블록 시퀀스 모음](http://yaml.org/spec/1.2/spec.html#id2759963)) 또는 문자열. 중요 정보:  
+ 문자열을 사용하는 경우, 전체 문자열을 따옴표로 묶을 필요가 없습니다. 따옴표를 사용하는 경우, 동일한 유형의 따옴표의 리터럴(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.
```
여러 명령을 지정하려면 다음 예와 같이 [리터럴 블록 스칼라](http://yaml.org/spec/1.2/spec.html#id2760844)를 사용합니다.  

```
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`입니다.

### 예제 코드 조각
<a name="linux-commands-snippet"></a>

다음 예의 코드 조각은 Python 스크립트를 실행합니다.

```
commands:
  python_install:
    command: myscript.py
    cwd: /home/ec2-user
    env:
      myvarname: myvarvalue
    test: "[ -x /usr/bin/python ]"
```

## 서비스
<a name="linux-services"></a>

`services` 키를 사용하여 인스턴스가 시작될 때 시작하거나 중지할 서비스를 정의할 수 있습니다. `services` 키를 사용하면 소스, 패키지 및 파일에 대한 종속 항목을 지정할 수 있으므로 설치하려는 파일로 인해 재시작해야 하는 경우 Elastic Beanstalk가 서비스 재시작을 처리합니다.

### 구문
<a name="linux-services-syntax"></a>

```
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"
```

### 옵션
<a name="linux-services-options"></a>

`ensureRunning`  
Elastic Beanstalk에서 작업을 완료한 후에도 서비스를 실행 중인 상태로 유지하려면 `true`로 설정합니다.  
Elastic Beanstalk에서 작업을 완료한 후에 서비스를 실행 중이지 않은 상태로 유지하려면 `false`로 설정합니다.  
서비스 상태를 변경하지 않으려면 이 키를 생략합니다.

`enabled`  
서비스가 부팅 시 자동으로 시작되도록 하려면 `true`로 설정합니다.  
서비스가 부팅 시 자동으로 시작되지 않도록 하려면 `false`로 설정합니다.  
이 속성을 변경하지 않으려면 이 키를 생략합니다.

`files`  
파일 목록입니다. Elastic Beanstalk에서 파일 블록을 통해 직접 변경할 경우 서비스가 다시 시작됩니다.

`sources`  
디렉터리 목록입니다. Elastic Beanstalk가 이러한 디렉터리 중 하나로 아카이브의 압축을 푸는 경우 서비스가 다시 시작됩니다.

`packages`  
패키지 관리자와 패키지 이름 목록 간 맵입니다. Elastic Beanstalk가 이러한 패키지 중 하나를 설치하거나 업데이트하는 경우 서비스가 다시 시작됩니다.

`commands`  
명령 이름 목록입니다. Elastic Beanstalk에서 지정된 명령을 실행할 경우 서비스가 다시 시작됩니다.

### 예제 코드 조각
<a name="linux-services-snippet"></a>

다음은 예제 코드 조각입니다.

```
services: 
  sysvinit:
    myservice:
      enabled: true
      ensureRunning: true
```

## 컨테이너 명령
<a name="linux-container-commands"></a>

`container_commands` 키를 사용하여 애플리케이션 소스 코드에 영향을 주는 명령을 실행할 수 있습니다. 컨테이너 명령은 애플리케이션과 웹 서버를 설정하고 애플리케이션 버전 아카이브의 압축을 푼 후 애플리케이션 버전을 배포하기 이전에 실행됩니다. 비컨테이너 명령과 기타 사용자 지정 작업은 추출하려는 애플리케이션 소스 코드보다 먼저 수행됩니다.

지정한 명령은 루트 사용자로 실행되며, 이름의 영문자 순서대로 처리됩니다. 컨테이너 명령은 준비 디렉터리에서 실행됩니다. 준비 디렉터리는 소스 코드를 애플리케이션 서버에 배포하기 이전에 추출하는 곳입니다. 컨테이너 명령을 사용하여 준비 디렉터리에서 소스 코드를 변경한 경우 변경 사항은 코스를 최종 위치에 배포할 때 포함됩니다.

**참고**  
컨테이너 명령의 출력은 `cfn-init-cmd.log` 인스턴스 로그에 기록됩니다. 인스턴스 로그 검색 및 보기에 대한 자세한 내용은 [Amazon EC2 인스턴스에서 로그 보기](using-features.logging.md)를 참조하세요.

테스트 명령이 `leader_only`로 평가될 때 `test`를 구성하거나, `true`를 사용하여 단일 인스턴스에서 명령을 실행하기만 하면 됩니다. Leader-only 컨테이너 명령은 환경을 생성하고 배포하는 중에만 실행되고, 다른 명령 및 서버 사용자 지정 작업은 인스턴스를 프로비저닝하거나 업데이트할 때마다 수행됩니다. Leader-only 컨테이너 명령은 시작 구성을 변경(예: AMI ID 또는 인스턴스 유형 변경)하더라도 실행되지 않습니다.

### 구문
<a name="linux-container-commands-syntax"></a>

```
container_commands:
  name of container_command:
    command: "command to run"
    leader_only: true
  name of container_command:
    command: "command to run"
```

### 옵션
<a name="linux-container-commands-options"></a>

`command`  
실행할 문자열 또는 문자열 배열입니다.

`env`  
(선택 사항) 명령을 실행하기 이전에 기존 값을 재정의하여 환경 변수를 설정합니다.

`cwd`  
(선택 사항) 작업 디렉터리입니다. 기본적으로 압축 해제된 애플리케이션의 준비 디렉터리입니다.

`leader_only`  
(선택 사항) Elastic Beanstalk에서 선택한 단일 인스턴스에 대해서만 명령을 실행합니다. Leader-only 컨테이너 명령은 다른 컨테이너 명령보다 먼저 실행됩니다. 명령은 leader-only이거나 `test`를 포함할 수 있으나, 둘 다 사용할 수 없습니다(`leader_only`가 우선 적용됨).

`test`  
(선택 사항) 컨테이너 명령을 실행하려면 `true`를 반환해야 하는 테스트 명령을 실행합니다. 명령은 leader-only이거나 `test`를 포함할 수 있으나, 둘 다 사용할 수 없습니다(`leader_only`가 우선 적용됨).

`ignoreErrors`  
(선택 사항) 컨테이너 명령이 0이 아닌 값을 반환하는 경우(성공) 배포에 실패하지 않습니다. 활성화하려면 `true`로 설정합니다.

### 예제 코드 조각
<a name="linux-container-commands-snippet"></a>

다음은 예제 코드 조각입니다.

```
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"
```

# 예: 사용자 지정 Amazon CloudWatch 지표 사용
<a name="customize-containers-cw"></a>

이 주제에서는 Amazon Linux 2 이상을 기반으로 하는 플랫폼의 Elastic Beanstalk 지표를 Amazon CloudWatch 에이전트와 통합하는 구성 예제를 제공합니다. 구성 예제는 `.ebextensions` 구성 파일의 파일과 명령을 사용합니다.

Amazon CloudWatch는 측정치의 데이터를 기반으로 경보 작업을 구성하고 다양한 측정치를 모니터링, 관리, 게시할 수 있게 해 주는 웹 서비스입니다. 자체 용도로 사용자 지정 측정치를 정의할 수 있으며, Elastic Beanstalk에서 그러한 측정치를 Amazon CloudWatch에 푸시합니다. Amazon CloudWatch에 사용자 지정 측정치가 포함되어 있으면 Amazon CloudWatch 콘솔에서 이를 볼 수 있습니다.

**Amazon CloudWatch 에이전트**  
Amazon CloudWatch 에이전트를 사용하면 운영 체제 전체에서 Amazon EC2 인스턴스 및 온프레미스 서버에서 CloudWatch 지표 및 로그 수집을 수행할 수 있습니다. 에이전트는 시스템 수준에서 수집된 지표를 지원합니다. 또한, 애플리케이션 또는 서비스에서 사용자 지정 로그 및 지표 수집을 지원합니다. Amazon CloudWatch 에이전트에 대한 자세한 내용은 *Amazon CloudWatch 사용 설명서*의 [CloudWatch 에이전트를 사용하여 지표 및 로그 수집](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/Install-CloudWatch-Agent.html)을 참조하세요.

**참고**  
Elastic Beanstalk [확장 상태 보고](health-enhanced.md)는 다양한 인스턴스 및 환경 측정치를 CloudWatch에 게시하는 기본 지원을 제공합니다. 세부 정보는 [환경에 대한 Amazon CloudWatch 사용자 지정 측정치 게시](health-enhanced-cloudwatch.md) 섹션을 참조하세요.

**Topics**
+ [

## .Ebextensions 구성 파일
](#customize-containers-cw-update-roles)
+ [

## 권한
](#customize-containers-cw-policy)
+ [

## CloudWatch 콘솔에서 지표 보기
](#customize-containers-cw-console)

## .Ebextensions 구성 파일
<a name="customize-containers-cw-update-roles"></a>

이 예제에서는 .ebextensions 구성 파일의 파일 및 명령을 사용하여 Amazon Linux 2 플랫폼에서 Amazon CloudWatch 에이전트를 구성 및 실행합니다. 에이전트는 Amazon Linux 2에 사전 패키징됩니다. 다른 운영 체제를 사용하는 경우 에이전트를 설치하기 위한 추가 단계가 필요할 수 있습니다. 자세한 내용은 *Amazon CloudWatch 사용 설명서*의 [CloudWatch 에이전트 설치](https://docs.aws.amazon.com//AmazonCloudWatch/latest/monitoring/install-CloudWatch-Agent-on-EC2-Instance.html)를 참조하세요.

이 샘플을 사용하려면 프로젝트 디렉터리의 최상위에 있는 `.ebextensions`라는 디렉터리의 `cloudwatch.config`라는 파일에 이를 저장한 후, Elastic Beanstalk 콘솔([소스 번들](applications-sourcebundle.md)의 .ebextensions 디렉터리 포함) 또는 [EB CLI](eb-cli3.md)를 사용하여 애플리케이션을 배포합니다.

구성 파일에 대한 자세한 내용은 [구성 파일(`.ebextensions`)을 사용하여 고급 환경 사용자 지정](ebextensions.md) 섹션을 참조하세요.

이 파일에는 다음 두 개의 단원이 있습니다.
+ `files` — 이 단원은 에이전트 구성 파일을 추가합니다. 에이전트가 Amazon CloudWatch로 전송해야 하는 지표 및 로그를 나타냅니다. 이 예제에서는 *mem\$1used\$1percent* 지표만을 전송합니다. Amazon CloudWatch 에이전트가 지원하는 시스템 수준 지표의 전체 목록은 *Amazon CloudWatch 사용 설명서*의 [CloudWatch 에이전트가 수집하는 지표](https://docs.aws.amazon.com//AmazonCloudWatch/latest/monitoring/metrics-collected-by-CloudWatch-agent.html)를 참조하세요.
+ `container_commands` — 이 단원에는 구성 파일을 매개 변수로 전달하는 에이전트를 시작하는 명령이 포함되어 있습니다. `container_commands`에 대한 자세한 내용은 [컨테이너 명령](customize-containers-ec2.md#linux-container-commands) 단원을 참조하세요.

**.ebextensions/cloudwatch.config**

```
files:  
  "/opt/aws/amazon-cloudwatch-agent/bin/config.json": 
    mode: "000600"
    owner: root
    group: root
    content: |
      {
        "agent": {
          "metrics_collection_interval": 60,
          "run_as_user": "root"
        },
        "metrics": {
          "namespace": "System/Linux",
          "append_dimensions": {
            "AutoScalingGroupName": "${aws:AutoScalingGroupName}"
          },
          "metrics_collected": {
            "mem": {
              "measurement": [
                "mem_used_percent"
              ]
            }
          }
        }
      }  
container_commands:
  start_cloudwatch_agent: 
    command: /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -a append-config -m ec2 -s -c file:/opt/aws/amazon-cloudwatch-agent/bin/config.json
```

## 권한
<a name="customize-containers-cw-policy"></a>

Amazon CloudWatch 에이전트를 사용하여 사용자 지정 Amazon CloudWatch 측정치를 게시하려면 환경의 인스턴스에는 적절한 IAM 권한이 필요합니다. 환경의 인스턴스에 권한을 부여하려면 환경의 [인스턴스 프로파일](concepts-roles-instance.md)에 이를 추가하면 됩니다. 애플리케이션을 배포하기 전이나 후에 인스턴스 프로파일에 권한을 추가할 수 있습니다.

**CloudWatch 측정치를 게시할 권한을 부여하려면**

1. IAM 콘솔([https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/))을 엽니다.

1. 탐색 창에서 **역할**을 선택합니다.

1. 환경의 인스턴스 프로파일 역할을 선택합니다. 기본적으로 Elastic Beanstalk 콘솔 또는 [EB CLI](eb-cli3.md)를 사용하여 환경을 생성하는 경우 이는 `aws-elasticbeanstalk-ec2-role`입니다.

1. **권한** 탭을 선택합니다.

1. **권한 정책(Permissions Policies)** 아래 **권한(Permissions)** 단원에서 **정책 연결(Attach policies)**을 선택하세요.

1. **권한 연결**에서 AWS 관리형 정책 **CloudWatchAgentServerPolicy**를 선택합니다. 그런 다음 **정책 추가(Attach Policy)**를 클릭합니다.

정책 관리에 대한 자세한 내용은 *IAM 사용 설명서*의 [정책 작업](https://docs.aws.amazon.com/IAM/latest/UserGuide/ManagingPolicies.html)을 참조하세요.

## CloudWatch 콘솔에서 지표 보기
<a name="customize-containers-cw-console"></a>

CloudWatch 구성 파일을 환경에 배포한 후 [Amazon CloudWatch 콘솔](https://console.aws.amazon.com/cloudwatch/home)에서 측정치를 확인할 수 있습니다. 사용자 지정 지표는 **CWAgent** 네임스페이스에 있습니다.

자세한 내용은 *Amazon CloudWatch 사용 설명서*의 [사용 가능한 지표 보기](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/viewing_metrics_with_cloudwatch.html)를 참조하세요.

# Windows 서버에서 소프트웨어 사용자 지정
<a name="customize-containers-windows-ec2"></a>

애플리케이션이 사용하는 소프트웨어를 사용자 지정하고 구성하고자 할 수 있습니다. 이러한 파일은 애플리케이션에 필요한 종속 항목(예: 추가 패키지)이거나 실행할 서비스일 수 있습니다. Elastic Beanstalk 환경을 사용자 지정하고 구성하는 것에 대한 일반적인 정보는 [Elastic Beanstalk 환경 구성](customize-containers.md) 단원을 참조하세요.

**참고**  
YAML은 일정한 들여쓰기를 사용합니다. 예제 구성 파일의 콘텐츠를 바꿀 때 들여쓰기 레벨을 일치시키고, 텍스트 편집기가 탭 문자 대신 공백을 사용해 들여쓰기를 하도록 합니다.

구성 파일은 애플리케이션이 실행되는 Windows 서버에 영향을 주는 다음 키를 지원합니다.

**Topics**
+ [

## Packages
](#windows-packages)
+ [

## 소스
](#windows-sources)
+ [

## 파일
](#windows-files)
+ [

## 명령
](#windows-commands)
+ [

## 서비스
](#windows-services)
+ [

## 컨테이너 명령
](#windows-container-commands)

키는 여기에 나열된 순서대로 처리됩니다.

**참고**  
이전(버전 관리 미사용) .NET 플랫폼 버전에서는 구성 파일을 올바른 순서로 처리하지 않습니다. 자세히 알아보려면 [Elastic Beanstalk Windows Server 플랫폼의 메이저 버전 간 마이그레이션](dotnet-v2migration.md)을 참조하세요.

구성 파일을 개발하고 테스트하는 동안 환경의 [이벤트](using-features.events.md)를 주시합니다. Elastic Beanstalk는 잘못된 키 등 확인 오류가 포함된 구성 파일을 무시하며, 동일한 파일에서 다른 모든 키를 처리하지 않습니다. 이런 일이 일어날 경우, Elastic Beanstalk는 이벤트 로그에 경고 이벤트를 추가합니다.

## Packages
<a name="windows-packages"></a>

`packages` 키를 사용하여 사전 패키지된 애플리케이션 및 구성 요소를 다운로드하고 설치합니다.

Windows 환경에서 Elastic Beanstalk는 MSI 패키지 다운로드와 설치를 지원합니다. (Linux 환경은 패키지 관리자를 추가로 지원합니다. 자세한 내용은 *Linux 서버에서 소프트웨어 사용자 지정* 페이지의 [Packages](customize-containers-ec2.md#linux-packages)을(를) 참조하세요.)

URL에 공개적으로 액세스할 수 있는 한, Amazon Simple Storage Service(Amazon S3) 객체 등의 외부 위치를 참조할 수 있습니다.

여러 `msi:` 패키지를 지정하는 경우 설치 순서는 보장되지 않습니다.

### 구문
<a name="windows-packages-syntax"></a>

원하는 이름을 패키지 이름으로 지정하고, MSI 파일 위치 URL을 값으로 지정합니다. `msi:` 키에 여러 패키지를 지정할 수 있습니다.

```
packages: 
  msi:
    package name: package url
    ...
```

### 예제
<a name="windows-packages-snippet"></a>

다음 예제는 `https://dev.mysql.com/`에서 **mysql**을 다운로드하는 URL을 지정합니다.

```
packages:
  msi:
    mysql: https://dev.mysql.com/get/Downloads/Connector-Net/mysql-connector-net-8.0.11.msi
```

다음 예제는 MSI 파일 위치로 Amazon S3 객체를 지정합니다.

```
packages:
  msi:
    mymsi: https://amzn-s3-demo-bucket.s3.amazonaws.com/myobject.msi
```

## 소스
<a name="windows-sources"></a>

`sources` 키를 사용하여 퍼블릭 URL에서 아카이브 파일을 다운로드한 후 EC2 인스턴스의 대상 디렉터리에 압축을 풉니다.

### 구문
<a name="windows-sources-syntax"></a>

```
sources:  
  target directory: location of archive file
```

### 지원되는 형식
<a name="windows-sources-support"></a>

Windows 환경에서 Elastic Beanstalk는 .zip 형식을 지원합니다. (Linux 환경은 추가 형식을 지원합니다. 자세한 내용은 *Linux 서버에서 소프트웨어 사용자 지정* 페이지의 [소스](customize-containers-ec2.md#linux-sources)을(를) 참조하세요.)

URL에 공개적으로 액세스할 수 있는 한, Amazon Simple Storage Service(Amazon S3) 객체 등의 외부 위치를 참조할 수 있습니다.

### 예제
<a name="windows-sources-example"></a>

다음 예제에서는 Amazon S3에서 퍼블릭 .zip 파일을 다운로드하여 `c:/myproject/myapp`에 압축을 풉니다.

```
sources:  
  "c:/myproject/myapp": https://amzn-s3-demo-bucket.s3.amazonaws.com/myobject.zip
```

## 파일
<a name="windows-files"></a>

`files` 키를 사용하여 EC2 인스턴스에서 파일을 생성합니다. 콘텐츠는 구성 파일에 인라인으로 저장되어 있거나 URL에서 가져올 수 있습니다. 파일은 사전 순서로 디스크에 작성됩니다. Amazon S3에서 프라이빗 파일을 다운로드하려면 권한 부여를 위해 인스턴스 프로파일을 제공합니다.

### 구문
<a name="windows-files-syntax"></a>

```
files:  
  "target file location on disk":
    source: URL
    authentication: authentication name:

  "target file location on disk":
    content: |
      this is my content
    encoding: encoding format
```

### 옵션
<a name="windows-files-options"></a>

`content`  
(선택 사항) 문자열 

`source`  
(선택 사항) 로드할 파일을 가져올 URL입니다. 이 옵션은 content 키와 함께 지정할 수 없습니다.

`encoding`  
(선택 사항) 인코딩 형식입니다. 이 옵션은 제공된 콘텐츠 키 값에만 사용됩니다. 기본값은 `plain`입니다.  
유효한 값: `plain` \$1 `base64`

`authentication`  
(선택 사항) 사용할 [CloudFormation 인증 방법](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-authentication.html)의 이름입니다. 리소스 키로 자동 크기 조정 그룹 메타데이터에 인증 방법을 추가할 수 있습니다.

### 예제
<a name="windows-files-snippet"></a>

다음 예제는 파일 콘텐츠를 제공하는 두 가지 방법인 URL과 구성 파일을 보여 줍니다.

```
files:
  "c:\\targetdirectory\\targetfile.txt":
    source: http://foo.bar/myfile
 
  "c:/targetdirectory/targetfile.txt":
    content: |
      # this is my file
      # with content
```

**참고**  
파일 경로에서 백슬래시(\$1)를 사용할 경우 이전 예제에 표시된 것처럼 다른 백슬래시(이스케이프 문자)를 앞에 입력해야 합니다.

다음 예제에서는 리소스 키를 사용하여 S3Auth라는 인증 방법을 추가하고, 이를 사용하여 Amazon S3에서 프라이빗 파일을 다운로드합니다.

```
files:
  "c:\\targetdirectory\\targetfile.zip":
    source: https://elasticbeanstalk-us-east-2-123456789012.s3.amazonaws.com/prefix/myfile.zip
    authentication: S3Auth

Resources:
  AWSEBAutoScalingGroup:
    Metadata:
      AWS::CloudFormation::Authentication:
        S3Auth:
          type: "s3"
          s: ["amzn-s3-demo-bucket"]
          roleName:
            "Fn::GetOptionSetting":
              Namespace: "aws:autoscaling:launchconfiguration"
              OptionName: "IamInstanceProfile"
              DefaultValue: "aws-elasticbeanstalk-ec2-role"
```

## 명령
<a name="windows-commands"></a>

`commands` 키를 사용하여 EC2 인스턴스에서 명령을 실행합니다. 명령은 이름을 기준으로 사전순으로 처리되며, 애플리케이션 및 웹 서버를 설정하고 애플리케이션 버전 파일을 추출하기 이전에 실행됩니다.

지정된 명령은 관리자 사용자로 실행됩니다.

명령 관련 문제를 해결하려면 [인스턴스 로그](using-features.logging.md)의 출력을 확인합니다.

### 구문
<a name="windows-commands-syntax"></a>

```
commands:
  command name: 
    command: command to run
```

### 옵션
<a name="windows-commands-options"></a>

`command`  
실행할 명령을 지정하는 어레이나 문자열입니다. 어레이를 사용하는 경우 공백 문자를 이스케이프하거나 명령 파라미터를 따옴표로 묶을 필요가 없습니다.

`cwd`  
(선택 사항) 작업 디렉터리입니다. 기본적으로 Elastic Beanstalk에서는 프로젝트의 디렉터리 위치를 찾으려고 합니다. 찾을 수 없는 경우 기본적으로 `c:\Windows\System32`를 사용합니다.

`env`  
(선택 사항) 명령에 대한 환경 변수를 설정합니다. 이 속성은 기존 환경을 추가하는 것이 아니라 덮어씁니다.

`ignoreErrors`  
(선택 사항) `command` 키에 포함된 명령이 실패할 경우 다른 명령이 실행되는지 여부를 결정하는 부울 값(0이 아닌 값 반환). 명령이 실패하더라도 명령을 계속 실행하려면 이 값을 `true`로 설정합니다. 명령이 실패할 경우 실행 중인 명령을 중지하려면 `false`로 설정합니다. 기본값은 `false`입니다.

`test`  
(선택 사항) Elastic Beanstalk에서 `command` 키에 포함된 명령을 처리하기 위해 `true`(종료 코드 0) 값을 반환해야 하는 명령입니다.

`waitAfterCompletion`  
(선택 사항) 명령을 완료한 후 다음 명령을 실행하기 전에 대기하는 시간(초)입니다. 기본값은 **60**초입니다. **forever**도 지정할 수 있습니다.  
배포 중에는 시스템 재부팅이 지원되지 않습니다. 명령의 결과로 시스템이 재부팅되면 인스턴스 초기화가 실패하여 배포가 실패합니다.  
해결 방법으로 이 [https://github.com/awsdocs/elastic-beanstalk-samples/tree/main/configuration-files/aws-provided/instance-configuration/windows-configuration/scheduled-restart.config](https://github.com/awsdocs/elastic-beanstalk-samples/tree/main/configuration-files/aws-provided/instance-configuration/windows-configuration/scheduled-restart.config) 항목을 사용하여 배포가 완료된 후 재부팅을 예약할 수 있습니다.

### 예제
<a name="windows-commands-snippet"></a>

다음 예에서는 `set` 명령의 출력을 지정된 파일에 저장합니다. 후속 명령이 있는 경우 Elastic Beanstalk에서는 이 명령이 완료된 후 즉시 해당 명령을 실행합니다. 이 명령을 실행한 후 재부팅해야 하는 경우 Elastic Beanstalk에서는 명령이 완료된 후 즉시 인스턴스를 재부팅합니다.

```
commands:
  test: 
    command: set > c:\\myapp\\set.txt
    waitAfterCompletion: 0
```

## 서비스
<a name="windows-services"></a>

`services` 키를 사용하여 인스턴스가 시작될 때 시작하거나 중지할 서비스를 정의합니다. 설치하려는 파일로 인해 재시작해야 하는 경우 Elastic Beanstalk에서 서비스 재시작을 처리하도록 `services` 키를 사용하여 소스, 패키지 및 파일에 대한 종속 항목을 지정할 수도 있습니다.

### 구문
<a name="windows-services-syntax"></a>

```
services: 
  windows:
    name of service:
      files:
        - "file name"
      sources: 
        - "directory"	
      packages: 
        name of package manager:
            "package name[: version]"
      commands: 
        - "name of command"
```

### 옵션
<a name="windows-services-options"></a>

`ensureRunning`  
(선택 사항) Elastic Beanstalk에서 작업을 완료한 후에도 서비스를 실행 중인 상태로 유지하려면 `true`로 설정합니다.  
Elastic Beanstalk에서 작업을 완료한 후에 서비스를 실행 중이지 않은 상태로 유지하려면 `false`로 설정합니다.  
서비스 상태를 변경하지 않으려면 이 키를 생략합니다.

`enabled`  
(선택 사항) 서비스가 부팅 시 자동으로 시작되도록 하려면 `true`로 설정합니다.  
서비스가 부팅 시 자동으로 시작되지 않도록 하려면 `false`로 설정합니다.  
이 속성을 변경하지 않으려면 이 키를 생략합니다.

`files`  
파일 목록입니다. Elastic Beanstalk에서 파일 블록을 통해 직접 변경할 경우 서비스가 다시 시작됩니다.

`sources`  
디렉터리 목록입니다. Elastic Beanstalk가 이러한 디렉터리 중 하나로 아카이브의 압축을 푸는 경우 서비스가 다시 시작됩니다.

`packages`  
패키지 관리자와 패키지 이름 목록 간 맵입니다. Elastic Beanstalk가 이러한 패키지 중 하나를 설치하거나 업데이트하는 경우 서비스가 다시 시작됩니다.

`commands`  
명령 이름 목록입니다. Elastic Beanstalk에서 지정된 명령을 실행할 경우 서비스가 다시 시작됩니다.

### 예제
<a name="windows-services-snippet"></a>

```
services: 
  windows:
    myservice:
      enabled: true
      ensureRunning: true
```

## 컨테이너 명령
<a name="windows-container-commands"></a>

`container_commands` 키를 사용하여 애플리케이션 소스 코드에 영향을 주는 명령을 실행합니다. 컨테이너 명령은 애플리케이션과 웹 서버를 설정하고 애플리케이션 버전 아카이브의 압축을 푼 후 애플리케이션 버전을 배포하기 이전에 실행됩니다. 비컨테이너 명령과 기타 사용자 지정 작업은 추출하려는 애플리케이션 소스 코드보다 먼저 수행됩니다.

컨테이너 명령은 준비 디렉터리에서 실행됩니다. 준비 디렉터리는 소스 코드를 애플리케이션 서버에 배포하기 이전에 추출하는 곳입니다. 컨테이너 명령을 사용하여 준비 디렉터리에서 소스 코드를 변경한 경우 변경 사항은 코스를 최종 위치에 배포할 때 포함됩니다.

컨테이너 명령 관련 문제를 해결하려면 [인스턴스 로그](using-features.logging.md)의 출력을 확인합니다.

단일 인스턴스에 대해서만 명령을 실행하려면 `leader_only` 옵션을 사용하고, 테스트 명령이 `test`로 평가되는 경우에만 명령을 실행하려면 `true`를 구성합니다. Leader-only 컨테이너 명령은 환경을 생성하고 배포하는 중에만 실행되고, 다른 명령 및 서버 사용자 지정 작업은 인스턴스를 프로비저닝하거나 업데이트할 때마다 수행됩니다. Leader-only 컨테이너 명령은 시작 구성을 변경(예: AMI ID 또는 인스턴스 유형 변경)하더라도 실행되지 않습니다.

### 구문
<a name="windows-container-commands-syntax"></a>

```
container_commands:
  name of container_command:
    command: command to run
```

### 옵션
<a name="windows-container-commands-options"></a>

`command`  
실행할 문자열 또는 문자열 배열입니다.

`env`  
(선택 사항) 명령을 실행하기 이전에 기존 값을 재정의하여 환경 변수를 설정합니다.

`cwd`  
(선택 사항) 작업 디렉터리입니다. 기본적으로 압축 해제된 애플리케이션의 준비 디렉터리입니다.

`leader_only`  
(선택 사항) Elastic Beanstalk에서 선택한 단일 인스턴스에 대해서만 명령을 실행합니다. Leader-only 컨테이너 명령은 다른 컨테이너 명령보다 먼저 실행됩니다. 명령은 leader-only이거나 `test`를 포함할 수 있으나, 둘 다 사용할 수 없습니다(`leader_only`가 우선 적용됨).

`test`  
(선택 사항) 컨테이너 명령을 실행하려면 `true`를 반환해야 하는 테스트 명령을 실행합니다. 명령은 leader-only이거나 `test`를 포함할 수 있으나, 둘 다 사용할 수 없습니다(`leader_only`가 우선 적용됨).

`ignoreErrors`  
(선택 사항) 컨테이너 명령이 0이 아닌 값을 반환하는 경우(성공) 배포에 실패하지 않습니다. 활성화하려면 `true`로 설정합니다.

`waitAfterCompletion`  
(선택 사항) 명령을 완료한 후 다음 명령을 실행하기 전에 대기하는 시간(초)입니다. 기본값은 **60**초입니다. **forever**도 지정할 수 있습니다.  
배포 중에는 시스템 재부팅이 지원되지 않습니다. 명령의 결과로 시스템이 재부팅되면 인스턴스 초기화가 실패하여 배포가 실패합니다.  
해결 방법으로 이 [https://github.com/awsdocs/elastic-beanstalk-samples/tree/main/configuration-files/aws-provided/instance-configuration/windows-configuration/scheduled-restart.config](https://github.com/awsdocs/elastic-beanstalk-samples/tree/main/configuration-files/aws-provided/instance-configuration/windows-configuration/scheduled-restart.config) 항목을 사용하여 배포가 완료된 후 재부팅을 예약할 수 있습니다.

### 예제
<a name="windows-container-commands-snippet"></a>

다음 예에서는 `set` 명령의 출력을 지정된 파일에 저장합니다. Elastic Beanstalk에서는 한 인스턴스에 대해 명령을 실행하고 명령이 완료되면 즉시 인스턴스를 재부팅합니다.

```
container_commands:
  foo:
    command: set > c:\\myapp\\set.txt
    leader_only: true
    waitAfterCompletion: 0
```

# Elastic Beanstalk 환경 리소스 추가 및 사용자 지정
<a name="environment-resources"></a>

Elastic Beanstalk 환경의 일부인 환경 리소스를 사용자 지정하고자 할 수 있습니다. 예를 들어 Amazon SQS 대기열과 대기열 깊이에 대한 경보를 추가하거나, Amazon ElastiCache 클러스터를 추가하고자 할 수 있습니다. 소스 번들이 있는 구성 파일을 포함시켜 애플리케이션 버전을 배포함과 동시에 환경을 손쉽게 사용자 지정할 수 있습니다.

[구성 파일의](ebextensions.md) `Resources` 키를 사용하여 환경에서 AWS 리소스를 생성하고 사용자 지정할 수 있습니다. 구성 파일에 정의된 리소스는 환경을 시작하는 데 사용되는 CloudFormation 템플릿에 추가됩니다. 모든 CloudFormation [리소스 유형이](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-template-resource-type-ref.html) 지원됩니다.

**참고**  
Elastic Beanstalk에서 관리하지 않는 리소스를 추가할 때마다 AWS Identity and Access Management (IAM) 사용자에게 적절한 권한이 있는 사용자 정책을 추가해야 합니다. Elastic Beanstalk이 제공하는 [관리형 사용자 정책](AWSHowTo.iam.managed-policies.md)은 Elastic Beanstalk 관리 리소스에 대한 권한만 다룹니다.

예를 들어 다음 구성 파일에서는 Elastic Beanstalk에서 생성된 기본 Auto Scaling 그룹에 Auto Scaling 수명 주기 후크를 추가합니다.

**`~/my-app/.ebextensions/as-hook.config`**

```
Resources:
  hookrole:
    Type: AWS::IAM::Role
    Properties:
      AssumeRolePolicyDocument: {
               "Version": "2012-10-17",		 	 	 
               "Statement": [ {
                  "Effect": "Allow",
                  "Principal": {
                     "Service": [ "autoscaling.amazonaws.com" ]
                  },
                  "Action": [ "sts:AssumeRole" ]
               } ]
            }
      Policies: [ {
               "PolicyName": "SNS",
               "PolicyDocument": {
                      "Version": "2012-10-17",		 	 	 
                      "Statement": [{
                          "Effect": "Allow",
                          "Resource": "*",
                          "Action": [
                              "sqs:SendMessage",
                              "sqs:GetQueueUrl",
                              "sns:Publish"
                          ]
                        }
                      ]
                  }
               } ]
  hooktopic:
    Type: AWS::SNS::Topic
    Properties:
      Subscription:
        - Endpoint: "my-email@example.com"
          Protocol: email
  lifecyclehook:
    Type: AWS::AutoScaling::LifecycleHook
    Properties:
      AutoScalingGroupName: { "Ref" : "AWSEBAutoScalingGroup" }
      LifecycleTransition: autoscaling:EC2_INSTANCE_TERMINATING
      NotificationTargetARN: { "Ref" : "hooktopic" }
      RoleARN: { "Fn::GetAtt" : [ "hookrole", "Arn"] }
```

이 예제에서는 `hookrole`, `hooktopic` 및 `lifecyclehook`와 같은 리소스 3개를 정의합니다. 첫 번째 두 리소스는 Amazon SNS에 메시지를 게시하기 위한 Amazon EC2 Auto Scaling 권한을 부여하는 IAM 역할과 Auto Scaling 그룹의 메시지를 이메일 주소로 전달하는 SNS 주제입니다. Elastic Beanstalk에서는 지정된 속성 및 유형을 사용하여 리소스를 생성합니다.

마지막 리소스인 `lifecyclehook`는 수명 주기 후크 자체입니다.

```
  lifecyclehook:
    Type: AWS::AutoScaling::LifecycleHook
    Properties:
      AutoScalingGroupName: { "Ref" : "AWSEBAutoScalingGroup" }
      LifecycleTransition: autoscaling:EC2_INSTANCE_TERMINATING
      NotificationTargetARN: { "Ref" : "hooktopic" }
      RoleARN: { "Fn::GetAtt" : [ "hookrole", "Arn"] }
```

수명 주기 후크 정의는 [함수](ebextensions-functions.md) 두 개를 사용하여 후크의 속성 값을 채웁니다. `{ "Ref" : "AWSEBAutoScalingGroup" }`은 Elastic Beanstalk에서 환경에 대해 생성한 Auto Scaling 그룹의 이름을 가져옵니다. `AWSEBAutoScalingGroup`은 Elastic Beanstalk에서 제공하는 표준 [리소스 이름](customize-containers-format-resources-eb.md) 중 하나입니다.

`[AWS::IAM::Role](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iam-role.html#d0e48356)`의 경우 `Ref`는 ARN이 아니라 역할의 이름을 반환합니다. `RoleARN` 파라미터에 대한 ARN을 가져오려면 리소스의 속성을 가져올 수 있는 `Fn::GetAtt` 대신 다른 내장 함수를 사용합니다. `RoleARN: { "Fn::GetAtt" : [ "hookrole", "Arn"] }`는 `hookrole` 리소스에서 `Arn` 속성을 가져옵니다.

`{ "Ref" : "hooktopic" }`은 구성 파일에서 앞서 생성한 Amazon SNS 주제의 ARN을 가져옵니다. 에서 반환되는 값은 리소스 유형에 따라 `Ref`다르며 AWS::SNS::Topic 리소스 유형에 대한 CloudFormation 사용 설명서 주제에서 찾을 수 있습니다. [ AWS::SNS::Topic ](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sns-topic.html#d0e62250)

# Elastic Beanstalk가 사용자 환경에 생성하는 리소스 수정
<a name="customize-containers-format-resources-eb"></a>

Elastic Beanstalk가 사용자 환경에 생성하는 리소스에는 이름이 있습니다. 이러한 이름을 [함수](ebextensions-functions.md)와 함께 사용해 리소스에 대한 정보를 가져오거나 리소스에 대한 속성을 수정해 리소스의 동작을 사용자 지정할 수 있습니다. 이 주제에서는 Elastic Beanstalk가 다양한 유형의 환경에서 사용하는 AWS 리소스에 대해 설명합니다.

**참고**  
이전 주제인 [사용자 지정 리소스](environment-resources.md)에서는 환경 리소스를 사용자 정의하기 위한 몇 가지 사용 사례와 예시를 제공합니다. 다음 주제인 [사용자 지정 리소스 예제](customize-environment-resources-examples.md)에서는 구성 파일에 대한 추가 예시도 확인할 수 있습니다.

웹 서버 환경에는 다음과 같은 리소스가 있습니다.

**웹 서버 환경**
+ `AWSEBAutoScalingGroup`([AWS::AutoScaling::AutoScalingGroup](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-as-group.html)) - 환경에 연결된 Auto Scaling 그룹입니다.
+ 다음 두 리소스 중 하나입니다.
  + `AWSEBAutoScalingLaunchConfiguration`([AWS::AutoScaling::LaunchConfiguration](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-as-launchconfig.html)) - 환경의 Auto Scaling 그룹에 연결된 시작 구성입니다.
  + `AWSEBEC2LaunchTemplate`([AWS::EC2::LaunchTemplate](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-launchtemplate.html)) - 환경의 Auto Scaling 그룹에서 사용하는 Amazon EC2 시작 템플릿입니다.
**참고**  
해당 환경에서 Amazon EC2 시작 템플릿이 필요한 기능을 사용하는데 사용자 정책에 필요한 권한이 없는 경우 환경을 생성하거나 업데이트하지 못할 수 있습니다. **AdministratorAccess-AWSElasticBeanstalk** [관리형 사용자 정책](AWSHowTo.iam.managed-policies.md)을 사용하거나 [사용자 지정 정책](AWSHowTo.iam.managed-policies.md#AWSHowTo.iam.policies)에 필요한 권한을 추가합니다.
+ `AWSEBEnvironmentName`([AWS::ElasticBeanstalk::Environment](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-beanstalk-environment.html)) - 사용자 환경입니다.
+ `AWSEBSecurityGroup`([AWS::EC2::SecurityGroup](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-security-group.html)) - Auto Scaling 그룹에 연결된 보안 그룹입니다.
+ `AWSEBRDSDatabase`([AWS::RDS::DBInstance](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-rds-database-instance.html)) - 환경에 연결된 Amazon RDS DB 인스턴스입니다(해당하는 경우).

로드 밸런싱 수행 환경에서 로드 밸런서와 관련된 추가 리소스에 액세스할 수 있습니다. Classic load balancer에는 로드 밸런서를 위한 리소스와 로드 밸런서에 연결된 보안 그룹을 위한 리소스가 있습니다. Application Load Balancer 및 Network Load Balancer에는 로드 밸런서의 기본 리스너, 리스너 규칙 및 대상 그룹을 위한 추가 리소스가 있습니다.

**로드 밸런싱된 환경**
+ `AWSEBLoadBalancer`([AWS::ElasticLoadBalancing::LoadBalancer](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-elb.html)) - 환경의 클래식 로드 밸런서입니다.
+ `AWSEBV2LoadBalancer`([AWS::ElasticLoadBalancingV2::LoadBalancer](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticloadbalancingv2-loadbalancer.html)) - 환경의 애플리케이션 로드 밸런서 또는 네트워크 로드 밸런서입니다.
+ `AWSEBLoadBalancerSecurityGroup`([AWS::EC2::SecurityGroup](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-security-group.html)) - Elastic Beanstalk에서 로드 밸런서에 대해 생성하는 보안 그룹의 이름으로, 사용자 지정 [Amazon Virtual Private Cloud](https://docs.aws.amazon.com/vpc/latest/userguide/)(Amazon VPC)에만 해당됩니다. 기본 VPC 또는 EC2 Classic에서는 Elastic Load Balancing이 로드 밸런서에 기본 보안 그룹을 할당합니다.
+ `AWSEBV2LoadBalancerListener`([AWS::ElasticLoadBalancingV2::Listener](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticloadbalancingv2-listener.html)) - 로드 밸런서에서 연결 요청을 확인하고 해당 요청을 하나 이상의 대상 그룹에 전달할 수 있도록 하는 리스너입니다.
+ `AWSEBV2LoadBalancerListenerRule`([AWS::ElasticLoadBalancingV2::ListenerRule](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticloadbalancingv2-listenerrule.html)) - Elastic Load Balancing 리스너가 작업을 수행하는 요청과 수행하는 작업을 정의합니다.
+ `AWSEBV2LoadBalancerTargetGroup`([AWS::ElasticLoadBalancingV2::TargetGroup](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticloadbalancingv2-targetgroup.html)) - 요청을 하나 이상의 등록된 대상(예: Amazon EC2 인스턴스)으로 라우팅하는 Elastic Load Balancing 대상 그룹입니다.

작업자 환경에는 수신되는 요청을 버퍼링하는 SQS 대기열을 위한 리소스와 인스턴스에서 리더 선정에 사용하는 Amazon DynamoDB 테이블이 있습니다.

**작업자 환경**
+ `AWSEBWorkerQueue`([AWS::SQS::Queue](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sqs-queues.html)) - 데몬이 처리해야 할 요청을 가져오는 Amazon SQS 대기열입니다.
+ `AWSEBWorkerDeadLetterQueue`([AWS::SQS::Queue](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sqs-queues.html)) - 데몬이 전달할 수 없거나 성공적으로 처리할 수 없는 메시지를 저장하는 Amazon SQS 대기열입니다.
+ `AWSEBWorkerCronLeaderRegistry`([AWS::DynamoDB::Table](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-dynamodb-table.html)) - 데몬이 정기적 작업에 사용하는 내부 레지스트리인 Amazon DynamoDB 테이블입니다.

# 기타 CloudFormation 템플릿 키
<a name="ebextensions-otherkeys"></a>

`Resources`, `files`및 CloudFormation 와 같은의 구성 파일 키를 이미 도입했습니다`packages`. Elastic Beanstalk는 환경을 지원하는 CloudFormation 템플릿에 구성 파일의 내용을 추가하므로 다른 CloudFormation 섹션을 사용하여 구성 파일에서 고급 작업을 수행할 수 있습니다.

**Topics**
+ [

## 파라미터
](#ebextensions-otherkeys-parameters)
+ [

## 출력
](#ebextensions-otherkeys-outputs)
+ [

## 매핑
](#ebextensions-otherkeys-mappings)

## 파라미터
<a name="ebextensions-otherkeys-parameters"></a>

파라미터는 구성 파일의 다른 위치에서 사용하는 값을 정의하는 데 사용할 수 있는 Elastic Beanstalk의 고유한 대체 [사용자 지정 옵션](configuration-options-custom.md)입니다. 사용자 지정 옵션과 마찬가지로, 파라미터를 사용하면 사용자가 구성할 수 있는 값을 한 곳에서 수집할 수 있습니다. 사용자 지정 옵션과 달리 Elastic Beanstalk의 API를 사용하여 파라미터 값을 설정할 수 없으며 템플릿에서 정의할 수 있는 파라미터 수는에 의해 제한됩니다 CloudFormation.

파라미터를 사용할 수 있는 한 가지 이유는 구성 파일을 CloudFormation 템플릿으로 두 배로 만들기 때문입니다. 사용자 지정 옵션 대신 파라미터를 사용하는 경우 구성 파일을 사용하여에서 자체 스택 CloudFormation 과 동일한 리소스를 생성할 수 있습니다. 예를 들어 테스트를 위해 환경에 Amazon EFS 파일 시스템을 추가하는 구성 파일이 있고, 동일한 파일을 사용해 환경의 프로덕션용 수명 주기에 연결되지 않은 독립적 파일 시스템을 생성할 수 있습니다.

다음 예에서는 파라미터를 사용해 구성 파일 맨 위에서 사용자가 구성할 수 있는 값을 수집하는 방법을 보여 줍니다.

**Example [Loadbalancer-accesslogs-existingbucket.config](https://github.com/awsdocs/elastic-beanstalk-samples/tree/main/configuration-files/aws-provided/resource-configuration/loadbalancer-accesslogs-existingbucket.config) - 파라미터**  

```
Parameters:
  bucket:
    Type: String
    Description: "Name of the Amazon S3 bucket in which to store load balancer logs"
    Default: "amzn-s3-demo-bucket"
  bucketprefix:
    Type: String
    Description: "Optional prefix. Can't start or end with a /, or contain the word AWSLogs"
    Default: ""
```

## 출력
<a name="ebextensions-otherkeys-outputs"></a>

`Outputs` 블록을 사용하여 생성된 리소스에 대한 정보를 CloudFormation으로 내보낼 수 있습니다. 그런 다음 `Fn::ImportValue` 함수를 사용하여 값을 Elastic Beanstalk 외부의 CloudFormation 템플릿으로 가져올 수 있습니다.

다음 예제에서는 Amazon SNS 주제를 생성하고 이름을 사용하여 ARN을 CloudFormation 로 내보냅니다`NotificationTopicArn`.

**Example [sns-topic.config](https://github.com/awsdocs/elastic-beanstalk-samples/tree/main/configuration-files/aws-provided/resource-configuration/sns-topic.config)**  

```
Resources:
  NotificationTopic:
    Type: AWS::SNS::Topic

Outputs:
  NotificationTopicArn:
    Description: Notification topic ARN
    Value: { "Ref" : "NotificationTopic" }
    Export:
      Name: NotificationTopicArn
```

다른 환경의 구성 파일 또는 Elastic Beanstalk 외부의 CloudFormation 템플릿에서 `Fn::ImportValue` 함수를 사용하여 내보낸 ARN을 가져올 수 있습니다. 이 예에서는 내보낸 값을 환경 속성 `TOPIC_ARN`에 할당합니다.

**Example env.config**  

```
option_settings:
  aws:elasticbeanstalk:application:environment:
    TOPIC_ARN: '`{ "Fn::ImportValue" : "NotificationTopicArn" }`'
```

## 매핑
<a name="ebextensions-otherkeys-mappings"></a>

매핑을 사용하여 네임스페이스별로 구성된 키 값 페어를 저장할 수 있습니다. 매핑을 사용하면 구성 전체에서 사용하는 값을 구성하거나, 다른 값에 따라 파라미터 값을 변경할 수 있습니다. 예를 들어 다음 구성은 현재 리전을 기준으로 계정 ID 파라미터의 값을 설정합니다.

**Example [Loadbalancer-accesslogs-newbucket.config](https://github.com/awsdocs/elastic-beanstalk-samples/tree/main/configuration-files/aws-provided/resource-configuration/loadbalancer-accesslogs-newbucket.config) - 매핑**  

```
Mappings: 
  Region2ELBAccountId: 
    us-east-1: 
      AccountId: "111122223333"
    us-west-2: 
      AccountId: "444455556666"
    us-west-1: 
      AccountId: "123456789012"
    eu-west-1: 
      AccountId: "777788889999"
...
            Principal: 
              AWS: 
                ? "Fn::FindInMap"
                : 
                  - Region2ELBAccountId
                  - 
                    Ref: "AWS::Region"
                  - AccountId
```

# 함수
<a name="ebextensions-functions"></a>

구성 파일의 함수를 사용하여 리소스 속성의 값을 다른 리소스 또는 Elastic Beanstalk 구성 옵션 설정의 정보로 채울 수 있습니다. Elastic Beanstalk는 CloudFormation 함수(`Ref`, `Fn::GetAtt`, `Fn::Join`)와 하나의 Elastic Beanstalk 전용 함수인를 지원합니다`Fn::GetOptionSetting`.

**Topics**
+ [

## Ref
](#ebextensions-functions-ref)
+ [

## Fn::GetAtt
](#ebextensions-functions-getatt)
+ [

## Fn::Join
](#ebextensions-functions-join)
+ [

## Fn::GetOptionSetting
](#ebextensions-functions-getoptionsetting)

## Ref
<a name="ebextensions-functions-ref"></a>

`Ref`를 사용하여 AWS 리소스의 기본 문자열 표현을 검색합니다. `Ref`를 통해 반환된 값은 리소스 유형에 따라 다르며, 경우에 따라 기타 요소에 따라서도 다릅니다. 예를 들어 보안 그룹([AWS::EC2::SecurityGroup](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-security-group.html))은 보안 그룹이 기본 [Amazon Virtual Private Cloud](https://docs.aws.amazon.com/vpc/latest/userguide/)(Amazon VPC)에 있는지, EC2 classic에 있는지 또는 사용자 지정 VPC에 있는지에 따라 보안 그룹의 이름 또는 ID를 반환합니다.

```
{ "Ref" : "resource name" }
```

**참고**  
`Ref`의 반환 값을 포함하여 각 리소스 유형에 대한 자세한 내용은 *CloudFormation 사용 설명서*의 [AWS 리소스 유형 참조](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-template-resource-type-ref.html)를 참조하세요.

샘플 [Auto Scaling 수명 주기 후크](environment-resources.md)의 예:

```
Resources:
  lifecyclehook:
    Type: AWS::AutoScaling::LifecycleHook
    Properties:
      AutoScalingGroupName: { "Ref" : "AWSEBAutoScalingGroup" }
```

`Ref`를 사용하여 동일한 파일 또는 다른 구성 파일의 다른 곳에서 정의된 CloudFormation 파라미터의 값을 검색할 수도 있습니다.

## Fn::GetAtt
<a name="ebextensions-functions-getatt"></a>

`Fn::GetAtt`를 사용하여 AWS 리소스의 속성 값을 검색합니다.

```
{ "Fn::GetAtt" : [ "resource name", "attribute name"] }
```

샘플 [Auto Scaling 수명 주기 후크](environment-resources.md)의 예:

```
Resources:
  lifecyclehook:
    Type: AWS::AutoScaling::LifecycleHook
    Properties:
      RoleARN: { "Fn::GetAtt" : [ "hookrole", "Arn"] }
```

자세한 내용은 [Fn::GetAtt](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/intrinsic-function-reference-getatt.html)를 참조하세요.

## Fn::Join
<a name="ebextensions-functions-join"></a>

`Fn::Join`을 사용하여 문자열을 구분 기호와 결합합니다. 문자열을 하드 코딩하거나 `Fn::GetAtt` 또는 `Ref`의 출력을 사용할 수 있습니다.

```
{ "Fn::Join" : [ "delimiter", [ "string1", "string2" ] ] }
```

자세한 내용은 [Fn::Join](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/intrinsic-function-reference-join.html)을 참조하세요.

## Fn::GetOptionSetting
<a name="ebextensions-functions-getoptionsetting"></a>

`Fn::GetOptionSetting`을 사용하여 환경에 적용된 [구성 옵션](command-options.md) 설정의 값을 검색합니다.

```
"Fn::GetOptionSetting":
  Namespace: "namespace"
  OptionName: "option name"
  DefaultValue: "default value"
```

[프라이빗 키 저장](https-storingprivatekeys.md) 예제에서:

```
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"
```

# 사용자 지정 리소스 예제
<a name="customize-environment-resources-examples"></a>

다음 목록에는 Elastic Beanstalk 환경을 사용자 지정하는 데 사용할 수 있는 구성 파일의 예가 나열되어 있습니다.
+ [DynamoDB, CloudWatch 및 SNS](https://elasticbeanstalk.s3.amazonaws.com/extensions/DynamoDB-with-CloudWatch-Alarms.config)
+ [Elastic Load Balancing 및 CloudWatch](https://elasticbeanstalk.s3.amazonaws.com/extensions/ELB-Alarms.config)
+ [ElastiCache](https://elasticbeanstalk.s3.amazonaws.com/extensions/ElastiCache.config)
+ [RDS 및 CloudWatch](https://elasticbeanstalk.s3.amazonaws.com/extensions/RDS-Alarms.config)
+ [SQS, SNS 및 CloudWatch](https://elasticbeanstalk.s3.amazonaws.com/extensions/SNS.config)

이 페이지의 하위 항목에서는 Elastic Beanstalk 환경에서 사용자 지정 리소스를 추가하고 구성하기 위한 몇 가지 확장된 예를 제공합니다.

**Topics**
+ [

# 예: ElastiCache
](customize-environment-resources-elasticache.md)
+ [

# 예: SQS, CloudWatch 및 SNS
](customize-environment-resources-sqs.md)
+ [

# 예: DynamoDB, CloudWatch, SNS
](customize-environment-resources-dynamodb.md)

# 예: ElastiCache
<a name="customize-environment-resources-elasticache"></a>

다음 샘플은 EC2-Classic 및 EC2-VPC(기본 및 사용자 지정 [Amazon Virtual Private Cloud](https://docs.aws.amazon.com/vpc/latest/userguide/)(Amazon VPC)) 플랫폼에 Amazon ElastiCache 클러스터를 추가합니다. 이러한 플랫폼에 대한 자세한 내용과 EC2가 해당 리전 및 AWS 계정에 대해 지원하는 플랫폼을 결정하는 방법은 섹션을 참조하세요[https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-supported-platforms.html](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-supported-platforms.html). 그런 다음 사용 중인 플랫폼에 적용되는 이 주제의 단원을 참조하십시오.
+ [EC2-Classic 플랫폼](#customize-environment-resources-elasticache-classic)
+ [EC2-VPC(기본값)](#customize-environment-resources-elasticache-defaultvpc)
+ [EC2-VPC(사용자 지정)](#customize-environment-resources-elasticache-targetedvpc)

## EC2-Classic 플랫폼
<a name="customize-environment-resources-elasticache-classic"></a>

이 샘플은 EC2-Classic 플랫폼으로 시작된 인스턴스가 있는 환경에 Amazon ElastiCache 클러스터를 추가합니다. 이 예제에서 보이는 모든 속성은 이러한 각 리소스 유형에 대해 설정해야 하는 최소 필수 속성입니다. [ElastiCache 예제](https://elasticbeanstalk.s3.amazonaws.com/extensions/ElastiCache.config)에서 해당 예제를 다운로드할 수 있습니다.

**참고**  
이 예제에서는 요금이 부과될 수 있는 AWS 리소스를 생성합니다. AWS 요금에 대한 자세한 내용은 섹션을 참조하세요[https://aws.amazon.com/pricing/](https://aws.amazon.com/pricing/). 일부 서비스는 AWS 프리 티어의 일부입니다. 신규 고객은 무료로 이 서비스를 시험 사용할 수 있습니다. 자세한 정보는 [https://aws.amazon.com/free/](https://aws.amazon.com/free/)을 참조하세요.

이 예를 활용하려면 다음과 같이 하세요.

1. 소스 번들의 최상위 디렉터리에 `[.ebextensions](ebextensions.md)` 디렉터리를 생성합니다.

1. 확장자 `.config`로 구성 파일 두 개를 생성하고 `.ebextensions` 디렉터리로 가져옵니다. 구성 파일 하나는 리소스를 정의하고 다른 하나는 옵션을 정의합니다.

1. Elastic Beanstalk에 애플리케이션을 배포합니다.

   YAML은 일정한 들여쓰기를 사용합니다. 예제 구성 파일의 콘텐츠를 바꿀 때 들여쓰기 레벨을 일치시키고, 텍스트 편집기가 탭 문자 대신 공백을 사용해 들여쓰기를 하도록 합니다.

리소스를 정의하는 구성 파일(예: `elasticache.config`)을 생성합니다. 이 예제에서는 ElastiCache 클러스터 리소스(`MyElastiCache`)의 이름을 지정하고, 해당 리소스의 유형을 선언한 다음 클러스터의 속성을 구성하여 ElastiCache 클러스터를 생성합니다. 또한 이 구성 파일에서 생성 및 정의되는 ElastiCache 보안 그룹 리소스의 이름을 참조합니다. 다음으로 ElastiCache 보안 그룹을 생성합니다. 이 리소스의 이름을 정의하고, 리소스의 유형을 선언한 다음 보안 그룹에 대한 설명을 추가합니다. 마지막으로, ElastiCache 보안 그룹(`MyCacheSecurityGroup`) 및 Elastic Beanstalk 보안 그룹(`AWSEBSecurityGroup`) 내 인스턴스에서의 액세스만 허용하도록 ElastiCache 보안 그룹에 대한 수신 규칙을 설정합니다. 파라미터 이름 `AWSEBSecurityGroup`은 Elastic Beanstalk에서 제공하는 고정된 리소스 이름입니다. Elastic Beanstalk 애플리케이션에서 ElastiCache 클러스터의 인스턴스에 연결하도록 하려면 ElastiCache 보안 그룹 수신 규칙에 `AWSEBSecurityGroup`을 추가해야 합니다.

```
#This sample requires you to create a separate configuration file that defines the custom option settings for CacheCluster properties.
          
Resources:
  MyElastiCache:
    Type: AWS::ElastiCache::CacheCluster
    Properties:
      CacheNodeType: 
         Fn::GetOptionSetting:
             OptionName : CacheNodeType
             DefaultValue: cache.m1.small
      NumCacheNodes: 
           Fn::GetOptionSetting:
             OptionName : NumCacheNodes
             DefaultValue: 1
      Engine: 
           Fn::GetOptionSetting:
             OptionName : Engine
             DefaultValue: memcached
      CacheSecurityGroupNames:
        - Ref: MyCacheSecurityGroup
  MyCacheSecurityGroup:
    Type: AWS::ElastiCache::SecurityGroup
    Properties:
      Description: "Lock cache down to webserver access only"
  MyCacheSecurityGroupIngress:
    Type: AWS::ElastiCache::SecurityGroupIngress
    Properties:
      CacheSecurityGroupName: 
        Ref: MyCacheSecurityGroup
      EC2SecurityGroupName:
        Ref: AWSEBSecurityGroup
```

이 구성 파일 예제에서 사용된 리소스에 대한 자세한 내용은 다음 참조를 참조하십시오.
+ [AWS::ElastiCache::CacheCluster](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticache-cache-cluster.html)
+ [AWS::ElastiCache::SecurityGroup](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticache-security-group.html)
+ [AWS::ElastiCache:SecurityGroupIngress](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticache-security-group-ingress.html)

`options.config`라는 별개의 구성 파일을 생성하고, 사용자 지정 옵션 설정을 정의합니다.

```
option_settings:
  "aws:elasticbeanstalk:customoption":
     CacheNodeType : cache.m1.small
     NumCacheNodes : 1
     Engine : memcached
```

이러한 행은 사용할 실제 값의 이름-값 페어가 포함된 **aws:elasticbeanstalk:customoption** 섹션과 함께 option\$1settings 섹션이 포함된 구성 파일(이 예제의 options.config)의 **CacheNodeType, NumCacheNodes, and Engine** 값에서 **CacheNodeType, NumCacheNodes, and Engine** 속성의 값을 가져오라고 ElasticBeanstalk에 지시합니다. 위 예제에서 이는 cache.m1.small 즉, 1을 뜻하며 Memcached가 이 값에 사용됩니다. `Fn::GetOptionSetting`에 대한 자세한 정보는 [함수](ebextensions-functions.md) 섹션을 참조하세요.

## EC2-VPC(기본값)
<a name="customize-environment-resources-elasticache-defaultvpc"></a>

이 샘플은 EC2-VPC 플랫폼으로 시작된 인스턴스가 있는 환경에 Amazon ElastiCache 클러스터를 추가합니다. 특히, 이 섹션의 정보는 EC2가 인스턴스를 기본 VPC로 시작하는 시나리오에 적용됩니다. 이 예제의 모든 속성은 이러한 각 리소스 유형에 대해 설정해야 하는 최소 필수 속성입니다. 기본 VPC에 대한 자세한 내용은 [기본 VPC 및 서브넷](https://docs.aws.amazon.com/vpc/latest/userguide/default-vpc.html) 단원을 참조하세요.

**참고**  
이 예제에서는 요금이 부과될 수 있는 AWS 리소스를 생성합니다. AWS 요금에 대한 자세한 내용은 섹션을 참조하세요[https://aws.amazon.com/pricing/](https://aws.amazon.com/pricing/). 일부 서비스는 AWS 프리 티어의 일부입니다. 신규 고객은 무료로 이 서비스를 시험 사용할 수 있습니다. 자세한 정보는 [https://aws.amazon.com/free/](https://aws.amazon.com/free/)을 참조하세요.

이 예를 활용하려면 다음과 같이 하세요.

1. 소스 번들의 최상위 디렉터리에 `[.ebextensions](ebextensions.md)` 디렉터리를 생성합니다.

1. 확장자 `.config`로 구성 파일 두 개를 생성하고 `.ebextensions` 디렉터리로 가져옵니다. 구성 파일 하나는 리소스를 정의하고 다른 하나는 옵션을 정의합니다.

1. Elastic Beanstalk에 애플리케이션을 배포합니다.

   YAML은 일정한 들여쓰기를 사용합니다. 예제 구성 파일의 콘텐츠를 바꿀 때 들여쓰기 레벨을 일치시키고, 텍스트 편집기가 탭 문자 대신 공백을 사용해 들여쓰기를 하도록 합니다.

이제, 리소스 구성 파일의 이름을 `elasticache.config`로 지정합니다. ElastiCache 클러스터를 생성하기 위해 이 예제에서는 ElastiCache 클러스터 리소스(`MyElastiCache`)의 이름을 지정하고, 해당 리소스의 유형을 선언한 다음 클러스터의 속성을 구성합니다. 또한 이 구성 파일에서 생성 및 정의한 보안 그룹 리소스의 ID를 참조합니다.

다음으로 EC2 보안 그룹을 생성합니다. 리소스의 이름을 정의하고, 리소스의 유형을 선언한 다음 설명을 추가한 후 Elastic Beanstalk 보안 그룹(`AWSEBSecurityGroup`) 내 인스턴스에서의 액세스만 허용하도록 보안 그룹에 대한 수신 규칙을 설정합니다. (매개변수 이름 `AWSEBSecurityGroup`은 Elastic Beanstalk이 제공하는 고정형 리소스입니다. Elastic Beanstalk 애플리케이션에서 ElastiCache 클러스터의 인스턴스에 연결하도록 하려면 ElastiCache 보안 그룹 수신 규칙에 `AWSEBSecurityGroup`을 추가해야 합니다.)

또한 EC2 보안 그룹에 대한 수신 규칙은 캐시 노드가 연결을 수락할 수 있는 IP 프로토콜 및 포트 번호도 정의합니다. Redis용 기본 포트 번호는 `6379`입니다.

```
#This sample requires you to create a separate configuration file that defines the custom option settings for CacheCluster properties.

Resources:
  MyCacheSecurityGroup:
    Type: "AWS::EC2::SecurityGroup"
    Properties:
      GroupDescription: "Lock cache down to webserver access only"
      SecurityGroupIngress :
        - IpProtocol : "tcp"
          FromPort :
            Fn::GetOptionSetting:
              OptionName : "CachePort"
              DefaultValue: "6379"
          ToPort :
            Fn::GetOptionSetting:
              OptionName : "CachePort"
              DefaultValue: "6379"
          SourceSecurityGroupName:
            Ref: "AWSEBSecurityGroup"
  MyElastiCache:
    Type: "AWS::ElastiCache::CacheCluster"
    Properties:
      CacheNodeType:
        Fn::GetOptionSetting:
          OptionName : "CacheNodeType"
          DefaultValue : "cache.t2.micro"
      NumCacheNodes:
        Fn::GetOptionSetting:
          OptionName : "NumCacheNodes"
          DefaultValue : "1"
      Engine:
        Fn::GetOptionSetting:
          OptionName : "Engine"
          DefaultValue : "redis"
      VpcSecurityGroupIds:
        -
          Fn::GetAtt:
            - MyCacheSecurityGroup
            - GroupId

Outputs:
  ElastiCache:
    Description : "ID of ElastiCache Cache Cluster with Redis Engine"
    Value :
      Ref : "MyElastiCache"
```

이 구성 파일 예제에서 사용된 리소스에 대한 자세한 내용은 다음 참조를 참조하십시오.
+ [AWS::ElastiCache::CacheCluster](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticache-cache-cluster.html)
+ [AWS::EC2::SecurityGroup](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-security-group.html)

다음으로, 옵션 구성 파일의 이름을 `options.config`로 지정하고, 사용자 지정 옵션 설정을 정의합니다.

```
option_settings:
  "aws:elasticbeanstalk:customoption":
    CacheNodeType : cache.t2.micro
    NumCacheNodes : 1
    Engine : redis
    CachePort : 6379
```

이러한 줄은 구성 파일(이 예제에서는 `options.config`)의 `CacheNodeType`, `NumCacheNodes`, `Engine` 및 `CachePort` 값에서 `CacheNodeType`, `NumCacheNodes`, `Engine` 및 `CachePort` 속성의 값을 가져오도록 Elastic Beanstalk에 지시합니다. 이 구성 파일에는 `aws:elasticbeanstalk:customoption` 아래에 사용할 실제 값이 들어 있는 이름-값 페어가 포함된 `option_settings` 섹션이 있습니다. 앞선 예제에서 `cache.t2.micro`, `1`, `redis` 및 `6379`이 이러한 값에 사용될 수 있습니다. `Fn::GetOptionSetting`에 대한 자세한 정보는 [함수](ebextensions-functions.md) 섹션을 참조하세요.

## EC2-VPC(사용자 지정)
<a name="customize-environment-resources-elasticache-targetedvpc"></a>

EC2-VPC 플랫폼에서 사용자 지정 VPC를 생성하고 이 VPC를 EC2에서 인스턴스를 시작할 VPC로 지정하면 환경에 Amazon ElastiCache 클러스터를 추가하는 프로세스가 기본 VPC의 프로세스와 달라집니다. ElastiCache 클러스터에 대한 서브넷 그룹을 생성해야 한다는 점이 가장 크게 다릅니다. 이 예제의 모든 속성은 이러한 각 리소스 유형에 대해 설정해야 하는 최소 필수 속성입니다.

**참고**  
이 예제에서는 요금이 부과될 수 있는 AWS 리소스를 생성합니다. AWS 요금에 대한 자세한 내용은 섹션을 참조하세요[https://aws.amazon.com/pricing/](https://aws.amazon.com/pricing/). 일부 서비스는 AWS 프리 티어의 일부입니다. 신규 고객은 무료로 이 서비스를 시험 사용할 수 있습니다. 자세한 정보는 [https://aws.amazon.com/free/](https://aws.amazon.com/free/)을 참조하세요.

이 예를 활용하려면 다음과 같이 하세요.

1. 소스 번들의 최상위 디렉터리에 `[.ebextensions](ebextensions.md)` 디렉터리를 생성합니다.

1. 확장자 `.config`로 구성 파일 두 개를 생성하고 `.ebextensions` 디렉터리로 가져옵니다. 구성 파일 하나는 리소스를 정의하고 다른 하나는 옵션을 정의합니다.

1. Elastic Beanstalk에 애플리케이션을 배포합니다.

   YAML은 일정한 들여쓰기를 사용합니다. 예제 구성 파일의 콘텐츠를 바꿀 때 들여쓰기 레벨을 일치시키고, 텍스트 편집기가 탭 문자 대신 공백을 사용해 들여쓰기를 하도록 합니다.

이제, 리소스 구성 파일의 이름을 `elasticache.config`로 지정합니다. ElastiCache 클러스터를 생성하기 위해 이 예제에서는 ElastiCache 클러스터 리소스(`MyElastiCache`)의 이름을 지정하고, 해당 리소스의 유형을 선언한 다음 클러스터의 속성을 구성합니다. 이 예제의 속성은 ElastiCache 클러스터의 서브넷 그룹 이름과 이 구성 파일에서 생성 및 정의한 보안 그룹 리소스의 ID를 참조합니다.

다음으로 EC2 보안 그룹을 생성합니다. 리소스의 이름을 정의하고, 리소스의 유형을 선언한 다음 설명 및 VPC ID를 추가한 후 Elastic Beanstalk 보안 그룹(`AWSEBSecurityGroup`) 내 인스턴스에서의 액세스만 허용하도록 보안 그룹에 대한 수신 규칙을 설정합니다. (매개변수 이름 `AWSEBSecurityGroup`은 Elastic Beanstalk이 제공하는 고정형 리소스입니다. Elastic Beanstalk 애플리케이션에서 ElastiCache 클러스터의 인스턴스에 연결하도록 하려면 ElastiCache 보안 그룹 수신 규칙에 `AWSEBSecurityGroup`을 추가해야 합니다.)

또한 EC2 보안 그룹에 대한 수신 규칙은 캐시 노드가 연결을 수락할 수 있는 IP 프로토콜 및 포트 번호도 정의합니다. Redis용 기본 포트 번호는 `6379`입니다. 마지막으로, 이 예제에서는 ElastiCache 클러스터의 서브넷 그룹을 생성합니다. 이 리소스의 이름을 정의하고, 리소스의 유형을 선언한 다음 서브넷 그룹의 서브넷 ID와 설명을 추가합니다.

**참고**  
ElastiCache 클러스터에 프라이빗 서브넷을 사용하는 것이 좋습니다. 프라이빗 서브넷을 사용하는 VPC에 대한 자세한 내용은 [https://docs.aws.amazon.com/vpc/latest/userguide/VPC_Scenario2.html](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_Scenario2.html) 단원을 참조하세요.

```
#This sample requires you to create a separate configuration file that defines the custom option settings for CacheCluster properties.

Resources:
  MyElastiCache:
    Type: "AWS::ElastiCache::CacheCluster"
    Properties:
      CacheNodeType:
        Fn::GetOptionSetting:
          OptionName : "CacheNodeType"
          DefaultValue : "cache.t2.micro"
      NumCacheNodes:
        Fn::GetOptionSetting:
          OptionName : "NumCacheNodes"
          DefaultValue : "1"
      Engine:
        Fn::GetOptionSetting:
          OptionName : "Engine"
          DefaultValue : "redis"
      CacheSubnetGroupName:
        Ref: "MyCacheSubnets"
      VpcSecurityGroupIds:
        - Ref: "MyCacheSecurityGroup"
  MyCacheSecurityGroup:
    Type: "AWS::EC2::SecurityGroup"
    Properties:
      GroupDescription: "Lock cache down to webserver access only"
      VpcId:
        Fn::GetOptionSetting:
          OptionName : "VpcId"
      SecurityGroupIngress :
        - IpProtocol : "tcp"
          FromPort :
            Fn::GetOptionSetting:
              OptionName : "CachePort"
              DefaultValue: "6379"
          ToPort :
            Fn::GetOptionSetting:
              OptionName : "CachePort"
              DefaultValue: "6379"
          SourceSecurityGroupId:
            Ref: "AWSEBSecurityGroup"
  MyCacheSubnets:
    Type: "AWS::ElastiCache::SubnetGroup"
    Properties:
      Description: "Subnets for ElastiCache"
      SubnetIds:
        Fn::GetOptionSetting:
          OptionName : "CacheSubnets"
Outputs:
  ElastiCache:
    Description : "ID of ElastiCache Cache Cluster with Redis Engine"
    Value :
      Ref : "MyElastiCache"
```

이 구성 파일 예제에서 사용된 리소스에 대한 자세한 내용은 다음 참조를 참조하십시오.
+ [AWS::ElastiCache::CacheCluster](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticache-cache-cluster.html)
+ [AWS::EC2::SecurityGroup](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-security-group.html)
+ [AWS::ElastiCache::SubnetGroup](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticache-subnetgroup.html)

다음으로, 옵션 구성 파일의 이름을 `options.config`로 지정하고, 사용자 지정 옵션 설정을 정의합니다.

**참고**  
다음 예제에서는 고유한 서브넷 및 VPC로 예제 `CacheSubnets` 및 `VpcId` 값을 바꿉니다.

```
option_settings:
  "aws:elasticbeanstalk:customoption":
    CacheNodeType : cache.t2.micro
    NumCacheNodes : 1
    Engine : redis
    CachePort : 6379
    CacheSubnets:
      - subnet-1a1a1a1a
      - subnet-2b2b2b2b
      - subnet-3c3c3c3c
    VpcId: vpc-4d4d4d4d
```

이러한 줄은 구성 파일(이 예제에서는 `options.config`)의 `CacheNodeType`, `NumCacheNodes`, `Engine`, `CachePort`, `CacheSubnets` 및 `VpcId` 값에서 `CacheNodeType`, `NumCacheNodes`, `Engine`, `CachePort`, `CacheSubnets` 및 `VpcId` 속성의 값을 가져오도록 Elastic Beanstalk에 지시합니다. 이 구성 파일에는 `aws:elasticbeanstalk:customoption` 아래에 샘플 값이 들어 있는 이름-값 페어가 포함된 `option_settings` 섹션이 있습니다. 위의 예제에서 `cache.t2.micro`, `1`, `redis`, `6379`, `subnet-1a1a1a1a`, `subnet-2b2b2b2b`, `subnet-3c3c3c3c` 및 `vpc-4d4d4d4d`이 이러한 값에 사용될 수 있습니다. `Fn::GetOptionSetting`에 대한 자세한 정보는 [함수](ebextensions-functions.md) 섹션을 참조하세요.

# 예: SQS, CloudWatch 및 SNS
<a name="customize-environment-resources-sqs"></a>

이 예제에서는 환경에 Amazon SQS 대기열과 대기열 깊이에 대한 경보를 추가합니다. 이 예제에서 보이는 속성은 이러한 각 리소스에 대해 설정해야 하는 최소 필수 속성입니다. [SQS, SNS, CloudWatch](https://elasticbeanstalk.s3.amazonaws.com/extensions/SNS.config)에서 예제를 다운로드할 수 있습니다.

**참고**  
이 예제에서는 요금이 부과될 수 있는 AWS 리소스를 생성합니다. AWS 요금에 대한 자세한 내용은 섹션을 참조하세요[https://aws.amazon.com/pricing/](https://aws.amazon.com/pricing/). 일부 서비스는 AWS 프리 티어의 일부입니다. 신규 고객은 무료로 이 서비스를 시험 사용할 수 있습니다. 자세한 정보는 [https://aws.amazon.com/free/](https://aws.amazon.com/free/)을 참조하세요.

이 예를 활용하려면 다음과 같이 하세요.

1. 소스 번들의 최상위 디렉터리에 `[.ebextensions](ebextensions.md)` 디렉터리를 생성합니다.

1. 확장자 `.config`로 구성 파일 두 개를 생성하고 `.ebextensions` 디렉터리로 가져옵니다. 구성 파일 하나는 리소스를 정의하고 다른 하나는 옵션을 정의합니다.

1. Elastic Beanstalk에 애플리케이션을 배포합니다.

   YAML은 일정한 들여쓰기를 사용합니다. 예제 구성 파일의 콘텐츠를 바꿀 때 들여쓰기 레벨을 일치시키고, 텍스트 편집기가 탭 문자 대신 공백을 사용해 들여쓰기를 하도록 합니다.

리소스를 정의하는 구성 파일(예: sqs.config)을 생성합니다. 이 예제에서는 SQS 대기열을 만들고 `VisbilityTimeout` 리소스의 `MySQSQueue` 속성을 정의합니다. 그런 다음 SNS `Topic`을 만들고 경보가 울리면 이메일을 `someone@example.com`으로 보내도록 지정합니다. 마지막으로 대기열이 메시지 10개 이상으로 증가하면 CloudWatch 경보를 생성합니다. `Dimensions` 속성에서 차원 측정을 나타내는 차원 이름과 값을 지정합니다. `Fn::GetAtt`를 사용하여 `QueueName`에서 `MySQSQueue`의 값을 반환합니다.

```
#This sample requires you to create a separate configuration file to define the custom options for the SNS topic and SQS queue.
Resources:
  MySQSQueue:
    Type: AWS::SQS::Queue
    Properties: 
      VisibilityTimeout:
        Fn::GetOptionSetting:
          OptionName: VisibilityTimeout
          DefaultValue: 30
  AlarmTopic:
    Type: AWS::SNS::Topic
    Properties: 
      Subscription:
        - Endpoint:
            Fn::GetOptionSetting:
              OptionName: AlarmEmail
              DefaultValue: "nobody@amazon.com"
          Protocol: email
  QueueDepthAlarm:
    Type: AWS::CloudWatch::Alarm
    Properties:
      AlarmDescription: "Alarm if queue depth grows beyond 10 messages"
      Namespace: "AWS/SQS"
      MetricName: ApproximateNumberOfMessagesVisible
      Dimensions:
        - Name: QueueName
          Value : { "Fn::GetAtt" : [ "MySQSQueue", "QueueName"] }
      Statistic: Sum
      Period: 300
      EvaluationPeriods: 1
      Threshold: 10
      ComparisonOperator: GreaterThanThreshold
      AlarmActions:
        - Ref: AlarmTopic
      InsufficientDataActions:
        - Ref: AlarmTopic

Outputs :
  QueueURL: 
    Description : "URL of newly created SQS Queue"
    Value : { Ref : "MySQSQueue" }
  QueueARN :
    Description : "ARN of newly created SQS Queue"
    Value : { "Fn::GetAtt" : [ "MySQSQueue", "Arn"]}
  QueueName :
    Description : "Name newly created SQS Queue"
    Value : { "Fn::GetAtt" : [ "MySQSQueue", "QueueName"]}
```

이 구성 파일 예제에서 사용된 리소스에 대한 자세한 내용은 다음 참조를 참조하십시오.
+ [AWS::SQS::Queue](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sqs-queues.html)
+ [AWS::SNS::Topic](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sns-topic.html)
+ [AWS::CloudWatch::Alarm](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cw-alarm.html)

`options.config`라는 별개의 구성 파일을 생성하고, 사용자 지정 옵션 설정을 정의합니다.

```
option_settings:
  "aws:elasticbeanstalk:customoption":
     VisibilityTimeout : 30
     AlarmEmail : "nobody@example.com"
```

이러한 행은 사용할 실제 값의 이름-값 페어가 포함된 **aws:elasticbeanstalk:customoption** 섹션과 함께 option\$1settings 섹션이 포함된 구성 파일(이 예제의 options.config)의 **VisibilityTimeout and Subscription Endpoint** 값에서 **VisibilityTimeout and Subscription Endpoint** 속성의 값을 가져오라고 Elastic Beanstalk에 지시합니다. 위 예제에서 이는 30을 뜻하며 "nobody@amazon.com"이 값에 사용됩니다. `Fn::GetOptionSetting`에 대한 자세한 정보는 [함수](ebextensions-functions.md) 섹션을 참조하세요.

# 예: DynamoDB, CloudWatch, SNS
<a name="customize-environment-resources-dynamodb"></a>

이 구성 파일은 PHP 2용 AWS SDK를 사용하여 DynamoDB 테이블을 PHP 기반 애플리케이션의 세션 핸들러로 설정합니다. 이 예를 사용하려면 환경의 인스턴스에 추가되고 DynamoDB 테이블에 액세스하는 데 사용하는 IAM 인스턴스 프로파일이 있어야 합니다.

 [DynamoDB 세션 지원 예제](https://elasticbeanstalk.s3.amazonaws.com/extensions/PHP-DynamoDB-Session-Support.zip)에서 이 단계에서 사용할 샘플을 다운로드할 수 있습니다. 샘플에는 다음 파일이 들어 있습니다.
+ 샘플 애플리케이션인 `index.php`
+ DynamoDB 테이블 및 기타 AWS 리소스를 생성 및 구성하고 Elastic Beanstalk 환경에서 애플리케이션을 호스팅하는 EC2 인스턴스에 소프트웨어를 설치`dynamodb.config`하기 위한 구성 파일
+ `options.config` 구성 파일 - 이 특정 설치의 특정 설정으로 `dynamodb.config`의 기본값 재정의

**`index.php`**

```
<?php

// Include the SDK using the Composer autoloader
require '../vendor/autoload.php';

use Aws\DynamoDb\DynamoDbClient;

// Grab the session table name and region from the configuration file
list($tableName, $region) = file(__DIR__ . '/../sessiontable');
$tableName = rtrim($tableName);
$region = rtrim($region);

// Create a DynamoDB client and register the table as the session handler
$dynamodb = DynamoDbClient::factory(array('region' => $region));
$handler = $dynamodb->registerSessionHandler(array('table_name' => $tableName, 'hash_key' => 'username'));

// Grab the instance ID so we can display the EC2 instance that services the request
$instanceId = file_get_contents("http://169.254.169.254/latest/meta-data/instance-id");
?>
<h1>Elastic Beanstalk PHP Sessions Sample</h1>
<p>This sample application shows the integration of the Elastic Beanstalk PHP
container and the session support for DynamoDB from the AWS SDK for PHP 2.
Using DynamoDB session support, the application can be scaled out across
multiple web servers. For more details, see the
<a href="https://aws.amazon.com/php/">PHP Developer Center</a>.</p>

<form id="SimpleForm" name="SimpleForm" method="post" action="index.php">
<?php
echo 'Request serviced from instance ' . $instanceId . '<br/>';
echo '<br/>';

if (isset($_POST['continue'])) {
  session_start();
  $_SESSION['visits'] = $_SESSION['visits'] + 1;
  echo 'Welcome back ' . $_SESSION['username'] . '<br/>';
  echo 'This is visit number ' . $_SESSION['visits'] . '<br/>';
  session_write_close();
  echo '<br/>';
  echo '<input type="Submit" value="Refresh" name="continue" id="continue"/>';
  echo '<input type="Submit" value="Delete Session" name="killsession" id="killsession"/>';
} elseif (isset($_POST['killsession'])) {
  session_start();
  echo 'Goodbye ' . $_SESSION['username'] . '<br/>';
  session_destroy();
  echo 'Username: <input type="text" name="username" id="username" size="30"/><br/>';
  echo '<br/>';
  echo '<input type="Submit" value="New Session" name="newsession" id="newsession"/>';
} elseif (isset($_POST['newsession'])) {
  session_start();
  $_SESSION['username'] = $_POST['username'];
  $_SESSION['visits'] = 1;
  echo 'Welcome to a new session ' . $_SESSION['username'] . '<br/>';
  session_write_close();
  echo '<br/>';
  echo '<input type="Submit" value="Refresh" name="continue" id="continue"/>';
  echo '<input type="Submit" value="Delete Session" name="killsession" id="killsession"/>';
} else {
  echo 'To get started, enter a username.<br/>';
  echo '<br/>';
  echo 'Username: <input type="text" name="username" id="username" size="30"/><br/>';
  echo '<input type="Submit" value="New Session" name="newsession" id="newsession"/>';
}
?>
</form>
```

**`.ebextensions/dynamodb.config`**

```
Resources:
  SessionTable:
    Type: AWS::DynamoDB::Table
    Properties:
      KeySchema: 
        HashKeyElement:
          AttributeName:
            Fn::GetOptionSetting:
              OptionName : SessionHashKeyName
              DefaultValue: "username"
          AttributeType:
            Fn::GetOptionSetting:
              OptionName : SessionHashKeyType
              DefaultValue: "S"
      ProvisionedThroughput:
        ReadCapacityUnits:
          Fn::GetOptionSetting:
            OptionName : SessionReadCapacityUnits
            DefaultValue: 1
        WriteCapacityUnits:
          Fn::GetOptionSetting:
            OptionName : SessionWriteCapacityUnits
            DefaultValue: 1

  SessionWriteCapacityUnitsLimit:
    Type: AWS::CloudWatch::Alarm
    Properties:
      AlarmDescription: { "Fn::Join" : ["", [{ "Ref" : "AWSEBEnvironmentName" }, " write capacity limit on the session table." ]]}
      Namespace: "AWS/DynamoDB"
      MetricName: ConsumedWriteCapacityUnits
      Dimensions:
        - Name: TableName
          Value: { "Ref" : "SessionTable" }
      Statistic: Sum
      Period: 300
      EvaluationPeriods: 12
      Threshold:
          Fn::GetOptionSetting:
            OptionName : SessionWriteCapacityUnitsAlarmThreshold
            DefaultValue: 240
      ComparisonOperator: GreaterThanThreshold
      AlarmActions:
        - Ref: SessionAlarmTopic
      InsufficientDataActions:
        - Ref: SessionAlarmTopic

  SessionReadCapacityUnitsLimit:
    Type: AWS::CloudWatch::Alarm
    Properties:
      AlarmDescription: { "Fn::Join" : ["", [{ "Ref" : "AWSEBEnvironmentName" }, " read capacity limit on the session table." ]]}
      Namespace: "AWS/DynamoDB"
      MetricName: ConsumedReadCapacityUnits
      Dimensions:
        - Name: TableName
          Value: { "Ref" : "SessionTable" }
      Statistic: Sum
      Period: 300
      EvaluationPeriods: 12
      Threshold:
          Fn::GetOptionSetting:
            OptionName : SessionReadCapacityUnitsAlarmThreshold
            DefaultValue: 240
      ComparisonOperator: GreaterThanThreshold
      AlarmActions:
        - Ref: SessionAlarmTopic
      InsufficientDataActions:
        - Ref: SessionAlarmTopic

  SessionThrottledRequestsAlarm:
    Type: AWS::CloudWatch::Alarm
    Properties:
      AlarmDescription: { "Fn::Join" : ["", [{ "Ref" : "AWSEBEnvironmentName" }, ": requests are being throttled." ]]}
      Namespace: AWS/DynamoDB
      MetricName: ThrottledRequests
      Dimensions:
        - Name: TableName
          Value: { "Ref" : "SessionTable" }
      Statistic: Sum
      Period: 300
      EvaluationPeriods: 1
      Threshold: 
        Fn::GetOptionSetting:
          OptionName: SessionThrottledRequestsThreshold
          DefaultValue: 1
      ComparisonOperator: GreaterThanThreshold
      AlarmActions:
        - Ref: SessionAlarmTopic
      InsufficientDataActions:
        - Ref: SessionAlarmTopic

  SessionAlarmTopic:
    Type: AWS::SNS::Topic
    Properties:
      Subscription:
        - Endpoint:
            Fn::GetOptionSetting:
              OptionName: SessionAlarmEmail
              DefaultValue: "nobody@amazon.com"
          Protocol: email

files:
  "/var/app/sessiontable":
    mode: "000444"
    content: |
      `{"Ref" : "SessionTable"}`
      `{"Ref" : "AWS::Region"}`

  "/var/app/composer.json":
    mode: "000744"
    content:
      {
        "require": {
           "aws/aws-sdk-php": "*"
        }
      }

container_commands:
 "1-install-composer":
   command: "cd /var/app; curl -s http://getcomposer.org/installer | php"
 "2-install-dependencies":
   command: "cd /var/app; php composer.phar install"
 "3-cleanup-composer":
   command: "rm -Rf /var/app/composer.*"
```

샘플 구성 파일에서는 먼저 DynamoDB 테이블을 만든 후 충분한 리소스를 할당하도록 테이블과 용량 단위의 기본 키 구조를 구성하여 요청한 처리량을 제공합니다. 그런 다음 `WriteCapacity` 및 `ReadCapacity`에 대한 CloudWatch 경보를 만듭니다. 경보 임계값을 초과하면 "nobody@amazon.com"에 이메일을 보내는 SNS 주제를 만듭니다.

환경을 위한 AWS 리소스를 생성하고 구성한 후에는 EC2 인스턴스를 사용자 지정해야 합니다. `files` 키를 사용하여 DynamoDB 테이블의 세부 정보를 환경의 EC2 인스턴스에 전달하고 AWS SDK for PHP 2 `composer.json` 파일에 "필수"를 추가합니다. 마지막으로 컨테이너 명령을 실행하여 composer와 필요한 종속 항목을 설치한 후 설치 관리자를 제거합니다.

**`.ebextensions/options.config`**

```
option_settings:
  "aws:elasticbeanstalk:customoption":
     SessionHashKeyName                      : username
     SessionHashKeyType                      : S
     SessionReadCapacityUnits                : 1
     SessionReadCapacityUnitsAlarmThreshold  : 240
     SessionWriteCapacityUnits               : 1 
     SessionWriteCapacityUnitsAlarmThreshold : 240
     SessionThrottledRequestsThreshold       : 1
     SessionAlarmEmail                       : me@example.com
```

SessionAlarmEmail 값을 경보 알림을 보내고자 하는 이메일로 바꿉니다. `options.config` 파일에는 `dynamodb.config`에서 정의된 일부 변수에 사용되는 값이 들어 있습니다. 예를 들어 `dynamodb.config`에는 다음 줄이 포함되어 있습니다.

```
Subscription:
  - Endpoint:
      Fn::GetOptionSetting:
        OptionName: SessionAlarmEmail
        DefaultValue: "nobody@amazon.com"
```

이러한 행은 사용할 실제 값의 이름-값 페어가 포함된 **aws:elasticbeanstalk:customoption** 섹션과 함께 option\$1settings 섹션이 포함된 구성 파일(샘플 애플리케이션의 `options.config`)의 **SessionAlarmEmail** 값에서 **엔드포인트** 속성의 값을 가져오라고 Elastic Beanstalk에 지시합니다. 위 예에서 이는 **SessionAlarmEmail**이 값 `nobody@amazon.com`을 할당할 것임을 의미합니다.

이 예에서 사용된 CloudFormation 리소스에 대한 자세한 내용은 다음 참조를 참조하십시오.
+ [AWS::DynamoDB::Table](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-dynamodb-table.html)
+ [AWS::CloudWatch::Alarm](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cw-alarm.html)
+ [AWS::SNS::Topic](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sns-topic.html)