

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

# Elastic Beanstalk 환경 구성(고급)
<a name="beanstalk-environment-configuration-advanced"></a>

 AWS Elastic Beanstalk 환경을 생성할 때 Elastic Beanstalk는 애플리케이션을 실행하고 지원하는 데 필요한 모든 AWS 리소스를 프로비저닝하고 구성합니다. 환경의 메타데이터와 업데이트 동작을 구성하는 것 외에도, [구성 옵션](command-options.md)에 값을 제공하여 이러한 리소스를 사용자 지정할 수 있습니다. 예를 들어 Amazon SQS 대기열과 대기열 깊이에 대한 경보를 추가하거나, Amazon ElastiCache 클러스터를 추가하고자 할 수 있습니다.

대부분의 구성 옵션에는 Elastic Beanstalk에서 자동으로 적용하는 기본값이 있습니다. 구성 파일, 저장된 구성, 명령줄 옵션을 사용하거나 Elastic Beanstalk API를 직접 호출하여 이러한 기본값을 재정의할 수 있습니다. EB CLI 및 Elastic Beanstalk 콘솔에서 일부 옵션에 대해 권장 값을 적용합니다.

소스 번들이 있는 구성 파일을 포함시켜 애플리케이션 버전을 배포함과 동시에 환경을 손쉽게 사용자 지정할 수 있습니다. 인스턴스에서 소프트웨어를 사용자 지정하는 경우 사용자 지정 AMI를 만들기보다 구성 파일을 사용하는 것이 좋습니다. AMI 집합을 유지할 필요가 없기 때문입니다.

애플리케이션을 배포할 때 애플리케이션이 사용하는 소프트웨어를 사용자 지정하고 구성하고자 할 수 있습니다. 이러한 파일은 애플리케이션에 필요한 종속 항목(예: yum 리포지토리의 추가 패키지)이거나 구성 파일(예: AWS Elastic Beanstalk에서 기본값으로 설정된 특정 설정을 재정의하는 httpd.conf의 대체)일 수 있습니다.

**Topics**
+ [구성 옵션](command-options.md)
+ [구성 파일(`.ebextensions`)을 사용하여 고급 환경 사용자 지정](ebextensions.md)
+ [Elastic Beanstalk 저장된 구성 사용](environment-configuration-savedconfig.md)
+ [환경 매니페스트(`env.yaml`)](environment-cfg-manifest.md)
+ [Elastic Beanstalk 환경에서 사용자 지정 Amazon Machine Image(AMI) 사용](using-features.customenv.md)
+ [정적 파일 제공](environment-cfg-staticfiles.md)
+ [Elastic Beanstalk 환경에 사용할 HTTPS 구성](configuring-https.md)

# 구성 옵션
<a name="command-options"></a>

Elastic Beanstalk에서는 환경의 동작과 환경에 포함된 리소스를 구성하는 데 사용할 수 있는 많은 구성 옵션을 정의합니다. 구성 옵션은 환경의 Auto Scaling 그룹에 대한 옵션을 정의하는 `aws:autoscaling:asg`와 같은 네임스페이스로 구성됩니다.

Elastic Beanstalk 콘솔 및 EB CLI는 사용자가 환경을 생성할 때 사용자가 명시적으로 설정한 옵션을 비롯한 구성 옵션과 클라이언트가 정의한 [권장 값](#configuration-options-recommendedvalues)을 설정합니다. 또한 저장된 구성 및 구성 파일에서 구성 옵션을 설정할 수도 있습니다. 여러 위치에 동일한 옵션이 설정되어 있는 경우 사용되는 값은 [우선 순위](#configuration-options-precedence)에 따라 결정됩니다.

구성 옵션 설정은 텍스트 형식으로 구성하고 환경을 생성하기 전에 저장할 수 있으며, 지원되는 모든 클라이언트를 사용하여 환경을 생성하는 동안 적용할 수 있고, 환경을 생성한 후 추가, 수정 또는 제거할 수 있습니다. 이러한 각 세 단계에서 구성 옵션 작업에 사용할 수 있는 모든 방법에 대한 세부 분석은 다음 주제를 참조하세요.
+ [환경 생성 이전에 구성 옵션 설정](environment-configuration-methods-before.md)
+ [환경 생성 중 구성 옵션 설정](environment-configuration-methods-during.md)
+ [환경 생성 후 구성 옵션 설정](environment-configuration-methods-after.md)

네임스페이스 및 옵션의 전체 목록(각각의 기본값 및 지원되는 값 포함)은 [모든 환경의 일반 옵션](command-options-general.md) 및 [플랫폼별 옵션](command-options-specific.md) 단원을 참조하세요.

## 우선 순위
<a name="configuration-options-precedence"></a>

환경을 생성하는 동안 구성 옵션은 가장 높은 우선 순위에서 가장 낮은 우선 순위로 여러 원본에서 적용됩니다.
+ **환경에 직접 적용되는 설정** - Elastic Beanstalk 콘솔, EB CLI AWS CLI및 SDKs. 또한 Elastic Beanstalk 콘솔 및 EB CLI는 재정의되지 않는 한 이 수준에서 적용되는 일부 옵션에 [권장 값](#configuration-options-recommendedvalues)을 적용합니다.
+ **저장된 구성** – 환경에 직접 적용되지 않는 모든 옵션의 설정은 저장된 구성에서 로드됩니다(지정한 경우).
+ **구성 파일(.ebextensions)** – 환경에 직접 적용되지 않으며 또한 저장된 구성에도 지정되지 않은 모든 옵션의 설정은 애플리케이션 소스 번들의 루트에 있는 `.ebextensions` 폴더의 구성 파일에서 로드됩니다.

  구성 파일은 사전순으로 실행됩니다. 예를 들어, `.ebextensions/01run.config`는 `.ebextensions/02do.config` 이전에 실행됩니다.
+ **기본값** – 구성 옵션에 기본값이 있는 경우, 옵션이 위 수준 중 하나로 설정되지 않은 경우에만 적용됩니다.

두 개 이상의 위치에 동일한 구성 옵션이 정의된 경우, 우선 순위가 가장 높은 설정이 적용됩니다. 설정이 저장된 구성에서 적용되거나 환경에 직접 적용된 경우, 해당 설정은 환경의 구성 일부로 저장됩니다. 이러한 설정은 [AWS CLI를 사용하거나](environment-configuration-methods-after.md#configuration-options-remove-awscli) [EB CLI를 사용하여](environment-configuration-methods-after.md#configuration-options-remove-ebcli) 제거할 수 있습니다.

구성 파일의 설정은 환경에 직접 적용되지 않으므로 구성 파일을 수정하고 새 애플리케이션 버전을 배포하지 않고는 제거할 수 없습니다. 다른 방법 중 하나로 적용된 설정을 제거하면 동일한 설정이 소스 번들의 구성 파일에서 로드됩니다.

예를 들어, 환경을 생성하는 동안 Elastic Beanstalk 콘솔, 명령줄 옵션 또는 저장된 구성을 사용하여 환경의 최소 인스턴스 수를 5로 설정했다고 가정하겠습니다. 또한 애플리케이션의 소스 번들에는 최소 인스턴스 수를 2로 설정한 구성 파일이 들어 있습니다.

사용자가 환경을 생성할 때 Elastic Beanstalk는 `MinSize` 네임스페이스의 `aws:autoscaling:asg` 옵션을 5로 설정합니다. 그런 다음 환경 구성에서 이 옵션을 제거하면 구성 파일의 값이 로드되므로 최소 인스턴스 수는 2로 설정됩니다. 그런 다음 소스 번들에서 구성 파일을 제거하고 재배포하면 Elastic Beanstalk는 기본 설정인 1을 사용합니다.

## 권장 값
<a name="configuration-options-recommendedvalues"></a>

Elastic Beanstalk 명령줄 인터페이스(EB CLI)와 Elastic Beanstalk 콘솔은 일부 구성 옵션에 권장 값을 제공합니다. 이러한 값은 기본값과 다를 수 있으며, 환경을 생성할 때 API 수준에서 설정됩니다. Elastic Beanstalk는 권장 값을 사용하여 API를 이전 버전과 호환되지 않게 변경하지 않고 기본 환경 구성을 개선할 수 있습니다.

예를 들어, EB CLI와 Elastic Beanstalk 콘솔 모두 EC2 인스턴스 유형(`InstanceType` 네임스페이스의 `aws:autoscaling:launchconfiguration`)의 구성 옵션을 설정합니다. 각 클라이언트는 기본 설정을 재정의하는 다른 방법을 제공합니다. 콘솔에서 **새 환경 생성** 마법사의 **구성 세부 정보** 페이지에 있는 드롭다운 메뉴에서 다른 인스턴스 유형을 선택할 수 있습니다. EB CLI에서 [`--instance_type`](eb3-create.md)용 **eb create** 파라미터를 사용할 수 있습니다.

권장 값은 API 수준에서 설정되므로 사용자가 구성 파일 또는 저장된 구성에서 설정한 동일한 옵션의 값을 재정의합니다. 다음 옵션이 설정됩니다.

**Elastic Beanstalk 콘솔**
+ 네임스페이스: `aws:autoscaling:launchconfiguration`

  옵션 이름: `IamInstanceProfile`, `EC2KeyName`, `InstanceType` 
+ 네임스페이스: `aws:autoscaling:updatepolicy:rollingupdate`

  옵션 이름: `RollingUpdateType` 및 `RollingUpdateEnabled`
+ 네임스페이스: `aws:elasticbeanstalk:application`

  옵션 이름: `Application Healthcheck URL`
+ 네임스페이스: `aws:elasticbeanstalk:command`

  옵션 이름: `DeploymentPolicy`, `BatchSize` 및 `BatchSizeType`
+ 네임스페이스: `aws:elasticbeanstalk:environment`

  옵션 이름: `ServiceRole`
+ 네임스페이스: `aws:elasticbeanstalk:healthreporting:system`

  옵션 이름: `SystemType` 및 `HealthCheckSuccessThreshold`
+ 네임스페이스: `aws:elasticbeanstalk:sns:topics`

  옵션 이름: `Notification Endpoint`
+ 네임스페이스: `aws:elasticbeanstalk:sqsd`

  옵션 이름: `HttpConnections`
+ 네임스페이스: `aws:elb:loadbalancer`

  옵션 이름: `CrossZone`
+ 네임스페이스: `aws:elb:policies`

  옵션 이름: `ConnectionDrainingTimeout` 및 `ConnectionDrainingEnabled`

**EB CLI**
+ 네임스페이스: `aws:autoscaling:launchconfiguration`

  옵션 이름: `IamInstanceProfile`, `InstanceType` 
+ 네임스페이스: `aws:autoscaling:updatepolicy:rollingupdate`

  옵션 이름: `RollingUpdateType` 및 `RollingUpdateEnabled`
+ 네임스페이스: `aws:elasticbeanstalk:command`

  옵션 이름: `BatchSize` 및 `BatchSizeType`
+ 네임스페이스: `aws:elasticbeanstalk:environment`

  옵션 이름: `ServiceRole`
+ 네임스페이스: `aws:elasticbeanstalk:healthreporting:system`

  옵션 이름: `SystemType`
+ 네임스페이스: `aws:elb:loadbalancer`

  옵션 이름: `CrossZone`
+ 네임스페이스: `aws:elb:policies`

  옵션 이름: `ConnectionDrainingEnabled`

# 환경 생성 이전에 구성 옵션 설정
<a name="environment-configuration-methods-before"></a>

AWS Elastic Beanstalk 는 환경의 리소스에 적용되는 설정을 수정할 수 있는 다양한 [구성 옵션을](command-options.md) 지원합니다. 이러한 옵션 중 여러 개에는 기본값이 있는데, 이러한 값은 환경을 사용자 지정하기 위해 재정의할 수 있습니다. 다른 옵션은 추가 기능을 활성화하도록 구성할 수 있습니다.

Elastic Beanstalk에서는 구성 옵션 설정을 저장하는 두 가지 방법을 지원합니다. YAML 또는 JSON 형식의 구성 파일은 `.ebextensions` 디렉터리의 애플리케이션 소스 코드에 포함할 수 있으며 애플리케이션 소스 번들의 일부로 배포할 수 있습니다. 구성 파일은 로컬에서 생성 및 관리할 수 있습니다.

저장된 구성은 실행 중인 환경 또는 JSON 옵션에서 생성할 수 있는 템플릿으로 Elastic Beanstalk에 저장됩니다. 또한 기존의 저장된 구성은 새 구성을 생성하여 확장할 수도 있습니다.

**참고**  
구성 파일 및 저장된 구성에 정의된 설정보다 Elastic Beanstalk 콘솔 및 [EB CLI](eb-cli3.md)에서 적용되는 권장 값을 비롯하여 환경을 생성하는 중 또는 이후에 구성된 설정이 우선합니다. 세부 정보는 [우선 순위](command-options.md#configuration-options-precedence) 단원을 참조하세요.

또한 EB CLI 또는 AWS CLI를 사용해 환경을 생성 또는 업데이트하는 경우 옵션을 JSON 문서에서 지정하여 Elastic Beanstalk에 바로 제공할 수도 있습니다. 이러한 방식으로 Elastic Beanstalk에 직접 제공되는 옵션은 기타 모든 방법을 재정의합니다.

사용 가능한 옵션의 전체 목록은 [구성 옵션](command-options.md) 단원을 참조하세요.

**Topics**
+ [구성 파일(`.ebextensions`)](#configuration-options-before-ebextensions)
+ [저장된 구성](#configuration-options-before-savedconfig)
+ [JSON 문서](#configuration-options-before-json)
+ [EB CLI 구성](#configuration-options-before-configyml)

## 구성 파일(`.ebextensions`)
<a name="configuration-options-before-ebextensions"></a>

`.ebextensions`를 사용하여 애플리케이션을 작동하는 데 필요한 옵션을 구성하고 가장 높은 [우선 순위](command-options.md#configuration-options-precedence)에서 재정의할 수 있는 다른 옵션에 기본값을 제공합니다. `.ebextensions`에 지정된 옵션의 우선 순위가 가장 낮아 다른 모든 수준의 설정으로 재정의됩니다.

구성 파일을 사용하려면 프로젝트 소스 코드의 최상위 수준에서 `.ebextensions` 폴더를 만듭니다. 확장명이 `.config`인 파일을 추가하고 다음 방법으로 옵션을 지정합니다.

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

예를 들어 다음 구성 파일은 애플리케이션의 상태 확인 URL을 `/health`로 설정합니다.

`healthcheckurl.config`

```
option_settings:
  - namespace:  aws:elasticbeanstalk:application
    option_name:  Application Healthcheck URL
    value:  /health
```

JSON은 다음과 같습니다.

```
{
 "option_settings" :
    [
      {
        "namespace" : "aws:elasticbeanstalk:application",
        "option_name" : "Application Healthcheck URL",
        "value" : "/health"
      }
    ]
}
```

이 예제는 EC2 인스턴스가 정상 또는 비정상인지 확인하기 위해 각 EC2 인스턴스의 `/health` 경로에 대해 HTTP 요청을 생성하도록 Elastic Beanstalk 환경에서 Elastic Load Balancing 로드 밸런서를 구성합니다.

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

[애플리케이션 소스 번들](applications-sourcebundle.md)에 `.ebextensions` 디렉터리를 포함하여 새로운 또는 Elastic Beanstalk 환경에 배포합니다.

구성 파일은 환경의 서버에서 실행되는 소프트웨어 및 파일을 사용자 지정하기 위해 `option_settings` 이외에 여러 섹션을 지원합니다. 자세한 내용은 [.Ebextensions](ebextensions.md)을(를) 참조하세요.

## 저장된 구성
<a name="configuration-options-before-savedconfig"></a>

저장된 구성을 생성하면 Elastic Beanstalk 콘솔, EB CLI 또는 AWS CLI를 사용하여 환경을 생성하는 중 또는 이후에 기존 환경에 적용한 설정을 저장할 수 있습니다. 저장된 구성은 애플리케이션에 속하며 해당 애플리케이션의 새로운 또는 기존 환경에 적용할 수 있습니다.

**Topics**
+ [Elastic Beanstalk 콘솔](#configuration-options-before-savedconfig-console)
+ [EB CLI](#configuration-options-before-savedconfig-ebcli)
+ [AWS CLI](#configuration-options-before-savedconfig-awscli)

### Elastic Beanstalk 콘솔
<a name="configuration-options-before-savedconfig-console"></a>

**저장된 구성을 생성하려면(Elastic Beanstalk 콘솔)**

1. [Elastic Beanstalk 콘솔](https://console.aws.amazon.com/elasticbeanstalk)을 열고 **리전** 목록에서를 선택합니다 AWS 리전.

1. 탐색 창에서 **환경**을 선택한 다음 목록에서 환경의 이름을 선택합니다.

1. **작업(Actions)**을 선택한 후 **구성 저장(Save configuration)**을 선택합니다.

1. 화면에 표시되는 대화 상자를 사용하여 작업을 완료합니다.

저장된 구성은 Elastic Beanstalk S3 버킷에서 애플리케이션을 따라 이름이 지정된 폴더에 저장됩니다. 예를 들어, 계정 번호 123456789012에 대한 us-west-2 리전 내 `my-app` 애플리케이션의 구성은 `s3://elasticbeanstalk-us-west-2-123456789012/resources/templates/my-app`에서 찾을 수 있습니다.

### EB CLI
<a name="configuration-options-before-savedconfig-ebcli"></a>

[EB CLI](eb-cli3.md)도 [**eb config**](eb3-config.md)에서 저장된 구성과 상호 작용하기 위한 하위 명령을 제공합니다.

**저장된 구성을 생성하려면(EB CLI)**

1. 연결된 환경의 현재 구성을 저장합니다.

   ```
   ~/project$ eb config save --cfg my-app-v1
   ```

   EB CLI는 구성을 `~/project/.elasticbeanstalk/saved_configs/my-app-v1.cfg.yml`에 저장합니다.

1. 필요한 경우 저장된 구성을 로컬에서 수정합니다.

1. 저장된 구성을 S3로 업로드합니다.

   ```
   ~/project$ eb config put my-app-v1
   ```

### AWS CLI
<a name="configuration-options-before-savedconfig-awscli"></a>

`aws elasticbeanstalk create-configuration-template`을 사용하여 실행 중인 환경에서 저장된 구성을 생성합니다.

**저장된 구성 생성(AWS CLI)**

1. `describe-environments`를 사용하여 Elastic Beanstalk 환경의 환경 ID를 식별합니다.

   ```
   $ aws elasticbeanstalk describe-environments --environment-name my-env
   {
       "Environments": [
           {
               "ApplicationName": "my-env",
               "EnvironmentName": "my-env",
               "VersionLabel": "89df",
               "Status": "Ready",
               "Description": "Environment created from the EB CLI using \"eb create\"",
               "EnvironmentId": "e-vcghmm2zwk",
               "EndpointURL": "awseb-e-v-AWSEBLoa-1JUM8159RA11M-43V6ZI1194.us-west-2.elb.amazonaws.com",
               "SolutionStackName": "64bit Amazon Linux 2015.03 v2.0.2 running Multi-container Docker 1.7.1 (Generic)",
               "CNAME": "my-env-nfptuqaper.elasticbeanstalk.com",
               "Health": "Green",
               "AbortableOperationInProgress": false,
               "Tier": {
                   "Version": " ",
                   "Type": "Standard",
                   "Name": "WebServer"
               },
               "HealthStatus": "Ok",
               "DateUpdated": "2015-10-01T00:24:04.045Z",
               "DateCreated": "2015-09-30T23:27:55.768Z"
           }
       ]
   }
   ```

1. `create-configuration-template`을 사용하여 환경의 현재 구성을 저장합니다.

   ```
   $ aws elasticbeanstalk create-configuration-template --environment-id e-vcghmm2zwk --application-name my-app --template-name v1
   ```

Elastic Beanstalk는 구성을 Amazon S3의 Elastic Beanstalk 버킷에 저장합니다.

## JSON 문서
<a name="configuration-options-before-json"></a>

 AWS CLI 를 사용하여 환경을 생성하고 업데이트하는 경우 JSON 형식으로 구성 옵션을 제공할 수도 있습니다. JSON 형식의 구성 파일 라이브러리는 AWS CLI 를 사용하여 환경을 생성하고 관리하는 경우에 유용합니다.

예를 들어 다음 JSON 문서는 애플리케이션의 상태 확인 URL을 `/health`로 설정합니다.

**\$1/ebconfigs/healthcheckurl.json**

```
[
  {
    "Namespace": "aws:elasticbeanstalk:application",
    "OptionName": "Application Healthcheck URL",
    "Value": "/health"
  }
]
```

## EB CLI 구성
<a name="configuration-options-before-configyml"></a>

**eb config** 명령을 통해 저장된 구성 및 직접 환경 구성을 지원하는 것 이외에도 EB CLI에는 `default_ec2_keyname` 옵션이 포함된 구성 파일이 있습니다. 이 옵션은 환경의 인스턴스에 대한 SSH 액세스에 필요한 Amazon EC2 키 페어를 지정하는 데 사용할 수 있습니다. EB CLI에서는 이 옵션을 사용하여 `EC2KeyName` 네임스페이스에서 `aws:autoscaling:launchconfiguration` 구성 옵션을 설정합니다.

**\$1/workspace/my-app/.elasticbeanstalk/config.yml**

```
branch-defaults:
  master:
    environment: my-env
  develop:
    environment: my-env-dev
deploy:
  artifact: ROOT.war
global:
  application_name: my-app
  default_ec2_keyname: my-keypair
  default_platform: Tomcat 8 Java 8
  default_region: us-west-2
  profile: null
  sc: git
```

# 환경 생성 중 구성 옵션 설정
<a name="environment-configuration-methods-during"></a>

Elastic Beanstalk 콘솔, EB CLI AWS CLI, SDK 또는 Elastic Beanstalk API를 사용하여 AWS Elastic Beanstalk 환경을 생성할 때 구성 옵션 값을 제공하여 환경과 환경 내에서 시작되는 AWS 리소스를 사용자 지정할 수 있습니다.

임시 구성 변경이 아닌 항목의 경우 로컬, 소스 번들 또는 Amazon S3에 [구성 파일을 저장](environment-configuration-methods-before.md)할 수 있습니다.

이 주제에는 환경이 생성되는 동안 구성 옵션을 설정하는 모든 방법에 대한 절차가 포함되어 있습니다.

**Topics**
+ [Elastic Beanstalk 콘솔](#configuration-options-during-console)
+ [EB CLI 사용](#configuration-options-during-ebcli)
+ [사용 AWS CLI](#configuration-options-during-awscli)

## Elastic Beanstalk 콘솔
<a name="configuration-options-during-console"></a>

Elastic Beanstalk 콘솔에 Elastic Beanstalk 환경을 생성할 때 **새 환경 생성** 마법사의 양식, 구성 파일, 저장된 구성을 사용하여 구성 옵션을 제공할 수 있습니다.

**Topics**
+ [구성 파일(`.ebextensions`) 사용](#configuration-options-during-console-ebextensions)
+ [저장된 구성 사용](#configuration-options-during-console-savedconfig)
+ [새 환경 마법사 사용](#configuration-options-during-console-wizard)

### 구성 파일(`.ebextensions`) 사용
<a name="configuration-options-during-console-ebextensions"></a>

이름이 `.config`인 폴더에 있는 [애플리케이션 소스 번들](applications-sourcebundle.md)에 `.ebextensions` 파일을 포함합니다.

구성 파일에 대한 자세한 내용은 [.Ebextensions](ebextensions.md) 단원을 참조하세요.

```
~/workspace/my-app-v1.zip
|-- .ebextensions
|   |-- environmentvariables.config
|   `-- healthcheckurl.config
|-- index.php
`-- styles.css
```

[환경 생성](using-features.environments.md) 중에 소스 번들을 Elastic Beanstalk에 정상적으로 업로드합니다.

Elastic Beanstalk 콘솔은 일부 구성 옵션에 대해 [권장 값](command-options.md#configuration-options-recommendedvalues)을 적용하며, 나머지 구성 옵션의 양식 필드를 갖추고 있습니다. Elastic Beanstalk 콘솔에서 구성된 옵션은 환경에 직접 적용되며 구성 파일의 설정을 재정의합니다.

### 저장된 구성 사용
<a name="configuration-options-during-console-savedconfig"></a>

Elastic Beanstalk 콘솔을 사용하여 새 환경을 생성할 때 첫 단계 중 하나는 구성을 선택하는 것입니다. 구성은 [**미리 정의된 구성**](concepts.platforms.md), 일반적으로 **PHP** 또는 **Tomcat** 등의 최신 플랫폼 버전이나 **저장된 구성**일 수 있습니다.

**환경을 생성하는 동안 저장된 구성을 적용하려면(Elastic Beanstalk 콘솔)**

1. [Elastic Beanstalk 콘솔](https://console.aws.amazon.com/elasticbeanstalk)을 열고 **리전** 목록에서를 선택합니다 AWS 리전.

1. 탐색 창에서 **애플리케이션**을 선택한 다음 목록에서 애플리케이션의 이름을 선택합니다.

1. 탐색 창에서 애플리케이션 이름을 찾은 다음 **저장된 구성**을 선택합니다.

1. 적용할 저장된 구성을 선택한 다음 [**Launch environment**]를 선택합니다.

1. 마법사를 진행하여 환경을 생성합니다.

저장된 구성은 애플리케이션에 따라 다릅니다. 저장된 구성의 생성에 대한 상세한 내용은 [저장된 구성](environment-configuration-methods-before.md#configuration-options-before-savedconfig) 단원을 참조하세요.

### 새 환경 마법사 사용
<a name="configuration-options-during-console-wizard"></a>

표준 구성 옵션의 대부분은 [새 환경 생성 마법사 생성](environments-create-wizard.md)의 **추가 옵션 구성** 페이지에 나와 있습니다. Amazon RDS 데이터베이스를 생성하거나 환경에 대한 VPC를 구성하는 경우, 해당 리소스에 대한 페이지에서 추가 구성 옵션을 확인할 수 있습니다.

**환경을 생성하는 동안 구성 옵션을 설정하려면(Elastic Beanstalk 콘솔)**

1. [Elastic Beanstalk 콘솔](https://console.aws.amazon.com/elasticbeanstalk)을 열고 **리전** 목록에서를 선택합니다 AWS 리전.

1. 탐색 창에서 [**애플리케이션**]을 선택합니다.

1. 애플리케이션을 선택하거나 [생성](applications.md)합니다.

1. [**작업**]을 선택한 후 [**환경 생성**]을 선택합니다.

1. 마법사를 진행하여 **추가 옵션 구성**을 선택합니다.

1. **구성 사전 설정** 중 하나를 선택한 다음 하나 이상의 구성 범주에서 [**편집**]을 선택하여 관련 구성 옵션 그룹을 변경합니다.

1. 옵션을 선택한 다음 **환경 생성**을 선택합니다.

새 환경 마법사에서 설정하는 모든 옵션은 환경에 직접 설정하며, 적용할 구성 파일(`.ebextensions`)이나 저장된 구성의 옵션 설정을 재정의합니다. [EB CLI](environment-configuration-methods-after.md#configuration-options-after-ebcli) 또는 [AWS CLI](environment-configuration-methods-after.md#configuration-options-after-awscli)로 환경을 생성한 후 해당 설정을 제거하여 저장된 구성 파일의 설정이 표시되게 할 수 있습니다.

새 환경 마법사에 대한 자세한 내용은 [새 환경 생성 마법사](environments-create-wizard.md) 단원을 참조하세요.

## EB CLI 사용
<a name="configuration-options-during-ebcli"></a>

**Topics**
+ [구성 파일(`.ebextensions`) 사용](#configuration-options-during-ebcli-ebextensions)
+ [저장된 구성 사용](#configuration-options-during-ebcli-savedconfig)
+ [명령줄 옵션 사용](#configuration-options-during-ebcli-params)

### 구성 파일(`.ebextensions`) 사용
<a name="configuration-options-during-ebcli-ebextensions"></a>

`.config`의 프로젝트 폴더에 `.ebextensions` 파일을 넣어 애플리케이션 코드와 함께 배포합니다.

구성 파일에 대한 자세한 내용은 [.Ebextensions](ebextensions.md) 단원을 참조하세요.

```
~/workspace/my-app/
|-- .ebextensions
|   |-- environmentvariables.config
|   `-- healthcheckurl.config
|-- .elasticbeanstalk
|   `-- config.yml
|-- index.php
`-- styles.css
```

환경을 생성하고 **eb create**로 소스 코드를 환경에 배포합니다.

```
~/workspace/my-app$ eb create my-env
```

### 저장된 구성 사용
<a name="configuration-options-during-ebcli-savedconfig"></a>

[**eb create**](eb3-create.md)로 환경을 생성할 때 저장된 구성을 적용하려면 `--cfg` 옵션을 사용합니다.

```
~/workspace/my-app$ eb create --cfg savedconfig
```

저장된 구성을 Amazon S3의 Elastic Beanstalk 저장 위치 또는 프로젝트 폴더에 저장할 수 있습니다. 이전 예에서 EB CLI는 `savedconfig.cfg.yml` 폴더의 `.elasticbeanstalk/saved_configs/`이라는 저장된 구성 파일을 먼저 찾습니다. `.cfg.yml`로 저장된 구성을 적용할 때 파일 이름 확장명(`--cfg`)을 포함하지 마세요.

```
~/workspace/my-app/
|-- .ebextensions
|   `-- healthcheckurl.config
|-- .elasticbeanstalk
|   |-- saved_configs
|   |   `-- savedconfig.cfg.yml
|   `-- config.yml
|-- index.php
`-- styles.css
```

EB CLI가 로컬에서 구성을 찾지 못할 경우 Amazon S3의 Elastic Beanstalk 저장 위치에서 확인합니다. 저장된 구성의 생성, 편집 및 업로드에 대한 자세한 내용은 [저장된 구성](environment-configuration-methods-before.md#configuration-options-before-savedconfig) 단원을 참조하세요.

### 명령줄 옵션 사용
<a name="configuration-options-during-ebcli-params"></a>

EB CLI **eb create** 명령에는 환경을 생성하는 동안 구성 옵션을 설정하는 데 사용할 수 있는 여러 [옵션](eb3-create.md#eb3-createoptions)이 있습니다. 이 옵션은 환경에 RDS 데이터베이스를 추가하거나 VPC를 구성하거나 [권장 값](command-options.md#configuration-options-recommendedvalues)을 재정의하는 데 사용할 수 있습니다.

예를 들어 EB CLI는 기본적으로 `t2.micro` 인스턴스 유형을 사용합니다. 다른 인스턴스 유형을 선택하려면 `--instance_type` 옵션을 사용합니다.

```
$ eb create my-env --instance_type t2.medium
```

Amazon RDS 데이터베이스 인스턴스를 생성하여 환경에 연결하려면 `--database` 옵션을 사용합니다.

```
$ eb create --database.engine postgres --database.username dbuser
```

환경 이름, 데이터베이스 암호 또는 환경을 생성하는 데 필요한 기타 모든 파라미터를 제거하는 경우 EB CLI에는 해당 사항을 입력하라는 메시지가 표시됩니다.

사용 가능한 옵션 및 사용 예의 전체 목록은 [eb create](eb3-create.md)를 참조하세요.

## 사용 AWS CLI
<a name="configuration-options-during-awscli"></a>

`create-environment` 명령을 사용하여를 사용하여 Elastic Beanstalk 환경을 생성하는 경우 AWS CLI는 [권장 값을](command-options.md#configuration-options-recommendedvalues) 적용하지 AWS CLI 않습니다. 모든 구성 옵션은 지정한 소스 번들의 구성 파일에 정의되어 있습니다.

**Topics**
+ [구성 파일(`.ebextensions`) 사용](#configuration-options-during-awscli-ebextensions)
+ [저장된 구성 사용](#configuration-options-during-awscli-savedconfig)
+ [명령줄 옵션 사용](#configuration-options-during-awscli-params)

### 구성 파일(`.ebextensions`) 사용
<a name="configuration-options-during-awscli-ebextensions"></a>

를 사용하여 생성하는 환경에 구성 파일을 적용하려면 Amazon S3에 업로드하는 애플리케이션 소스 번들에 AWS CLI포함합니다.

구성 파일에 대한 자세한 내용은 [.Ebextensions](ebextensions.md) 단원을 참조하세요.

```
~/workspace/my-app-v1.zip
|-- .ebextensions
|   |-- environmentvariables.config
|   `-- healthcheckurl.config
|-- index.php
`-- styles.css
```

**애플리케이션 소스 번들을 업로드하고를 사용하여 환경을 생성하려면 AWS CLI**

1. 아직 Amazon S3의 Elastic Beanstalk 버킷이 없는 경우 `create-storage-location`으로 한 개를 생성합니다.

   ```
   $ aws elasticbeanstalk create-storage-location
   {
       "S3Bucket": "elasticbeanstalk-us-west-2-123456789012"
   }
   ```

1. 애플리케이션 소스 번들을 Amazon S3에 업로드합니다.

   ```
   $ aws s3 cp sourcebundle.zip s3://elasticbeanstalk-us-west-2-123456789012/my-app/sourcebundle.zip
   ```

1. 애플리케이션 버전 생성.

   ```
   $ aws elasticbeanstalk create-application-version --application-name my-app --version-label v1 --description MyAppv1 --source-bundle S3Bucket="elasticbeanstalk-us-west-2-123456789012",S3Key="my-app/sourcebundle.zip" --auto-create-application
   ```

1. 환경 생성

   ```
   $ aws elasticbeanstalk create-environment --application-name my-app --environment-name my-env --version-label v1 --solution-stack-name "64bit Amazon Linux 2015.03 v2.0.0 running Tomcat 8 Java 8"
   ```

### 저장된 구성 사용
<a name="configuration-options-during-awscli-savedconfig"></a>

생성 중 저장된 구성을 환경에 적용하려면 `--template-name` 파라미터를 사용합니다.

```
$ aws elasticbeanstalk create-environment --application-name my-app --environment-name my-env --template-name savedconfig --version-label v1
```

저장된 구성을 지정할 때 솔루션 스택 이름은 지정하지 마세요. 저장된 구성에 이미 솔루션 스택이 지정되어 있으며 두 옵션을 사용하려고 하는 경우 Elastic Beanstalk는 오류를 반환합니다.

### 명령줄 옵션 사용
<a name="configuration-options-during-awscli-params"></a>

`--option-settings` 파라미터를 사용하여 JSON 형식으로 구성 옵션을 지정합니다.

```
$ aws elasticbeanstalk create-environment --application-name my-app --environment-name my-env --version-label v1 --template-name savedconfig --option-settings '[
  {
    "Namespace": "aws:elasticbeanstalk:application",
    "OptionName": "Application Healthcheck URL",
    "Value": "/health"
  }
]
```

파일에서 JSON을 로드하려면 `file://` 접두사를 사용합니다.

```
$ aws elasticbeanstalk create-environment --application-name my-app --environment-name my-env --version-label v1 --template-name savedconfig --option-settings file://healthcheckurl.json
```

Elastic Beanstalk는 `--option-settings` 옵션으로 지정한 옵션 설정을 환경에 직접 적용합니다. 저장된 구성이나 저장된 파일에 동일한 옵션을 지정한 경우, `--option-settings`가 해당 값을 재정의합니다.

# 환경 생성 후 구성 옵션 설정
<a name="environment-configuration-methods-after"></a>

저장된 구성을 적용하거나, 구성 파일과 함께 새 소스 번들(`.ebextensions`)을 업로드하거나, JSON 문서를 사용하여 실행 중인 환경에서 옵션 설정을 수정할 수 있습니다. EB CLI 및 Elastic Beanstalk 콘솔에는 클라이언트별로 구성 옵션을 설정하고 업데이트하는 기능도 있습니다.

구성 옵션을 설정하거나 변경할 때 변경의 심각도에 따라 전체 환경 업데이트를 트리거할 수 있습니다. 예를 들어 [`aws:autoscaling:launchconfiguration`](command-options-general.md#command-options-general-autoscalinglaunchconfiguration)에서 `InstanceType`과 같은 옵션을 변경하려면 환경의 Amazon EC2 인스턴스가 다시 프로비저닝되어야 합니다. 그러면 [롤링 업데이트](using-features.rollingupdates.md)가 트리거됩니다. 다시 프로비저닝하거나 중단하지 않고도 다른 구성 변경을 적용할 수 있습니다.

EB CLI 또는 AWS CLI 명령을 사용하여 환경에서 옵션 설정을 제거할 수 있습니다. API 수준에서 환경에 직접 설정된 옵션을 제거하면 구성 파일의 설정이 적용됩니다. 이러한 구성 파일의 설정은 원래 해당 환경에 직접 적용된 다른 설정에 의해 마스킹되는 설정입니다.

해당 환경에서 다른 구성 방법 중 하나로 직접 동일한 옵션을 설정하여 저장된 구성 및 구성 파일의 설정을 재정의할 수 있습니다. 하지만 업데이트한 저장된 구성 또는 구성 파일을 적용해야만 이러한 설정을 완전히 제거할 수 있습니다. 저장된 구성이나 구성 파일에 또는 환경에 직접 옵션이 설정되어 있지 않으면 기본값이 적용됩니다(있을 경우). 세부 정보는 [우선 순위](command-options.md#configuration-options-precedence) 단원을 참조하세요.

**Topics**
+ [Elastic Beanstalk 콘솔](#configuration-options-after-console)
+ [EB CLI](#configuration-options-after-ebcli)
+ [는 AWS CLI](#configuration-options-after-awscli)

## Elastic Beanstalk 콘솔
<a name="configuration-options-after-console"></a>

구성 파일을 포함하는 애플리케이션 소스 번들을 배포하거나, 저장된 구성을 적용하거나, 환경 관리 콘솔의 **구성** 페이지에서 바로 환경을 수정하여 Elastic Beanstalk 콘솔에 구성 옵션 설정을 업데이트할 수 있습니다.

**Topics**
+ [구성 파일(`.ebextensions`) 사용](#configuration-options-after-console-ebextensions)
+ [저장된 구성 사용](#configuration-options-after-console-savedconfig)
+ [Elastic Beanstalk 콘솔 사용](#configuration-options-after-console-configpage)

### 구성 파일(`.ebextensions`) 사용
<a name="configuration-options-after-console-ebextensions"></a>

원본 디렉터리에 구성 파일을 업데이트하고, 새 소스 번들을 만든 후, 새 버전을 Elastic Beanstalk 환경에 배포하여 변경 사항을 적용합니다.

구성 파일에 대한 자세한 내용은 [.Ebextensions](ebextensions.md) 단원을 참조하세요.

**소스 번들을 배포하려면**

1. [Elastic Beanstalk 콘솔](https://console.aws.amazon.com/elasticbeanstalk)을 열고 **리전** 목록에서를 선택합니다 AWS 리전.

1. 탐색 창에서 **환경**을 선택한 다음 목록에서 환경의 이름을 선택합니다.

1. 환경 개요 페이지에서 [**업로드 및 배포**]를 선택합니다.

1. 화면에 표시되는 대화 상자를 사용하여 소스 번들을 업로드합니다.

1. **배포(Deploy)**를 선택합니다.

1. 배포가 완료되면 사이트 URL을 선택하여 새 탭에서 웹 사이트를 열 수 있습니다.

구성 파일의 변경 사항은 API 수준으로 환경에 바로 적용되는 설정 또는 저장된 구성의 옵션 설정을 재정의하지 않습니다. 자세한 내용은 [우선 순위](command-options.md#configuration-options-precedence)를 참조하세요.

### 저장된 구성 사용
<a name="configuration-options-after-console-savedconfig"></a>

저장된 설정을 실행 중인 환경에 적용하여 이 설정에 정의된 옵션을 적용합니다.

**실행 중인 환경에 저장된 구성을 적용하려면(Elastic Beanstalk 콘솔)**

1. [Elastic Beanstalk 콘솔](https://console.aws.amazon.com/elasticbeanstalk)을 열고 **리전** 목록에서를 선택합니다 AWS 리전.

1. 탐색 창에서 **애플리케이션**을 선택한 다음 목록에서 애플리케이션의 이름을 선택합니다.

1. 탐색 창에서 애플리케이션 이름을 찾은 다음 **저장된 구성**을 선택합니다.

1. 적용할 저장된 구성을 선택한 다음 [**로드**]를 선택합니다.

1. 환경을 선택한 후 **로드**를 선택합니다.

저장된 구성에 정의되어 있는 설정이 구성 파일의 설정보다 우선하며, 환경 관리 콘솔에서 구성한 설정이 그보다 우선합니다.

저장된 구성의 생성에 대한 상세한 내용은 [저장된 구성](environment-configuration-methods-before.md#configuration-options-before-savedconfig) 단원을 참조하세요.

### Elastic Beanstalk 콘솔 사용
<a name="configuration-options-after-console-configpage"></a>

Elastic Beanstalk 콘솔은 **구성** 페이지에 각 환경을 위한 여러 가지 구성 옵션을 제공합니다.

**실행 중인 환경에서 구성 옵션을 변경하려면(Elastic Beanstalk 콘솔)**

1. [Elastic Beanstalk 콘솔](https://console.aws.amazon.com/elasticbeanstalk)을 열고 **리전** 목록에서를 선택합니다 AWS 리전.

1. 탐색 창에서 **환경**을 선택한 다음 목록에서 환경의 이름을 선택합니다.

1. 탐색 창에서 **구성**을 선택합니다.

1. 편집하려는 구성 페이지를 찾습니다.
   + 관심이 있는 옵션을 찾은 경우 또는 해당 옵션이 있는 구성 범주를 알고 있는 경우 이에 대한 구성 범주에서 [**편집**]을 선택합니다.
   + 옵션을 찾으려면 **Table View(테이블 보기)**를 설정한 후 검색 상자에 검색어를 입력합니다. 입력하면 목록이 짧아지고 검색어와 일치하는 옵션만 표시됩니다.

     찾고 있는 옵션이 표시되면 해당 옵션이 있는 구성 범주에서 [**편집**]을 선택합니다.  
![\[옵션 검색을 보여주는 Elastic Beanstalk 콘솔 구성 개요 페이지의 테이블 보기\]](http://docs.aws.amazon.com/ko_kr/elasticbeanstalk/latest/dg/images/environments-cfg-console.overview.table.search1.png)

1. 설정을 변경한 후 **저장**을 선택합니다.

1. 필요한 대로 추가 구성 범주에서 이전의 두 단계를 반복합니다.

1. **적용**을 선택합니다.

환경 관리 콘솔에서 구성 옵션에 대한 변경 사항은 환경에 바로 적용됩니다. 이러한 변경 사항은 구성 파일이나 저장된 구성의 동일한 옵션에 대한 설정을 재정의합니다. 자세한 내용은 [우선순위](command-options.md#configuration-options-precedence)를 참조하세요.

실행 중인 환경에서 Elastic Beanstalk 콘솔을 사용하여 구성 옵션을 변경하는 방법에 대한 자세한 내용은 [Elastic Beanstalk 환경 구성](customize-containers.md) 아래의 주제를 참조하세요.

## EB CLI
<a name="configuration-options-after-ebcli"></a>

구성 파일을 포함하는 소스 코드를 배포하거나 저장된 구성의 설정을 적용하거나 **eb config** 명령으로 바로 환경 구성을 수정하여 EB CLI로 구성 옵션 설정을 업데이트할 수 있습니다.

**Topics**
+ [구성 파일(`.ebextensions`) 사용](#configuration-options-after-ebcli-ebextensions)
+ [저장된 구성 사용](#configuration-options-after-ebcli-savedconfig)
+ [사용 **eb config**](#configuration-options-after-ebcli-ebconfig)
+ [사용 **eb setenv**](#configuration-options-after-ebcli-ebsetenv)

### 구성 파일(`.ebextensions`) 사용
<a name="configuration-options-after-ebcli-ebextensions"></a>

`.config`의 프로젝트 폴더에 `.ebextensions` 파일을 넣어 애플리케이션 코드와 함께 배포합니다.

구성 파일에 대한 자세한 내용은 [.Ebextensions](ebextensions.md) 단원을 참조하세요.

```
~/workspace/my-app/
|-- .ebextensions
|   |-- environmentvariables.config
|   `-- healthcheckurl.config
|-- .elasticbeanstalk
|   `-- config.yml
|-- index.php
`-- styles.css
```

**eb deploy**로 소스 코드를 배포합니다.

```
~/workspace/my-app$ eb deploy
```

### 저장된 구성 사용
<a name="configuration-options-after-ebcli-savedconfig"></a>

**eb config** 명령을 사용하여 저장된 구성을 실행 중인 환경에 적용할 수 있습니다. 저장된 구성 이름과 함께 `--cfg` 옵션을 사용하여 해당 설정을 환경에 적용합니다.

```
$ eb config --cfg v1
```

이 예에서 `v1`은 [이전에 만든 저장된 구성 파일](environment-configuration-methods-before.md#configuration-options-before-savedconfig)의 이름입니다.

이 명령을 통해 환경에 적용된 설정은 환경이 생성되는 동안 적용되었던 설정 및 애플리케이션 소스 번들의 구성 파일에 정의된 설정을 재정의합니다.

### 사용 **eb config**
<a name="configuration-options-after-ebcli-ebconfig"></a>

EB CLI의 **eb config** 명령을 통해 텍스트 편집기를 사용하여 환경에서 바로 옵션 설정을 설정하고 제거할 수 있습니다.

**eb config**를 실행할 때 EB CLI는 구성 파일, 저장된 구성, 권장 값, 환경에서 바로 설정된 옵션, API 기본값 등의 모든 소스를 통해 환경에 적용되는 설정을 표시합니다.

**참고**  
**eb config**는 환경 속성을 표시하지 않습니다. 애플리케이션 내에서 읽을 수 있도록 환경 속성을 설정하려면 [**eb setenv**](#configuration-options-after-ebcli-ebsetenv)를 사용합니다.

다음 예에서는 `aws:autoscaling:launchconfiguration` 네임스페이스에 적용된 설정을 보여줍니다. 이러한 설정은 다음과 같습니다.
+ 권장 값 두 개(`IamInstanceProfile` 및 `InstanceType`), 환경 생성 중에 EB CLI에서 적용됩니다.
+ `EC2KeyName` 옵션, 생성 중에 리포지토리 구성을 기반으로 환경에서 직접 설정합니다.
+ 다른 옵션에 대한 API 기본값입니다.

```
ApplicationName: tomcat
DateUpdated: 2015-09-30 22:51:07+00:00
EnvironmentName: tomcat
SolutionStackName: 64bit Amazon Linux 2015.03 v2.0.1 running Tomcat 8 Java 8
settings:
...
aws:autoscaling:launchconfiguration:
    BlockDeviceMappings: null
    EC2KeyName: my-key
    IamInstanceProfile: aws-elasticbeanstalk-ec2-role
    ImageId: ami-1f316660
    InstanceType: t2.micro
...
```

****eb config**로 구성 옵션을 설정하거나 변경하려면**

1. **eb config**를 실행하여 환경 구성을 봅니다.

   ```
   ~/workspace/my-app/$ eb config
   ```

1. 기본 텍스트 편집기를 사용하여 설정 값 변경.

   ```
   aws:autoscaling:launchconfiguration:
       BlockDeviceMappings: null
       EC2KeyName: my-key
       IamInstanceProfile: aws-elasticbeanstalk-ec2-role
       ImageId: ami-1f316660
       InstanceType: t2.medium
   ```

1. 임시 구성 파일을 저장하고 종료합니다.

1. EB CLI는 환경 구성을 업데이트합니다.

**eb config**로 구성 옵션을 설정하면 기타 모든 소스의 설정을 재정의합니다.

**eb config**로 환경에서 옵션을 제거할 수도 있습니다.<a name="configuration-options-remove-ebcli"></a>

**구성 옵션을 제거하려면(EB CLI)**

1. **eb config**를 실행하여 환경 구성을 봅니다.

   ```
   ~/workspace/my-app/$ eb config
   ```

1. 모든 값을 문자열 `null`로 바꿉니다. 제거하려는 옵션을 포함하는 전체 행을 삭제할 수도 있습니다.

   ```
   aws:autoscaling:launchconfiguration:
       BlockDeviceMappings: null
       EC2KeyName: my-key
       IamInstanceProfile: aws-elasticbeanstalk-ec2-role
       ImageId: ami-1f316660
       InstanceType: null
   ```

1. 임시 구성 파일을 저장하고 종료합니다.

1. EB CLI는 환경 구성을 업데이트합니다.

**eb config**로 환경에서 옵션을 제거하면, 애플리케이션 소스 번들의 구성 파일에 있는 것과 동일한 옵션을 설정할 수 있게 됩니다. 자세한 내용은 [우선 순위](command-options.md#configuration-options-precedence)를 참조하세요.

### 사용 **eb setenv**
<a name="configuration-options-after-ebcli-ebsetenv"></a>

EB CLI로 환경 속성을 설정하려면 **eb setenv**를 사용하세요.

```
~/workspace/my-app/$ eb setenv ENVVAR=TEST
INFO: Environment update is starting.
INFO: Updating environment my-env's configuration settings.
INFO: Environment health has transitioned from Ok to Info. Command is executing on all instances.
INFO: Successfully deployed new configuration to environment.
```

이 명령은 [`aws:elasticbeanstalk:application:environment`네임스페이스](command-options-general.md#command-options-general-elasticbeanstalkapplicationenvironment)에 환경 속성을 설정합니다. **eb setenv**로 설정된 환경 속성은 간단한 업데이트 프로세스 후 애플리케이션에서 사용 가능합니다.

**eb printenv**로 환경에 설정된 환경 속성을 확인합니다.

```
~/workspace/my-app/$ eb printenv
 Environment Variables:
     ENVVAR = TEST
```

## 는 AWS CLI
<a name="configuration-options-after-awscli"></a>

구성 파일이 포함된 소스 번들을 배포하거나, 원격으로 저장된 구성을 적용하거나, `aws elasticbeanstalk update-environment` 명령을 사용하여 환경을 직접 수정 AWS CLI 하여 로 구성 옵션 설정을 업데이트할 수 있습니다.

**Topics**
+ [구성 파일(`.ebextensions`) 사용](#configuration-options-after-awscli-ebextensions)
+ [저장된 구성 사용](#configuration-options-after-awscli-savedconfig)
+ [명령줄 옵션 사용](#configuration-options-after-awscli-commandline)

### 구성 파일(`.ebextensions`) 사용
<a name="configuration-options-after-awscli-ebextensions"></a>

를 사용하여 실행 중인 환경에 구성 파일을 적용하려면 Amazon S3에 업로드하는 애플리케이션 소스 번들에 AWS CLI포함합니다.

구성 파일에 대한 자세한 내용은 [.Ebextensions](ebextensions.md) 단원을 참조하세요.

```
~/workspace/my-app-v1.zip
|-- .ebextensions
|   |-- environmentvariables.config
|   `-- healthcheckurl.config
|-- index.php
`-- styles.css
```

**애플리케이션 소스 번들을 업로드하고 실행 중인 환경에 적용(AWS CLI)**

1. 아직 Amazon S3의 Elastic Beanstalk 버킷이 없는 경우 `create-storage-location`으로 한 개를 생성합니다.

   ```
   $ aws elasticbeanstalk create-storage-location
   {
       "S3Bucket": "elasticbeanstalk-us-west-2-123456789012"
   }
   ```

1. 애플리케이션 소스 번들을 Amazon S3에 업로드합니다.

   ```
   $ aws s3 cp sourcebundlev2.zip s3://elasticbeanstalk-us-west-2-123456789012/my-app/sourcebundlev2.zip
   ```

1. 애플리케이션 버전 생성.

   ```
   $ aws elasticbeanstalk create-application-version --application-name my-app --version-label v2 --description MyAppv2 --source-bundle S3Bucket="elasticbeanstalk-us-west-2-123456789012",S3Key="my-app/sourcebundlev2.zip"
   ```

1. 환경 업데이트.

   ```
   $ aws elasticbeanstalk update-environment --environment-name my-env --version-label v2
   ```

### 저장된 구성 사용
<a name="configuration-options-after-awscli-savedconfig"></a>

`--template-name` 명령의 `aws elasticbeanstalk update-environment` 옵션으로 저장된 구성을 실행 중인 환경에 적용할 수 있습니다.

저장된 구성은 애플리케이션과 같은 이름의 경로에 있는 `resources/templates` 아래의 Elastic Beanstalk 버킷에 있어야 합니다. 예를 들어 123456789012 계정의 미국 서부(오리건) 리전(us-west-2)에서 `v1` 애플리케이션의 `my-app` 템플릿은 `s3://elasticbeanstalk-us-west-2-123456789012/resources/templates/my-app/v1`에 있습니다.

**저장된 구성을 실행 중인 환경에 적용(AWS CLI)**
+ `update-environment` 옵션으로 `--template-name` 호출에 저장된 구성을 지정합니다.

  ```
  $ aws elasticbeanstalk update-environment --environment-name my-env --template-name v1
  ```

Elastic Beanstalk는 `aws elasticbeanstalk create-configuration-template`으로 생성할 때 이 위치에 저장된 구성을 배치합니다. 저장된 구성을 로컬에서 수정하고 이 위치에 직접 배치할 수도 있습니다.

### 명령줄 옵션 사용
<a name="configuration-options-after-awscli-commandline"></a>

**JSON 문서로 구성 옵션을 변경(AWS CLI)**

1. 로컬 파일에서 JSON 형식으로 옵션 설정을 정의합니다.

1. `update-environment` 옵션으로 `--option-settings`를 실행합니다.

   ```
   $ aws elasticbeanstalk update-environment --environment-name my-env --option-settings file://~/ebconfigs/as-zero.json
   ```

이 예에서 `as-zero.json`은 인스턴스의 최소값과 최대값이 0인 환경을 구성하는 옵션을 정의합니다. 그러면 환경이 종료되지 않고 환경의 인스턴스가 중지됩니다.

**`~/ebconfigs/as-zero.json`**

```
[
    {
        "Namespace": "aws:autoscaling:asg",
        "OptionName": "MinSize",
        "Value": "0"
    },
    {
        "Namespace": "aws:autoscaling:asg",
        "OptionName": "MaxSize",
        "Value": "0"
    },
    {
        "Namespace": "aws:autoscaling:updatepolicy:rollingupdate",
        "OptionName": "RollingUpdateEnabled",
        "Value": "false"
    }
]
```

**참고**  
`update-environment`로 구성 옵션을 설정하면 기타 모든 소스의 설정을 재정의합니다.

`update-environment`로 환경에서 옵션을 제거할 수도 있습니다.<a name="configuration-options-remove-awscli"></a>

**구성 옵션 제거(AWS CLI)**
+ `update-environment` 옵션으로 `--options-to-remove` 명령을 실행합니다.

  ```
  $ aws elasticbeanstalk update-environment --environment-name my-env --options-to-remove Namespace=aws:autoscaling:launchconfiguration,OptionName=InstanceType
  ```

`update-environment`로 환경에서 옵션을 제거하면, 애플리케이션 소스 번들의 구성 파일에 있는 것과 동일한 옵션을 설정할 수 있게 됩니다. 이러한 방법 중 어느 것이라도 사용하여 옵션을 구성하지 않으면 API 기본값이 적용됩니다(있을 경우). 자세한 내용은 [우선 순위](command-options.md#configuration-options-precedence)를 참조하세요.

# 모든 환경의 일반 옵션
<a name="command-options-general"></a>

**Topics**
+ [aws:autoscaling:asg](#command-options-general-autoscalingasg)
+ [aws:autoscaling:launchconfiguration](#command-options-general-autoscalinglaunchconfiguration)
+ [aws:autoscaling:scheduledaction](#command-options-general-autoscalingscheduledaction)
+ [aws:autoscaling:trigger](#command-options-general-autoscalingtrigger)
+ [aws:autoscaling:updatepolicy:rollingupdate](#command-options-general-autoscalingupdatepolicyrollingupdate)
+ [aws:ec2:instances](#command-options-general-ec2instances)
+ [aws:ec2:vpc](#command-options-general-ec2vpc)
+ [aws:elasticbeanstalk:application](#command-options-general-elasticbeanstalkapplication)
+ [aws:elasticbeanstalk:application:environment](#command-options-general-elasticbeanstalkapplicationenvironment)
+ [aws:elasticbeanstalk:application:environmentsecrets](#command-options-general-elasticbeanstalk-application-environmentsecrets)
+ [aws:elasticbeanstalk:cloudwatch:logs](#command-options-general-cloudwatchlogs)
+ [aws:elasticbeanstalk:cloudwatch:logs:health](#command-options-general-cloudwatchlogs-health)
+ [aws:elasticbeanstalk:command](#command-options-general-elasticbeanstalkcommand)
+ [aws:elasticbeanstalk:environment](#command-options-general-elasticbeanstalkenvironment)
+ [aws:elasticbeanstalk:environment:process:default](#command-options-general-environmentprocess)
+ [aws:elasticbeanstalk:environment:process:process\$1name](#command-options-general-environmentprocess-process)
+ [aws:elasticbeanstalk:environment:proxy:staticfiles](#command-options-general-environmentproxystaticfiles)
+ [aws:elasticbeanstalk:healthreporting:system](#command-options-general-elasticbeanstalkhealthreporting)
+ [aws:elasticbeanstalk:hostmanager](#command-options-general-elasticbeanstalkhostmanager)
+ [aws:elasticbeanstalk:managedactions](#command-options-general-elasticbeanstalkmanagedactions)
+ [aws:elasticbeanstalk:managedactions:platformupdate](#command-options-general-elasticbeanstalkmanagedactionsplatformupdate)
+ [aws:elasticbeanstalk:monitoring](#command-options-general-elasticbeanstalkmonitoring)
+ [aws:elasticbeanstalk:sns:topics](#command-options-general-elasticbeanstalksnstopics)
+ [aws:elasticbeanstalk:sqsd](#command-options-general-elasticbeanstalksqsd)
+ [aws:elasticbeanstalk:trafficsplitting](#command-options-general-elasticbeanstalktrafficsplitting)
+ [aws:elasticbeanstalk:xray](#command-options-general-elasticbeanstalkxray)
+ [aws:elb:healthcheck](#command-options-general-elbhealthcheck)
+ [aws:elb:loadbalancer](#command-options-general-elbloadbalancer)
+ [aws:elb:listener](#command-options-general-elblistener)
+ [aws:elb:listener:listener\$1port](#command-options-general-elblistener-listener)
+ [aws:elb:policies](#command-options-general-elbpolicies)
+ [aws:elb:policies:policy\$1name](#command-options-general-elbpolicies-custom)
+ [aws:elbv2:listener:default](#command-options-general-elbv2-listener-default)
+ [aws:elbv2:listener:listener\$1port](#command-options-general-elbv2-listener)
+ [aws:elbv2:listenerrule:rule\$1name](#command-options-general-elbv2-listenerrule)
+ [aws:elbv2:loadbalancer](#command-options-general-elbv2)
+ [aws:rds:dbinstance](#command-options-general-rdsdbinstance)

## aws:autoscaling:asg
<a name="command-options-general-autoscalingasg"></a>

환경의 Auto Scaling 그룹을 구성합니다. 자세한 내용은 [Elastic Beanstalk 환경 인스턴스의 Auto Scaling](using-features.managing.as.md) 섹션을 참조하세요.


**네임스페이스: `aws:autoscaling:asg`**  

| **이름** | **설명** | **기본값** | **유효값** | 
| --- | --- | --- | --- | 
|  Availability Zones  |  가용 영역(AZs)은 다른 AZ의 장애로부터 격리되도록 설계된 AWS 리전 내의 고유한 위치AZs. 가용 영역은 같은 리전에 있는 다른 AZ에 비용이 저렴하고 지연 시간이 짧은 네트워크 연결을 제공합니다. 인스턴스의 AZ 수를 선택합니다.  |  `Any`  |  `Any` `Any 1` `Any 2` `Any 3`  | 
|  Cooldown  |  휴지 기간을 지정하여 이전 활동의 효과가 표시되기 전에 Amazon EC2 Auto Scaling에서 추가 조정 활동을 시작하지 않도록 할 수 있습니다. 휴지 기간은 조정 활동을 완료한 후 다른 조정 활동을 시작하기 전까지의 시간(초)입니다.  |  `360`   |  `0`\$1`10000`  | 
|  Custom Availability Zones  |  인스턴스의 AZ를 정의합니다.  |  없음  |  `us-east-1a`  `us-east-1b`  `us-east-1c`  `us-east-1d`  `us-east-1e`  `eu-central-1`   | 
|  EnableCapacityRebalancing  |  Auto Scaling 그룹의 스팟 인스턴스에 대해 용량 리밸런싱 기능을 활성화할지 여부를 지정합니다. 자세한 내용은 *Amazon EC2 Auto Scaling 사용 설명서*의 [용량 리밸런싱](https://docs.aws.amazon.com/autoscaling/ec2/userguide/capacity-rebalance.html)을 참조하세요. 이 옵션은 [`aws:ec2:instances`](#command-options-general-ec2instances) 네임스페이스에서 `EnableSpot`이 `true`로 설정되었으며 Auto Scaling 그룹에 스팟 인스턴스가 하나 이상 있는 경우에만 관련이 있습니다.  |  `false`  |  `true` `false`  | 
|  MinSize  |  Auto Scaling 그룹에 필요한 최소 인스턴스 수입니다.  |  `1`   |  `1`\$1`10000`  | 
|  MaxSize  |  Auto Scaling 그룹에 필요한 최대 인스턴스 수입니다.  |  `4`   |  `1`\$1`10000`  | 

## aws:autoscaling:launchconfiguration
<a name="command-options-general-autoscalinglaunchconfiguration"></a>

환경의 Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스를 구성합니다.

환경에서 사용되는 인스턴스는 Amazon EC2 시작 템플릿 또는 Auto Scaling 그룹 시작 구성 리소스를 사용하여 생성됩니다. 다음의 옵션은 두 리소스 유형 모두에서 사용할 수 있습니다.

자세한 내용은 [Elastic Beanstalk 환경에 대한 Amazon EC2 인스턴스](using-features.managing.ec2.md) 단원을 참조하십시오. Amazon Elastic Block Store(EBS)에 대한 자세한 내용은 *Amazon EC2 사용 설명서*의 [Amazon EBS](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/AmazonEBS.html) 장을 참조하세요.


**네임스페이스: `aws:autoscaling:launchconfiguration`**  

| **이름** | **설명** | **기본값** | **유효값** | 
| --- | --- | --- | --- | 
|  DisableDefaultEC2SecurityGroup  |  기본값인 `false`으(로) 설정하면 Elastic Beanstalk는 HTTP(80)용 표준 포트에서 인터넷 또는 로드 밸런서의 트래픽을 허용하는 기본 보안 그룹을 생성합니다. 이 보안 그룹은 환경 생성 시 EC2 인스턴스에 연결됩니다. `true`로 설정하면 Elastic Beanstalk은 새 환경의 EC2 인스턴스에 기본 보안 그룹을 할당하지 않습니다. 기존 환경의 경우 Elastic Beanstalk은 환경의 EC2 인스턴스에서 기본 EC2 보안 그룹의 연결을 해제합니다. 따라서 다음 구성도 반드시 설정해야 합니다. [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/elasticbeanstalk/latest/dg/command-options-general.html) `DisableDefaultEC2SecurityGroup` 항목이 `true` 기본 보안 그룹으로 설정된 환경에서 EC2KeyName에 지정된 값은 EC2 인스턴스와 연결되지 않습니다.  |  `false`  |  `true` `false`  | 
|  DisableIMDSv1  |  `true`로 설정하여 인스턴스 메타데이터 서비스 버전 1(IMDSv1)을 비활성화하고 IMDSv2를 적용합니다. IMDSv1과 IMDSv2를 모두 활성화하려면 `false`로 설정합니다. 사용자 환경 인스턴스 기본값은 플랫폼 운영 체제에 따라 다음과 같습니다:  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/elasticbeanstalk/latest/dg/command-options-general.html) 자세한 내용은 [인스턴스 메타데이터 서비스 구성](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/configuring-instance-metadata-service.html)을 참조하십시오.  이 옵션 설정으로 인해 Elastic Beanstalk이 시작 구성을 사용하는 기존 환경을 시작 템플릿으로 마이그레이션할 수 있습니다. 이 작업을 위해서는 시작 템플릿을 관리할 수 있는 권한이 필요합니다. 이러한 권한은 관리형 정책에 포함되어 있습니다. 관리형 정책 대신 사용자 지정 정책을 사용하는 경우, 환경 구성을 업데이트할 때 환경 생성 또는 업데이트가 실패할 수 있습니다. 자세한 내용 및 기타 고려 사항은 [Elastic Beanstalk 환경의 시작 템플릿으로의 마이그레이션](environments-cfg-autoscaling-launch-templates.md) 섹션을 참조하세요.   |  `false`— 윈도우 서버, Amazon 리눅스 2 및 이전 버전 기반 플랫폼 `true`— Amazon 리눅스 2023에 기반한 플랫폼  |  `true` `false`  | 
|  EC2KeyName  |  키 페어를 통해 EC2 인스턴스에 안전하게 로그인할 수 있습니다. `DisableDefaultEC2SecurityGroup` 항목이 `true` 기본 보안 그룹으로 설정된 환경에서 `EC2KeyName`에 지정된 값은 EC2 인스턴스와 연결되지 않습니다.  Elastic Beanstalk 콘솔을 통해 환경을 생성하는 경우 [구성 파일](ebextensions.md)에서 이 옵션을 설정할 수 없습니다. 콘솔이 이 옵션을 [권장 값](command-options.md#configuration-options-recommendedvalues)으로 재정의합니다.   |  없음  |  | 
|  IamInstanceProfile  |  인스턴스 프로파일을 사용하면 AWS Identity and Access Management (IAM) 사용자 및 AWS 서비스가 임시 보안 자격 증명에 액세스하여 AWS API를 호출할 수 있습니다. 인스턴스 프로파일의 이름이나 ARN을 지정합니다. 예제: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/elasticbeanstalk/latest/dg/command-options-general.html)  Elastic Beanstalk 콘솔 또는 EB CLI를 사용하여 환경을 생성하는 경우 [구성 파일](ebextensions.md)에서 이 옵션을 설정할 수 없습니다. 콘솔과 EB CLI가 이 옵션을[권장 값](command-options.md#configuration-options-recommendedvalues)으로 재정의합니다.   |  없음  |  인스턴스 프로파일 이름 또는 ARN  | 
|  ImageId  |  고유한 사용자 지정 AMI ID를 지정하여 기본 Amazon Machine Image(AMI)를 재정의할 수 있습니다. 예시: `ami-1f316660`  |  없음  |    | 
|   InstanceType  |  Elastic Beanstalk 환경에서 애플리케이션을 실행할 때 사용되는 인스턴스 유형입니다.  `InstanceType` 옵션은 더 이상 사용되지 않습니다. 이 옵션은 [`InstanceTypes`](#command-options-general-ec2instances) 네임스페이스의 보다 강력한 최신 `aws:ec2:instances` 옵션으로 대체되었습니다. 이러한 새 옵션을 사용하면 환경에 대한 하나 이상의 인스턴스 유형 목록을 지정할 수 있습니다. 해당 목록에 있는 첫 번째 값은 여기에서 설명하는 `aws:autoscaling:launchconfiguration` 네임스페이스에 포함된 `InstanceType` 옵션의 값과 같습니다. 새 옵션을 사용하여 인스턴스 유형을 지정하는 것이 좋습니다. 인스턴스 유형이 지정되면 새 옵션이 기존 옵션보다 우선합니다. 자세한 내용은 [aws:ec2:instances 네임스페이스](environments-cfg-autoscaling-configuration-approaches.md#environments-cfg-autoscaling-namespace.instances) 단원을 참조하십시오.  사용 가능한 인스턴스 유형은 사용된 가용 영역 및 리전에 따라 다릅니다. 서브넷을 선택하면 해당 서브넷이 포함된 가용 영역에 따라 사용 가능한 인스턴스 유형이 결정됩니다. [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/elasticbeanstalk/latest/dg/command-options-general.html)  Elastic Beanstalk 콘솔 또는 EB CLI를 사용하여 환경을 생성하는 경우 [구성 파일](ebextensions.md)에서 이 옵션을 설정할 수 없습니다. 콘솔과 EB CLI가 이 옵션을[권장 값](command-options.md#configuration-options-recommendedvalues)으로 덮어씁니다.   |  계정 및 리전에 따라 다릅니다.  |  한 가지 EC2 인스턴스 유형입니다. 계정, 리전 및 가용 영역에 따라 다릅니다. 이러한 값으로 필터링된 Amazon EC2 인스턴스 유형 목록을 가져올 수 있습니다. 자세한 내용은 *Amazon EC2 사용 설명서*의 [사용 가능한 인스턴스 유형](https://docs.aws.amazon.com//AWSEC2/latest/UserGuide/instance-types.html#AvailableInstanceTypes)을 참조하세요.  | 
|  LaunchTemplateTagPropagationEnabled  |  `true`이(가) 환경에 프로비저닝된 특정 리소스의 시작 템플릿에 환경 태그를 전파할 수 있도록 설정합니다. Elastic Beanstalk는 태그만 전파하여 다음 리소스에 대한 템플릿을 시작할 수 있습니다. [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/elasticbeanstalk/latest/dg/command-options-general.html) CloudFormation은 특정 리소스에 대한 템플릿 생성 시 태그만 허용하기 때문에 이러한 제약이 존재합니다. 자세한 내용은 *AWS CloudFormation 사용 설명서*의 [TagSpecification](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-tagspecification.html)를 참조하세요.    기존 환경에서 이 옵션 값을 `false`에서 `true`(으)로 변경하는 것은 이전에 존재했던 태그의 주요 변경 사항일 수 있습니다.   이 기능이 활성화된 경우 태그를 전파하려면 EC2를 교체해야 하며, 이로 인해 다운타임이 발생할 수 있습니다. *롤링 업데이트*를 활성화하여 구성 변경 사항을 일괄적으로 적용하고 업데이트 프로세스 중 가동 중지 시간을 방지할 수 있습니다. 자세한 내용은 [구성 변경](environments-updating.md) 단원을 참조하십시오.    시작 템플릿에 대한 자세한 내용은 다음 사항을 참조하세요. [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/elasticbeanstalk/latest/dg/command-options-general.html) 이 옵션에 대한 자세한 내용은 [시작 템플릿에 태그 전파](applications-tagging-resources.launch-templates.md) 섹션을 참조하세요.  |  `false`  |  `true` `false`  | 
|  MonitoringInterval  |  Amazon CloudWatch 지표를 반환할 간격(분)입니다.  |  `5 minute`  |  `1 minute` `5 minute`  | 
|  SecurityGroups  |  인스턴스에 대한 방화벽 규칙을 정의하기 위해 Auto Scaling 그룹의 EC2 인스턴스에 할당할 Amazon EC2 보안 그룹 ID를 나열합니다. 이 옵션을 `DisableDefaultEC2SecurityGroup`와(과) 함께 사용하여 EC2 인스턴스에 대한 방화벽 규칙을 정의하는 사용자 지정 보안 그룹을 연결합니다. 자세한 내용은 [로드 밸런싱 (다중 인스턴스) 환경](using-features.managing.ec2.instances.sg.md#using-features.managing.ec2.instances.sg.load-balancer-security) 단원을 참조하십시오.  EC2 인스턴스로의 인바운드 트래픽이 차단되지 않도록 하려면 추가 구성이 필요할 수 있습니다. 사용자 지정 EC2 보안 그룹을 사용하는 다중 인스턴스 환경에만 적용됩니다. EC2 보안 그룹에는 로드 밸런서를 통해 라우팅되는 트래픽에 대한 액세스를 허용하는 인바운드 규칙이 포함되어 있어야 합니다. 자세한 내용은 [다중 인스턴스 환경에서 EC2 보안 그룹 관리](using-features.managing.ec2.instances.sg.md#using-features.managing.ec2.instances.sg.load-balancer-security) 단원을 참조하십시오.  기존 Amazon EC2 보안 그룹 ID 또는 템플릿에서 생성된 AWS::EC2::SecurityGroup 리소스에 대한 참조가 포함되는 쉼표로 구분된 값의 단일 문자열을 제공할 수 있습니다. 이 네임스페이스에 대한 `DisableDefaultEC2SecurityGroup` 항목이 `true`으(로) 설정된 경우이 옵션에 대해 하나 이상의 값을 제공해야 합니다.  |  `elasticbeanstalk-default`   |    | 
|   SSHSourceRestriction  |  환경에 대한 SSH 액세스를 잠그는 데 사용됩니다. 예를 들어, bastion host만 프라이빗 서브넷의 인스턴스에 액세스할 수 있도록 SSH 액세스를 EC2 인스턴스에 잠글 수 있습니다. 이 문자열은 다음과 같은 형식으로 되어 있습니다. `protocol, fromPort, toPort, source_restriction` [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/elasticbeanstalk/latest/dg/command-options-general.html) [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/elasticbeanstalk/latest/dg/command-options-general.html)  |  없음  |    | 
|  BlockDeviceMappings  |  Auto Scaling 그룹의 모든 인스턴스에서 추가 Amazon EBS 볼륨 또는 인스턴스 스토어 볼륨을 연결합니다.  이 옵션 설정으로 인해 Elastic Beanstalk이 시작 구성을 사용하는 기존 환경을 시작 템플릿으로 마이그레이션할 수 있습니다. 이 작업을 위해서는 시작 템플릿을 관리할 수 있는 권한이 필요합니다. 이러한 권한은 관리형 정책에 포함되어 있습니다. 관리형 정책 대신 사용자 지정 정책을 사용하는 경우, 환경 구성을 업데이트할 때 환경 생성 또는 업데이트가 실패할 수 있습니다. 자세한 내용 및 기타 고려 사항은 [Elastic Beanstalk 환경의 시작 템플릿으로의 마이그레이션](environments-cfg-autoscaling-launch-templates.md) 섹션을 참조하세요.  인스턴스 스토어 볼륨을 매핑할 때 디바이스 이름을 볼륨 이름에만 매핑하면 됩니다. 그러나 Amazon EBS 볼륨을 매핑할 때는 다음 필드 중 일부 또는 전부를 추가로 지정하는 것이 좋습니다(각 필드는 콜론으로 구분해야 함). [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/elasticbeanstalk/latest/dg/command-options-general.html) 다음 예제는 세 개의 Amazon EBS 볼륨 즉, 하나의 빈 100GB gp2 볼륨, 하나의 스냅샷, 하나의 빈 20GB io1 볼륨을 프로비저닝된 IOPS 2000인 인스턴스 스토어 볼륨 `ephemeral0`과 연결합니다. 인스턴스 유형이 지원하는 경우 여러 인스턴스 스토어 볼륨을 연결할 수 있습니다.  `/dev/sdj=:100:true:gp2,/dev/sdh=snap-51eef269,/dev/sdi=:20:true:io1:2000,/dev/sdb=ephemeral0`   |  없음  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/elasticbeanstalk/latest/dg/command-options-general.html)  | 
|  RootVolumeType  |  환경 EC2 인스턴스에 연결된 루트 Amazon EBS 볼륨에 사용할 볼륨 유형(마그네틱, 범용 SSD 또는 프로비저닝된 IOPS SSD)입니다.  이 옵션 설정으로 인해 Elastic Beanstalk이 시작 구성을 사용하는 기존 환경을 시작 템플릿으로 마이그레이션할 수 있습니다. 이 작업을 위해서는 시작 템플릿을 관리할 수 있는 권한이 필요합니다. 이러한 권한은 관리형 정책에 포함되어 있습니다. 관리형 정책 대신 사용자 지정 정책을 사용하는 경우, 환경 구성을 업데이트할 때 환경 생성 또는 업데이트가 실패할 수 있습니다. 자세한 내용 및 기타 고려 사항은 [Elastic Beanstalk 환경의 시작 템플릿으로의 마이그레이션](environments-cfg-autoscaling-launch-templates.md) 섹션을 참조하세요.   |  플랫폼에 따라 다릅니다.  |  `standard`(마그네틱 스토리지의 경우). `gp2` 또는 `gp3`(범용 SSD의 경우) `io1`(프로비저닝된 IOPS SSD의 경우)  | 
|  RootVolumeSize  |  루트 Amazon EBS 볼륨의 전체 스토리지 용량(GB)입니다. `RootVolumeType`을 프로비저닝된 IOPS SSD로 설정한 경우 필요합니다. 예를 들어 `"64"`입니다.  |  마그네틱 스토리지 및 범용 SSD의 경우 플랫폼마다 다르지만 프로비저닝된 IOPS SSD의 경우 플랫폼마다 다르지 않습니다.  |  `10`\$1`16384`GB(범용 및 프로비저닝된 IOPS SSD의 경우). `8`\$1`1024`GB(마그네틱 스토리지의 경우).  | 
|  RootVolumeIOPS  |  프로비저닝된 IOPS SSD 루트 볼륨 또는 범용 `gp3` SSD 루트 볼륨에 대해 원하는 초당 입출력 작업 처리량(IOPS)입니다. IOPS와 볼륨 크기 간 최대 비율은 500:1입니다. 예를 들어 IOPS가 3,000인 볼륨은 최소 6GiB여야 합니다.  |  없음  |  `100`\$1`20000`(io1 프로비저닝된 IOPS SSD 루트 볼륨의 경우) `3000`\$1`16000`(범용 `gp3` SSD 루트 볼륨의 경우)  | 
|  RootVolumeThroughput  |  환경의 EC2 인스턴스에 연결된 Amazon EBS 루트 볼륨에 프로비저닝할 원하는 처리량(단위: 초당 메가바이트(MIB/초))입니다.  이 옵션은 `gp3` 스토리지 유형에만 적용됩니다.   |  없음  |  `125`\$1`1000`  | 

## aws:autoscaling:scheduledaction
<a name="command-options-general-autoscalingscheduledaction"></a>

환경의 Auto Scaling 그룹에 대한 [예약 작업](environments-cfg-autoscaling-scheduledactions.md)을 구성합니다. 각 설정의 옵션 이름, 네임스페이스 및 값 이외에 각 작업의 `resource_name`을 지정합니다. [aws:autoscaling:scheduledaction 네임스페이스](environments-cfg-autoscaling-scheduledactions.md#environments-cfg-autoscaling-scheduledactions-namespace)의 예제를 참조하세요.


**네임스페이스: `aws:autoscaling:scheduledaction`**  

| **이름** | **설명** | **기본값** | **유효값** | 
| --- | --- | --- | --- | 
|  StartTime  |  일회성 작업의 경우 작업을 실행할 날짜와 시간을 선택합니다. 반복 작업의 경우 작업을 활성화할 시점을 선택합니다.  |  없음  |  [ISO-8601 타임스탬프](http://www.w3.org/TR/NOTE-datetime)는 예약된 모든 조정 작업에서 고유합니다.  | 
|  EndTime  |  예약된 조정 작업의 반복을 중지할 미래의 날짜와 시간(UTC/GMT 시간대)을 지정합니다. **EndTime**을 지정하지 않으면 해당 작업이 `Recurrence` 표현식에 따라 반복됩니다. 예시: `2015-04-28T04:07:2Z` 예약 작업이 종료됐을 때 Amazon EC2 Auto Scaling은 이전 설정으로 자동으로 되돌아가지 않습니다. 필요에 따라 두 번째 예약 작업은 원래 설정으로 되돌아 가도록 구성할 수 있습니다.  |  없음  |  [ISO-8601 타임스탬프](http://www.w3.org/TR/NOTE-datetime)는 예약된 모든 조정 작업에서 고유합니다.  | 
|  MaxSize  |  작업 실행 시 적용되는 최대 인스턴스 개수입니다.  |  없음  |  `0`\$1`10000`  | 
|  MinSize  |  작업 실행 시 적용되는 최소 인스턴스 개수입니다.  |  없음  |  `0`\$1`10000`  | 
|  DesiredCapacity  |  Auto Scaling 그룹에 대해 원하는 초기 용량을 설정합니다. 예약 작업이 적용되면 트리거가 설정을 기반으로 원하는 용량을 조정합니다.  |  없음  |  `0`\$1`10000`  | 
|  Recurrence  |  예약된 작업이 실행되도록 할 빈도입니다. 반복을 지정하지 않으면 `StartTime`에 의해 지정된 대로 조정 작업이 한 번만 발생합니다.  |  없음  |  [Cron](http://en.wikipedia.org/wiki/Cron) 식.  | 
|  Suspend  |  반복 예약 작업을 일시적으로 비활성화하려면 `true`로 설정합니다.  |   `false`   |   `true`   `false`   | 

## aws:autoscaling:trigger
<a name="command-options-general-autoscalingtrigger"></a>

환경 Auto Scaling 그룹에 대한 확장 조정 트리거를 구성합니다.

**참고**  
이 네임스페이스의 세 가지 옵션은 트리거가 발생하기 전에 트리거의 지표가 해당 정의된 한도를 초과해서 유지할 수 있는 기간을 결정합니다. 이러한 옵션은 다음과 같이 관련됩니다:  
`BreachDuration = Period * EvaluationPeriods`  
이러한 옵션의 기본값(각각 5, 5 및 1)은 이 등식을 충족합니다. 일관되지 않은 값을 지정하면 Elastic Beanstalk에서 등식이 여전히 충족되도록 값 중 하나를 수정할 수 있습니다.


**네임스페이스: `aws:autoscaling:trigger`**  

| **이름** | **설명** | **기본값** | **유효값** | 
| --- | --- | --- | --- | 
|  BreachDuration  |  트리거가 호출되기 전 지표가 정의된 한도(`UpperThreshold` 및 `LowerThreshold`에 지정된 대로)를 초과할 수 있는 시간(분)입니다.  |  `5`  |  `1`\$1`600`  | 
|  LowerBreachScaleIncrement  |  조정 작업 수행 시 제거할 Amazon EC2 인스턴스 수입니다.  |  `-1`  |    | 
|  LowerThreshold  |  위반 기간 중 측정값이 이 값 아래로 떨어지면 트리거가 호출됩니다.  |  `2000000`  |  `0`\$1`20000000`  | 
|  MeasureName  |  Auto Scaling 트리거에 사용되는 지표입니다.  `HealthyHostCount`, `UnhealthyHostCount` 및 `TargetResponseTime`은 전용 로드 밸런서가 있는 환경에만 적용할 수 있습니다. 공유 로드 밸런서로 구성된 환경에는 유효한 지표 값이 아닙니다. 로드 밸런서 유형에 대한 자세한 내용은 [Elastic Beanstalk 환경의 로드 밸런서](using-features.managing.elb.md)을 참조하세요.   |  `NetworkOut`  |  `CPUUtilization` `NetworkIn` `NetworkOut` `DiskWriteOps` `DiskReadBytes` `DiskReadOps` `DiskWriteBytes` `Latency` `RequestCount` `HealthyHostCount` `UnhealthyHostCount` `TargetResponseTime`  | 
|  Period  |  Amazon CloudWatch가 트리거의 측정치를 측정하는 빈도를 지정합니다. 값은 연속되는 두 기간 사이의 분(min)의 수입니다.  |  `5`  |  `1`\$1`600`  | 
|  EvaluationPeriods  |  연속되는 평가 기간의 수를 위반 상황이 발생했는지 판단하는 데 사용합니다.  |  `1`  |  `1`\$1`600`  | 
|  Statistic  |  트리거가 사용해야 하는 통계입니다(예: `Average`).  |  `Average`  |  `Minimum` `Maximum` `Sum` `Average`  | 
|  Unit  |  트리거 측정 단위입니다(예: `Bytes`).  |  `Bytes`  |  `Seconds` `Percent` `Bytes`  `Bits`  `Count`  `Bytes/Second`  `Bits/Second`  `Count/Second`  `None`   | 
|  UpperBreachScaleIncrement  |  조정 작업 수행 시 추가할 Amazon EC2 인스턴스 수를 지정합니다.  |  `1`  |    | 
|  UpperThreshold  |  위반 기간 중 측정값이 이 값보다 커지면 트리거가 호출됩니다.  |  `6000000`  |  `0`\$1`20000000`  | 

## aws:autoscaling:updatepolicy:rollingupdate
<a name="command-options-general-autoscalingupdatepolicyrollingupdate"></a>

환경의 Auto Scaling 그룹의 롤링 업데이트를 구성합니다.


**네임스페이스: `aws:autoscaling:updatepolicy:rollingupdate`**  

| **이름** | **설명** | **기본값** | **유효값** | 
| --- | --- | --- | --- | 
|  MaxBatchSize  |  롤링 업데이트의 각 배치에 포함된 인스턴스 수입니다.  |  Auto Scaling 그룹 최소 크기의 1/3로, 다음으로 가장 큰 정수로 반올림됩니다.  |  `1`\$1`10000`  | 
|  MinInstancesInService  |  다른 인스턴스가 종료되는 동안 Auto Scaling 그룹 내에서 작동해야 하는 최소 인스턴스 수입니다.  |  Auto Scaling 그룹의 최소 크기 또는 Auto Scaling 그룹의 최대 크기보다 작은 크기 중에서 더 작은 크기입니다.  |  `0`\$1`9999`  | 
|  RollingUpdateEnabled  |  `true`인 경우, 환경에 대한 롤링 업데이트를 활성화합니다. Elastic Beanstalk 소프트웨어 애플리케이션에 대해 소규모로 자주 업데이트해야 하고 애플리케이션 가동 중지를 피하려는 경우 롤링 업데이트가 유용합니다. 이 값을 true로 설정하면 `MaxBatchSize`, `MinInstancesInService` 및 `PauseTime` 옵션이 자동으로 활성화됩니다. 또한 이러한 옵션 중 하나를 설정하면 `RollingUpdateEnabled` 옵션 값이 자동으로 `true`로 설정됩니다. 이 옵션을 `false`로 설정하면 롤링 업데이트가 비활성화됩니다.  Elastic Beanstalk 콘솔 또는 EB CLI를 사용하여 환경을 생성하는 경우 [구성 파일](ebextensions.md)에서 이 옵션을 설정할 수 없습니다. 콘솔과 EB CLI가 이 옵션을[권장 값](command-options.md#configuration-options-recommendedvalues)으로 재정의합니다.   |  `false`  |  `true` `false`  | 
|  RollingUpdateType  |  여기에는 시간 기반 롤링 업데이트, 상태 기반 롤링 업데이트 및 변경 불가능한 업데이트의 세 가지 유형이 포함됩니다. 시간 기반 롤링 업데이트는 배치 간 PauseTime을 적용합니다. 상태 확인 기반 롤링 업데이트의 새 인스턴스가 상태 확인을 통과할 때까지 대기했다가 다음 배치를 시작합니다. [변경이 불가능한 업데이트](environmentmgmt-updates-immutable.md)는 새 Auto Scaling 그룹의 전체 인스턴스 세트를 시작합니다.  Elastic Beanstalk 콘솔 또는 EB CLI를 사용하여 환경을 생성하는 경우 [구성 파일](ebextensions.md)에서 이 옵션을 설정할 수 없습니다. 콘솔과 EB CLI가 이 옵션을[권장 값](command-options.md#configuration-options-recommendedvalues)으로 덮어씁니다.   |  `Time`  |  `Time` `Health` `Immutable`  | 
|  PauseTime  |  인스턴스 배치 하나에 대한 업데이트를 완료한 후 다음 배치에 대한 업데이트를 계속하기 전까지 Elastic Beanstalk 서비스가 대기하는 시간(초, 분 또는 시간)입니다.  |  인스턴스 유형 및 컨테이너를 기반으로 자동으로 계산됩니다.  |  `PT0S`\$1(0초)\$1`PT1H`(1시간)  | 
|  Timeout  |  인스턴스 배치 하나의 모든 인스턴스가 업데이트 취소 전 상태 확인을 통과하기 위해 대기하는 최대 시간(분 또는 시간)입니다.  |  `PT30M`(30분)  |  `PT5M`\$1(5분)\$1`PT1H`(1시간) \$1[ISO8601 기간](http://en.wikipedia.org/wiki/ISO_8601#Durations) 형식: `PT#H#M#S` 여기서 각 \$1는 각각 시간, 분 및/또는 초의 수입니다.  | 

## aws:ec2:instances
<a name="command-options-general-ec2instances"></a>

스팟 옵션을 포함하여 환경의 인스턴스를 구성합니다. 이 네임스페이스는 [`aws:autoscaling:launchconfiguration`](#command-options-general-autoscalinglaunchconfiguration) 및 [`aws:autoscaling:asg`](#command-options-general-autoscalingasg)를 보완합니다.

자세한 내용은 [Elastic Beanstalk 환경 인스턴스의 Auto Scaling](using-features.managing.as.md)을(를) 참조하세요.


**네임스페이스: `aws:ec2:instances`**  

| **이름** | **설명** | **기본값** | **유효값** | 
| --- | --- | --- | --- | 
|  EnableSpot  |  환경에 대한 스팟 인스턴스 요청을 활성화합니다. `false`인 경우 이 네임스페이스의 일부 옵션이 적용되지 않습니다.  이 옵션 설정으로 인해 Elastic Beanstalk이 시작 구성을 사용하는 기존 환경을 시작 템플릿으로 마이그레이션할 수 있습니다. 이 작업을 위해서는 시작 템플릿을 관리할 수 있는 권한이 필요합니다. 이러한 권한은 관리형 정책에 포함되어 있습니다. 관리형 정책 대신 사용자 지정 정책을 사용하는 경우, 환경 구성을 업데이트할 때 환경 생성 또는 업데이트가 실패할 수 있습니다. 자세한 내용 및 기타 고려 사항은 [Elastic Beanstalk 환경의 시작 템플릿으로의 마이그레이션](environments-cfg-autoscaling-launch-templates.md) 섹션을 참조하세요.   |  `false`  |  `true` `false`  | 
|   InstanceTypes  |  환경에서 사용할 인스턴스 유형의 쉼표로 구분된 목록입니다(예: `t2.micro,t3.micro`). `EnableSpot` 항목이 `true`이고 `SpotAllocationStrategy` 항목이 `capacity-optimized-prioritized`으(로) 설정된 경우 이 옵션에 지정된 값 목록에 따라 스팟 인스턴스 할당 전략의 인스턴스 유형 우선 순위가 결정됩니다. 스팟 인스턴스가 활성화되지 않은 경우(`EnableSpot`이 `false`인 경우) 목록의 첫 번째 인스턴스 유형만 사용됩니다. 이 옵션 목록의 첫 번째 인스턴스 유형은 [`InstanceType`](#command-options-general-autoscalinglaunchconfiguration) 네임스페이스의 `aws:autoscaling:launchconfiguration` 옵션 값과 같습니다. 후자의 옵션은 폐기되었으므로 사용하지 않는 것이 좋습니다. 둘 다 지정하면 `InstanceTypes` 옵션 목록의 첫 번째 인스턴스 유형이 사용되며 `InstanceType`은 무시됩니다. 사용 가능한 인스턴스 유형은 사용된 가용 영역 및 리전에 따라 다릅니다. 서브넷을 선택하면 해당 서브넷이 포함된 가용 영역에 따라 사용 가능한 인스턴스 유형이 결정됩니다. [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/elasticbeanstalk/latest/dg/command-options-general.html)  일부 이전 AWS 계정은 스팟 인스턴스를 지원하지 않는 기본 인스턴스 유형(예: t1.micro)을 Elastic Beanstalk에 제공할 수 있습니다. 스팟 인스턴스 요청을 활성화하고 스팟을 지원하지 않는 인스턴스 유형에 대한 오류가 발생하는 경우 스팟을 지원하는 인스턴스 유형을 구성해야 합니다. 스팟 인스턴스 유형을 선택하려면 [스팟 인스턴스 어드바이저](https://aws.amazon.com/ec2/spot/instance-advisor/)를 사용합니다.  환경 구성을 업데이트하고 `InstanceTypes` 옵션에서 하나 이상의 인스턴스 유형을 제거하면 Elastic Beanstalk는 제거된 인스턴스 유형에서 실행 중인 모든 Amazon EC2 인스턴스를 종료합니다. 그러면 환경의 Auto Scaling 그룹에서 필요에 따라 현재 지정된 인스턴스 유형을 사용하여 원하는 용량을 완료하는 데 필요한 새 인스턴스를 시작합니다.  |  두 인스턴스 유형의 목록입니다. 계정 및 리전에 따라 다릅니다.  |  1\$140개의 EC2 인스턴스 유형입니다. 2개 이상을 권장합니다. 계정, 리전 및 가용 영역에 따라 다릅니다. 이러한 값으로 필터링된 Amazon EC2 인스턴스 유형 목록을 가져올 수 있습니다. 자세한 내용은 *Amazon EC2 사용 설명서*의 [사용 가능한 인스턴스 유형](https://docs.aws.amazon.com//AWSEC2/latest/UserGuide/instance-types.html#AvailableInstanceTypes)을 참조하세요. 인스턴스 유형은 모두 동일한 아키텍처의 일부여야 합니다(`arm64`, `x86_64`, `i386`). `SupportedArchitectures` 또한 이 네임스페이스의 일부입니다. `SupportedArchitectures`에 대한 값을 제공하는 경우, `InstanceTypes`에 대해 입력한 값은 `SupportedArchitectures`에 대해 제공한 아키텍처 중 하나에만 속해야 합니다.  | 
|  SpotAllocationStrategy  |  사용 가능한 스팟 용량 풀에서 스팟 인스턴스를 어떻게 할당할지 결정하는 [스팟 인스턴스 할당 전략](environments-cfg-autoscaling-spot-allocation-strategy.md)을 지정합니다. `capacity-optimized-prioritized`으(로) 설정하면의 `InstanceTypes`의 값 순서가 할당을 위한 인스턴스 유형 우선 순위를 설정합니다. 이 옵션은 `EnableSpot`이 `true`인 경우에만 사용됩니다.  |  `capacity-optimized`  |  `capacity-optimized` `price-capacity-optimized` `capacity-optimized-prioritized` `lowest-price `  | 
|  SpotFleetOnDemandBase  |  환경 스케일 업에 따라 스팟 인스턴스를 고려하기 전에 Auto Scaling 그룹이 프로비저닝하는 최소 온디맨드 인스턴스 수입니다. 이 옵션은 `EnableSpot`이 `true`인 경우에만 사용됩니다.  |  `0`  |  [`0`](#command-options-general-autoscalingasg) 네임스페이스의 `MaxSize` \$1 `aws:autoscaling:asg` 옵션  | 
|  SpotFleetOnDemandAboveBasePercentage  |  Auto Scaling 그룹이 `SpotOnDemandBase` 인스턴스를 초과하여 프로비저닝하는 추가 용량 일부의 온디맨드 인스턴스 비율입니다. 이 옵션은 `EnableSpot`이 `true`인 경우에만 사용됩니다.  |  단일 인스턴스 환경의 경우 `0` 로드 밸런싱 수행 환경의 경우 `70`  |  `0`\$1`100`  | 
|  SpotMaxPrice  |  스팟 인스턴스에 대해 지불하려는 단위 시간당 최고 가격(USD)입니다. 스팟 인스턴스에 대한 최고 가격 옵션 권장 사항에 대해서는 *Amazon EC2 사용 설명서*의 [스팟 인스턴스 요금 기록](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-spot-instances-history.html)을 참조하세요. 이 옵션은 `EnableSpot`이 `true`인 경우에만 사용됩니다.  |  각 인스턴스 유형에 대한 온디맨드 가격입니다. 이 경우 옵션의 값은 `null`입니다.  |  `0.001`\$1`20.0` `null`  | 
|  SupportedArchitectures  |  쉼표로 구분된 환경에 사용할 EC2 인스턴스 아키텍처 유형의 목록입니다. Elastic Beanstalk는 다음 프로세서 아키텍처를 토대로 인스턴스 유형을 지원합니다. [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/elasticbeanstalk/latest/dg/command-options-general.html) 프로세서 아키텍처 및 Amazon EC2 인스턴스 유형에 대한 자세한 내용은 [Amazon EC2 인스턴스 유형](using-features.managing.ec2.instance-types.md) 단원을 참조하십시오.  |  없음  |  `arm64` `x86_64` `i386`  32비트 아키텍처 `i386`은 대부분의 Elastic Beanstalk 플랫폼에서 지원되지 않습니다. 대신 `x86_64` 또는 `arm64` 아키텍처 유형을 선택하는 것을 권장합니다.   | 

## aws:ec2:vpc
<a name="command-options-general-ec2vpc"></a>

사용자 지정 [Amazon Virtual Private Cloud](https://docs.aws.amazon.com/vpc/latest/userguide/)(VPC)에서 리소스를 시작하도록 환경을 구성합니다. 이 네임스페이스에서 설정을 구성하지 않으면 Elastic Beanstalk에서는 기본 VPC에서 리소스를 시작합니다.


**네임스페이스: `aws:ec2:vpc`**  

| **이름**  | **설명**  | **기본값**  | **유효값**  | 
| --- | --- | --- | --- | 
|  VPCId  |  Amazon VPC의 ID입니다.  |  없음  |    | 
|  Subnets  |  Auto Scaling 그룹 서브넷 또는 서브넷 ID입니다. 서브넷이 여러 개인 경우 이 값은 서브넷 ID의 쉼표로 구분된 단일 문자열로 지정합니다(예: `"subnet-11111111,subnet-22222222"`).  |  없음  |    | 
|  ELBSubnets  |  탄력적 로드 밸런서에 대한 서브넷의 ID입니다. 서브넷이 여러 개인 경우 이 값은 서브넷 ID의 쉼표로 구분된 단일 문자열로 지정합니다(예: `"subnet-11111111,subnet-22222222"`).  |  없음  |    | 
|  ELBScheme  |  Amazon VPC 외부에서 Elastic Beanstalk 애플리케이션에 액세스할 수 없도록 Amazon VPC 내부에 내부 로드 밸런서를 생성하려면 `internal`을(를) 지정합니다. `public` 또는 `internal` 이외의 값을 지정하면 Elastic Beanstalk에서 해당 값을 무시합니다.  |  `public`   |  `public`  `internal`   | 
|  DBSubnets  |  데이터베이스 서브넷의 ID를 포함합니다. 이는 Amazon RDS DB 인스턴스를 애플리케이션의 일부로 추가하려는 경우에만 사용됩니다. 서브넷이 여러 개인 경우 이 값은 서브넷 ID의 쉼표로 구분된 단일 문자열로 지정합니다(예: `"subnet-11111111,subnet-22222222"`).  |  없음  |    | 
|  AssociatePublicIpAddress  |  Amazon VPC에서 퍼블릭 IP 주소를 사용하는 인스턴스를 시작할지 여부를 지정합니다. 퍼블릭 IP 주소가 있으면 인스턴스는 인터넷과 통신하는 데 NAT 장치가 필요하지 않습니다. 단일 퍼블릭 서브넷에 로드 밸런서와 인스턴스를 포함하려면 이 값을 `true`로 설정해야 합니다. 이 옵션은 단일 인스턴스 환경에 영향을 미치지 않습니다. 단일 인스턴스 환경에는 항상 탄력적 IP 주소가 있는 단일 Amazon EC2 인스턴스가 있습니다. 이 옵션은 로드 밸런싱 수행 및 확장 가능 환경인 경우에 사용됩니다.  |  없음  |  `true`  `false`   | 

## aws:elasticbeanstalk:application
<a name="command-options-general-elasticbeanstalkapplication"></a>

애플리케이션에 대한 상태 확인 경로를 구성합니다. 자세한 내용은 [기본 상태 보고](using-features.healthstatus.md)을(를) 참조하세요.


**네임스페이스: `aws:elasticbeanstalk:application`**  

| **이름**  | **설명**  | **기본값**  | **유효값**  | 
| --- | --- | --- | --- | 
|  애플리케이션 상태 점검 URL  |  상태 확인 요청이 전송되는 경로입니다. 이 경로가 설정되지 않은 경우 로드 밸런서는 포트 80에서 TCP 연결을 시도하여 애플리케이션의 상태를 확인합니다. `/`로 시작하는 경로로 설정하여 HTTP GET 요청을 해당 경로에 보냅니다. 경로 앞에 프로토콜(HTTP, HTTPS, TCP 또는 SSL)과 포트를 포함시켜 HTTPS 연결을 확인하거나 기본 포트가 아닌 다른 포트를 사용할 수도 있습니다.  Elastic Beanstalk 콘솔을 사용하여 환경을 생성하는 경우 [구성 파일](ebextensions.md)에서 이 옵션을 설정할 수 없습니다. 콘솔이 이 옵션을 [권장 값](command-options.md#configuration-options-recommendedvalues)으로 재정의합니다.   |  없음  |  유효한 값으로는 다음이 포함됩니다. `/`(루트 경로에 대한 HTTP GET) `/health` `HTTPS:443/` `HTTPS:443/health`  | 

EB CLI 및 Elastic Beanstalk 콘솔에서 위의 옵션에 대한 권장 값을 적용합니다. 구성 파일을 사용해 동일하게 구성하고자 하는 경우 이러한 설정을 제거해야 합니다. 세부 정보는 [권장 값](command-options.md#configuration-options-recommendedvalues) 단원을 참조하십시오.

## aws:elasticbeanstalk:application:environment
<a name="command-options-general-elasticbeanstalkapplicationenvironment"></a>

애플리케이션의 환경 속성을 구성합니다.


**네임스페이스: `aws:elasticbeanstalk:application:environment`**  

| **이름**  | **설명**  | **기본값**  | **유효값**  | 
| --- | --- | --- | --- | 
|  환경 변수 이름  |  키-값 페어의 형태로 전달됩니다.  |  없음  |  환경 변수 값  | 

자세한 정보는 [환경 변수 및 기타 소프트웨어 설정](environments-cfg-softwaresettings.md)을 참조하세요.

## aws:elasticbeanstalk:application:environmentsecrets
<a name="command-options-general-elasticbeanstalk-application-environmentsecrets"></a>

애플리케이션의 *환경 보안 암호* 역할을 하도록 환경 변수를 구성합니다. 환경 보안 암호는 AWS Secrets Manager 보안 암호 또는 AWS Systems Manager 파라미터 스토어 파라미터를 저장합니다.


**네임스페이스: `aws:elasticbeanstalk:application:environmentsecrets`**  

| **이름**  | **설명**  | **기본값**  | **유효값**  | 
| --- | --- | --- | --- | 
|  OptionName  |  보안 암호 저장소 또는 파라미터 저장소 값을 보관할 환경 변수의 이름을 지정합니다.  |  없음  | 환경 변수 이름 | 
|  값  |   AWS Secrets Manager 또는 파라미터 스토어에 저장된 값의 ARN AWS Systems Manager 을 지정합니다. 인스턴스 부트스트래핑 중에 Elastic Beanstalk은 해당 ARN 리소스에 저장된 값을 사용하여 환경 변수를 초기화합니다.  환경의 EC2 인스턴스 프로파일 역할이 보안 암호 및 파라미터 ARN에 액세스할 수 있도록 필요한 권한이 설정되어 있는지 확인하세요. 자세한 내용은 [필수 IAM 권한](AWSHowTo.secrets.IAM-permissions.md) 단원을 참조하십시오.   |  없음  |   AWS Secrets Manager 보안 암호 또는 AWS Systems Manager 파라미터 스토어 파라미터 값에 유효한 ARN 값입니다.  | 

자세한 내용은 [보안 암호를 환경 변수로 구성](AWSHowTo.secrets.env-vars.md) 단원을 참조하십시오.

## aws:elasticbeanstalk:cloudwatch:logs
<a name="command-options-general-cloudwatchlogs"></a>

애플리케이션에 대한 인스턴스 로그 스트리밍을 구성합니다.


**네임스페이스: `aws:elasticbeanstalk:cloudwatch:logs`**  

| **이름**  | **설명**  | **기본값**  | **유효값**  | 
| --- | --- | --- | --- | 
|  StreamLogs  |  프록시 및 배포 로그에 대한 그룹을 CloudWatch Logs에 만들어 환경의 각 인스턴스에서 로그를 스트리밍할지 여부를 지정합니다.  |  `false`  |  `true` `false`  | 
|  DeleteOnTerminate  |  환경을 종료할 때 로그 그룹을 삭제할지 여부를 지정합니다. `false`인 경우 로그는 `RetentionInDays`일 동안 유지됩니다.  |  `false`  |  `true` `false`  | 
|  RetentionInDays  |  만료 전 로그 이벤트를 유지할 일수입니다.  |  7  |  1, 3, 5, 7, 14, 30, 60, 90, 120, 150, 180, 365, 400, 545, 731, 1827, 3653  | 

## aws:elasticbeanstalk:cloudwatch:logs:health
<a name="command-options-general-cloudwatchlogs-health"></a>

애플리케이션에 대한 환경 상태 로그 스트리밍을 구성합니다.


**네임스페이스: `aws:elasticbeanstalk:cloudwatch:logs:health`**  

| **이름**  | **설명**  | **기본값**  | **유효값**  | 
| --- | --- | --- | --- | 
|  HealthStreamingEnabled  |  확장 상태 보고를 활성화한 환경의 경우, CloudWatch Logs에 환경 상태를 위한 그룹을 생성할지 여부와 Elastic Beanstalk 환경 상태 데이터를 아카이브할지 여부를 지정합니다. 확장 상태 활성화에 대한 자세한 내용은 [`aws:elasticbeanstalk:healthreporting:system`](#command-options-general-elasticbeanstalkhealthreporting) 단원을 참조하십시오.  |  `false`  |  `true` `false`  | 
|  DeleteOnTerminate  |  환경을 종료할 때 로그 그룹을 삭제할지 여부를 지정합니다. `false`인 경우 상태 데이터는 `RetentionInDays`일 동안 유지됩니다.  |  `false`  |  `true` `false`  | 
|  RetentionInDays  |  만료하기 전에, 아카이브된 상태 데이터를 유지하는 일수.  |  7  |  1, 3, 5, 7, 14, 30, 60, 90, 120, 150, 180, 365, 400, 545, 731, 1827, 3653  | 

## aws:elasticbeanstalk:command
<a name="command-options-general-elasticbeanstalkcommand"></a>

애플리케이션 코드에 대한 배포 정책을 구성합니다. 자세한 내용은 [정책 및 설정 배포](using-features.rolling-version-deploy.md)을(를) 참조하세요.


**네임스페이스: `aws:elasticbeanstalk:command`**  

| **이름**  | **설명**  | **기본값**  | **유효값**  | 
| --- | --- | --- | --- | 
|  DeploymentPolicy  |  애플리케이션 버전 배포에 대한 [배포 정책](using-features.rolling-version-deploy.md)을 선택합니다.  Elastic Beanstalk 콘솔을 사용하여 환경을 생성하는 경우 [구성 파일](ebextensions.md)에서 이 옵션을 설정할 수 없습니다. 콘솔이 이 옵션을 [권장 값](command-options.md#configuration-options-recommendedvalues)으로 재정의합니다.   |  `AllAtOnce`  |  `AllAtOnce` `Rolling` `RollingWithAdditionalBatch` `Immutable` `TrafficSplitting`  | 
|  Timeout  |  인스턴스가 명령 실행을 완료할 때까지 대기하는 시간(초)입니다. Elastic Beanstalk에서 내부적으로 `Timeout` 값에 240초(4분)를 추가합니다. 예를 들어 기본 유효 제한 시간은 840초(600 \$1 240) 또는 14분입니다.  |  `600`   |  `1`\$1`3600`  | 
|  BatchSizeType  |  **BatchSize**에 지정된 숫자 유형입니다.  Elastic Beanstalk 콘솔 또는 EB CLI를 사용하여 환경을 생성하는 경우 [구성 파일](ebextensions.md)에서 이 옵션을 설정할 수 없습니다. 콘솔과 EB CLI가 이 옵션을[권장 값](command-options.md#configuration-options-recommendedvalues)으로 재정의합니다.   |  `Percentage`   |  `Percentage`  `Fixed`   | 
|  BatchSize  |  배포를 동시에 수행하는 Auto Scaling 그룹 내 Amazon EC2 인스턴스의 비율 또는 고정된 수입니다. 유효한 값은 사용된 **BatchSizeType** 설정에 따라 다릅니다.  Elastic Beanstalk 콘솔 또는 EB CLI를 사용하여 환경을 생성하는 경우 [구성 파일](ebextensions.md)에서 이 옵션을 설정할 수 없습니다. 콘솔과 EB CLI가 이 옵션을[권장 값](command-options.md#configuration-options-recommendedvalues)으로 재정의합니다.   |  `100`   |  `1`\$1`100`(`Percentage`). `1`\$1[aws:autoscaling:asg::MaxSize](#command-options-general-autoscalingasg)(`Fixed`)  | 
|  IgnoreHealthCheck  |  실패한 상태 확인으로 인해 배포를 취소하지 마세요.  | false  |  `true`  `false`   | 

## aws:elasticbeanstalk:environment
<a name="command-options-general-elasticbeanstalkenvironment"></a>

환경의 아키텍처 및 서비스 역할을 구성합니다.


**네임스페이스: `aws:elasticbeanstalk:environment`**  

| **이름**  | **설명**  | **기본값**  | **유효값**  | 
| --- | --- | --- | --- | 
|  EnvironmentType  |  `SingleInstance`을 설정하여 로드 밸런서 없이 EC2 인스턴스 하나를 시작합니다.  |  `LoadBalanced`   |  `SingleInstance`  `LoadBalanced`   | 
|  ServiceRole  |  Elastic Beanstalk에서 환경의 리소스를 관리하는 데 사용하는 IAM 역할의 이름입니다. 역할 이름(선택적으로 사용자 지정 경로 앞에 옴) 또는 그 ARN을 지정합니다. 예제: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/elasticbeanstalk/latest/dg/command-options-general.html)  Elastic Beanstalk 콘솔 또는 EB CLI를 사용하여 환경을 생성하는 경우 [구성 파일](ebextensions.md)에서 이 옵션을 설정할 수 없습니다. 콘솔과 EB CLI가 이 옵션을[권장 값](command-options.md#configuration-options-recommendedvalues)으로 재정의합니다.   |  없음  |  IAM 역할 이름, 경로/이름 또는 ARN  | 
|  LoadBalancerType  |  사용자의 환경에 대한 로드 밸런서의 유형입니다. 자세한 내용은 [Elastic Beanstalk 환경의 로드 밸런서](using-features.managing.elb.md)을(를) 참조하세요.  |  `classic`  |  `classic` `application` `network`  | 
|  LoadBalancerIsShared  |  환경의 로드 밸런서를 전용으로 할지 공유할지 여부를 지정합니다. 이 옵션은 Application Load Balancer에만 설정할 수 있습니다. 환경 생성 후에는 변경할 수 없습니다. `false`이면 환경이 Elastic Beanstalk에 의해 생성 및 관리되는 자체 전용 로드 밸런서를 갖습니다. `true`이면 환경이 사용자가 생성하고 [aws:elbv2:loadbalancer](#command-options-general-elbv2) 네임스페이스의 `SharedLoadBalancer` 옵션에 지정된 공유 로드 밸런서를 사용합니다.  |   `false`   |   `true`   `false`   | 

## aws:elasticbeanstalk:environment:process:default
<a name="command-options-general-environmentprocess"></a>

환경의 기본 프로세스를 구성합니다.


**네임스페이스: `aws:elasticbeanstalk:environment:process:default`**  

| **이름**  | **설명**  | **기본값**  | **유효값**  | 
| --- | --- | --- | --- | 
|  DeregistrationDelay  |  등록 취소하기 전에 활성 요청이 완료될 때까지 대기하는 시간(초)입니다.  |  `20`  |  `0`\$1`3600`  | 
|  HealthCheckInterval  |  Elastic Load Balancing이 애플리케이션의 Amazon EC2 인스턴스 상태를 확인하는 시간 간격(초)입니다.  |  Classic 또는 Application Load Balancer 사용 시: `15` Network Load Balancer 사용 시: `30`  |  Classic 또는 Application Load Balancer 사용 시: `5` \$1 `300` Network Load Balancer 사용 시: `10`, `30`   | 
|  HealthCheckPath  |  상태 확인에 대한 HTTP 요청이 전송되는 경로입니다.  |  `/`   |  라우팅 가능 경로  | 
|  HealthCheckTimeout  |  상태 확인 중 응답 대기 시간(초)입니다. 이 옵션은 Application Load Balancer를 사용하는 환경에만 적용할 수 있습니다.  |  `5`  |  `1`\$1`60`  | 
|  HealthyThresholdCount  |  Elastic Load Balancing에서 인스턴스 상태를 변경하기 전 연속 성공 요청 수입니다.  |  Classic 또는 Application Load Balancer 사용 시: `3` Network Load Balancer 사용 시: `5`  |  `2`\$1`10`  | 
|  MatcherHTTPCode  |  인스턴스 상태가 정상임을 나타내는 HTTP 코드 목록(쉼표로 구분된 목록). 이 옵션은 Network Load Balancer 또는 Application Load Balancer를 사용하는 환경에만 적용할 수 있습니다.  |  `200`  |  Application Load Balancer 사용 시: `200` \$1 `499` Network Load Balancer 사용 시: `200` \$1 `399`  | 
|  Port  |  프로세스가 수신 대기하는 포트입니다.  |  `80`  |  `1`\$1`65535`  | 
|  Protocol  |  프로세스에서 사용하는 프로토콜입니다. Application Load Balancer를 사용하는 경우 이 옵션을 `HTTP` 또는 `HTTPS`로만 설정할 수 있습니다. Network Load Balancer를 사용하는 경우 이 옵션을 `TCP`로만 설정할 수 있습니다.  |  Classic 또는 Application Load Balancer 사용 시: `HTTP` Network Load Balancer 사용 시: `TCP`  |  `TCP` `HTTP` `HTTPS`  | 
|  StickinessEnabled  |  true로 설정하면 고정 세션이 활성화됩니다. 이 옵션은 Application Load Balancer를 사용하는 환경에만 적용할 수 있습니다.  |  `'false'`  |  `'false'` `'true'`  | 
|  StickinessLBCookieDuration  |  고정 세션 쿠키의 수명 주기(초)입니다. 이 옵션은 Application Load Balancer를 사용하는 환경에만 적용할 수 있습니다.  |  `86400`(1일)  |  `1`\$1`604800`  | 
|  StickinessType  |  `lb_cookie`로 설정하면 고정 세션에 쿠키를 사용합니다. 이 옵션은 Application Load Balancer를 사용하는 환경에만 적용할 수 있습니다.  |  `lb_cookie`  |  `lb_cookie`  | 
|  UnhealthyThresholdCount  |  Elastic Load Balancing에서 인스턴스 상태를 변경하기 전 연속 실패 요청 수입니다.  |  `5`  |  `2`\$1`10`  | 

## aws:elasticbeanstalk:environment:process:process\$1name
<a name="command-options-general-environmentprocess-process"></a>

환경에 대한 추가 프로세스를 구성합니다.


**네임스페이스: `aws:elasticbeanstalk:environment:process:process_name`**  

| **이름**  | **설명**  | **기본값**  | **유효값**  | 
| --- | --- | --- | --- | 
|  DeregistrationDelay  |  등록 취소하기 전에 활성 요청이 완료될 때까지 대기하는 시간(초)입니다.  |  `20`  |  `0`\$1`3600`  | 
|  HealthCheckInterval  |  Elastic Load Balancing이 애플리케이션의 Amazon EC2 인스턴스 상태를 확인하는 간격(초)입니다.  |  Classic 또는 Application Load Balancer 사용 시: `15` Network Load Balancer 사용 시: `30`  |  Classic 또는 Application Load Balancer 사용 시: `5` \$1 `300` Network Load Balancer 사용 시: `10`, `30`   | 
|  HealthCheckPath  |  상태 확인에 대한 HTTP 요청이 전송되는 경로입니다.  |  `/`   |  라우팅 가능 경로  | 
|  HealthCheckTimeout  |  상태 확인 중 응답 대기 시간(초)입니다. 이 옵션은 Application Load Balancer를 사용하는 환경에만 적용할 수 있습니다.  |  `5`  |  `1`\$1`60`  | 
|  HealthyThresholdCount  |  Elastic Load Balancing에서 인스턴스 상태를 변경하기 전 연속 성공 요청 수입니다.  |  Classic 또는 Application Load Balancer 사용 시: `3` Network Load Balancer 사용 시: `5`  |  `2`\$1`10`  | 
|  MatcherHTTPCode  |  인스턴스 상태가 정상임을 나타내는 HTTP 코드 목록(쉼표로 구분된 목록)입니다. 이 옵션은 Network Load Balancer 또는 Application Load Balancer를 사용하는 환경에만 적용할 수 있습니다.  |  `200`  |  Application Load Balancer 사용 시: `200` \$1 `499` Network Load Balancer 사용 시: `200` \$1 `399`  | 
|  Port  |  프로세스가 수신 대기하는 포트입니다.  |  `80`  |  `1`\$1`65535`  | 
|  Protocol  |  프로세스에서 사용하는 프로토콜입니다. Application Load Balancer를 사용하는 경우 이 옵션을 `HTTP` 또는 `HTTPS`로만 설정할 수 있습니다. Network Load Balancer를 사용하는 경우 이 옵션을 `TCP`로만 설정할 수 있습니다.  |  Classic 또는 Application Load Balancer 사용 시: `HTTP` Network Load Balancer 사용 시: `TCP`  |  `TCP` `HTTP` `HTTPS`  | 
|  StickinessEnabled  |  true로 설정하면 고정 세션이 활성화됩니다. 이 옵션은 Application Load Balancer를 사용하는 환경에만 적용할 수 있습니다.  |  `'false'`  |  `'false'` `'true'`  | 
|  StickinessLBCookieDuration  |  고정 세션 쿠키의 수명 주기(초)입니다. 이 옵션은 Application Load Balancer를 사용하는 환경에만 적용할 수 있습니다.  |  `86400`(1일)  |  `1`\$1`604800`  | 
|  StickinessType  |  `lb_cookie`로 설정하면 고정 세션에 쿠키를 사용합니다. 이 옵션은 Application Load Balancer를 사용하는 환경에만 적용할 수 있습니다.  |  `lb_cookie`  |  `lb_cookie`  | 
|  UnhealthyThresholdCount  |  Elastic Load Balancing에서 인스턴스 상태를 변경하기 전 연속 실패 요청 수입니다.  |  `5`  |  `2`\$1`10`  | 

## aws:elasticbeanstalk:environment:proxy:staticfiles
<a name="command-options-general-environmentproxystaticfiles"></a>

다음 네임스페이스를 사용하여 정적 파일을 제공하도록 프록시 서버를 구성할 수 있습니다. 프록시 서버가 지정된 경로에서 파일 요청을 수신하면 요청을 애플리케이션으로 라우팅하는 대신 파일을 직접 제공합니다. 따라서 애플리케이션에서 처리해야 하는 요청 수가 줄어듭니다.

프록시 서버가 제공하는 경로를 정적 자산이 포함된 소스 코드의 폴더에 매핑합니다. 이 네임스페이스에서 정의하는 각 옵션은 다른 경로를 매핑합니다.

**참고**  
이 네임스페이스는 Amazon Linux 2 이상에 기반한 플랫폼 브랜치에 적용됩니다. 사용자 환경에서 Amazon Linux AMI(이전 Amazon Linux 2)에 기반한 플랫폼 버전을 사용하는 경우 플랫폼별 정적 파일 네임스페이스와 관련하여 [플랫폼별 옵션](command-options-specific.md)을 참조하십시오.


**네임스페이스: `aws:elasticbeanstalk:environment:proxy:staticfiles`**  

| **이름**  | **값**  | 
| --- | --- | 
|  프록시 서버가 파일을 제공하는 경로입니다. `/`로 값을 시작합니다. 예를 들어 `/images`에서 파일을 제공하도록 `subdomain.eleasticbeanstalk.com/images`을(를) 지정합니다.  |  파일이 포함된 폴더의 이름입니다. 예를 들어 소스 번들의 최상위 레벨에 있는 `staticimages`(이)라는 폴더에서 파일을 제공하도록 `staticimages`을(를) 지정합니다.  | 

## aws:elasticbeanstalk:healthreporting:system
<a name="command-options-general-elasticbeanstalkhealthreporting"></a>

환경에 대해 강화된 상태 보고 서비스를 구성합니다.


**네임스페이스: `aws:elasticbeanstalk:healthreporting:system`**  

| **이름**  | **설명**  | **기본값**  | **유효값**  | 
| --- | --- | --- | --- | 
|  SystemType  |  상태 보고 시스템([기본](using-features.healthstatus.md) 또는 [고급](health-enhanced.md))입니다. 확장된 상태 보고에는 [서비스 역할](concepts-roles-service.md) 및 버전 2 또는 최신 [플랫폼 버전](concepts.platforms.md)이 필요합니다.  Elastic Beanstalk 콘솔 또는 EB CLI를 사용하여 환경을 생성하는 경우 [구성 파일](ebextensions.md)에서 이 옵션을 설정할 수 없습니다. 콘솔과 EB CLI가 이 옵션을[권장 값](command-options.md#configuration-options-recommendedvalues)으로 덮어씁니다.   |  `basic`   |  `basic`  `enhanced`   | 
| ConfigDocument | CloudWatch에 게시할 환경 및 인스턴스 측정치를 설명하는 JSON 문서입니다. | 없음 |  | 
|  EnhancedHealthAuthEnabled  |  Elastic Beanstalk가 환경 인스턴스에서 Elastic Beanstalk 서비스로 확장 상태 정보를 전달하는 데 사용하는 내부 API에 대한 권한 부여를 활성화합니다. 자세한 내용은 [향상된 상태 역할](health-enhanced.md#health-enhanced-roles)을(를) 참조하세요.  이 옵션은 확장된 상태 보고(`SystemType`이 `enhanced`로 설정된 경우 등)에만 적용할 수 있습니다.   |  `true`   |  `true`  `false`   | 
|  HealthCheckSuccessThreshold  |  인스턴스가 상태 확인 통과를 위해 임계값을 낮춥니다.  Elastic Beanstalk 콘솔을 사용하여 환경을 생성하는 경우 [구성 파일](ebextensions.md)에서 이 옵션을 설정할 수 없습니다. 콘솔이 이 옵션을 [권장 값](command-options.md#configuration-options-recommendedvalues)으로 재정의합니다.   |  `Ok`  |  `Ok` `Warning` `Degraded` `Severe`  | 

## aws:elasticbeanstalk:hostmanager
<a name="command-options-general-elasticbeanstalkhostmanager"></a>

Amazon S3에 교체된 로그를 업로드하도록 환경의 EC2 인스턴스를 구성합니다.


**네임스페이스: `aws:elasticbeanstalk:hostmanager`**  

| **이름**  | **설명**  | **기본값**  | 유효값 | 
| --- | --- | --- | --- | 
|  LogPublicationControl  |  애플리케이션에 연결된 Amazon S3 버킷에 애플리케이션의 Amazon EC2 인스턴스에 대한 로그 파일을 복사합니다.  |  `false`   |  `true`  `false`   | 

## aws:elasticbeanstalk:managedactions
<a name="command-options-general-elasticbeanstalkmanagedactions"></a>

환경에 대한 관리형 플랫폼 업데이트를 구성합니다.


**네임스페이스: `aws:elasticbeanstalk:managedactions`**  

| **이름**  | **설명**  | **기본값**  | **유효값**  | 
| --- | --- | --- | --- | 
|  ManagedActionsEnabled  |  [관리형 플랫폼 업데이트](environment-platform-update-managed.md#environment-platform-update-managed-namespace)를 활성화합니다. `true`로 설정하면 `PreferredStartTime` 및 `UpdateLevel`로 지정해야 합니다.  |  `false`   |  `true`  `false`   | 
|  PreferredStartTime  |  관리형 작업에 대한 유지 관리 기간을 UTC로 구성합니다. 예를 들어 `"Tue:09:00"`입니다.  |  없음  |  날짜 및 시간 형식  *일*:*시*:*분*  형식  | 
|  ServiceRoleForManagedUpdates  |  Elastic Beanstalk가 환경에서 관리형 플랫폼 업데이트를 수행하는 데 사용하는 IAM 역할의 이름입니다. `ServiceRole` 네임스페이스의 `aws:elasticbeanstalk:environment` 옵션에 지정한 동일한 역할 또는 본인 계정의 [관리형 업데이트 서비스 연결 역할](using-service-linked-roles-managedupdates.md)을 사용할 수 있습니다. 후자의 경우, 계정에 관리형 업데이트 서비스 연결 역할이 아직 없으면 Elastic Beanstalk가 생성합니다.  |  없음  |  `ServiceRole`과 동일 또는 `AWSServiceRoleForElasticBeanstalkManagedUpdates`  | 

## aws:elasticbeanstalk:managedactions:platformupdate
<a name="command-options-general-elasticbeanstalkmanagedactionsplatformupdate"></a>

환경에 대한 관리형 플랫폼 업데이트를 구성합니다.


**네임스페이스: `aws:elasticbeanstalk:managedactions:platformupdate`**  

| **이름**  | **설명**  | **기본값**  | **유효값**  | 
| --- | --- | --- | --- | 
|  UpdateLevel  |  관리형 플랫폼 업데이트 사용 시 적용할 가장 높은 업데이트 수준입니다. 플랫폼 버전은 *major*.*minor*.*patch*의 순서로 지정됩니다. 예를 들어, 버전이 2.0.8이면 2는 메이저 버전, 0은 마이너 버전 그리고 8은 패치 버전입니다.  |  없음  |  `patch`(패치 버전 업데이트에만 해당) `minor`(마이너 및 패치 버전 업데이트 둘 다에 해당)  | 
|  InstanceRefreshEnabled  |  주별 인스턴스 대체를 활성화합니다. `ManagedActionsEnabled`을 `true`로 설정해야 합니다.  | false |  `true`  `false`   | 

## aws:elasticbeanstalk:monitoring
<a name="command-options-general-elasticbeanstalkmonitoring"></a>

상태 확인에 실패한 EC2 인스턴스를 종료하도록 환경을 구성합니다.


**네임스페이스: `aws:elasticbeanstalk:monitoring`**  

| **이름**  | **설명**  | **기본값**  | **유효값**  | 
| --- | --- | --- | --- | 
|  Automatically Terminate Unhealthy Instances  |  상태 확인에 실패하면 인스턴스를 종료합니다.  이 옵션은 [레거시 환경](using-features.migration.md)에서만 지원됩니다. 이는 도달 가능성과 기타 인스턴스 관련 측정치를 토대로 인스턴스의 상태를 확인합니다. Elastic Beanstalk는 애플리케이션의 상태에 따라 인스턴스를 자동 종료할 방법을 제공하지 않습니다.   |  `true`   |  `true`  `false`   | 

## aws:elasticbeanstalk:sns:topics
<a name="command-options-general-elasticbeanstalksnstopics"></a>

환경에 대한 알림을 구성합니다.


**네임스페이스: `aws:elasticbeanstalk:sns:topics`**  

| **이름**  | **설명**  | **기본값**  | **유효값**  | 
| --- | --- | --- | --- | 
|  Notification Endpoint  |  애플리케이션에 영향을 미치는 중요한 이벤트를 알리려는 엔드포인트입니다.  Elastic Beanstalk 콘솔을 통해 환경을 생성하는 경우 [구성 파일](ebextensions.md)에서 이 옵션을 설정할 수 없습니다. 콘솔이 이 옵션을 [권장 값](command-options.md#configuration-options-recommendedvalues)으로 재정의합니다.   |  없음  |    | 
|  Notification Protocol  |  엔드포인트로 알림을 전송하는 데 사용하는 프로토콜입니다.  |  `email`   |  `http`  `https`  `email`  `email-json`  `sqs`   | 
|  Notification Topic ARN  |  구독하는 주제에 대한 Amazon 리소스 이름(ARN)입니다.  |  없음  |    | 
|  Notification Topic Name  |  구독하는 주제 이름입니다.  |  없음  |    | 

## aws:elasticbeanstalk:sqsd
<a name="command-options-general-elasticbeanstalksqsd"></a>

작업자 환경을 위한 Amazon SQS 대기열을 구성합니다.


**네임스페이스: `aws:elasticbeanstalk:sqsd`**  

| **이름**  | **설명**  | **기본값**  | **유효값**  | 
| --- | --- | --- | --- | 
|  WorkerQueueURL  |  작업자 환경 티어의 데몬이 메시지를 읽는 대기열의 URL입니다.  값을 지정하지 않으면 Elastic Beanstalk가 자동으로 생성하는 대기열이 [표준](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/standard-queues.html) Amazon SQS 대기열입니다. 값을 제공하면 표준 또는 [FIFO](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/FIFO-queues.html) Amazon SQS 대기열의 URL을 제공할 수 있습니다. FIFO 대기열을 제공하면 [정기적인 작업](using-features-managing-env-tiers.md#worker-periodictasks)이 지원되지 않습니다.   |  자동으로 생성됨  |  값을 지정하지 않으면 Elastic Beanstalk이 대기열을 자동으로 생성합니다.  | 
|  HttpPath  |  HTTP POST 메시지가 전송되는 애플리케이션의 상대 경로입니다.  |  /  |   | 
|  MimeType  |  HTTP POST 요청으로 전송되는 메시지의 MIME 유형입니다.  |  `application/json`   |  `application/json`  `application/x-www-form-urlencoded`  `application/xml`  `text/plain`  사용자 지정 MIME 유형  | 
|  HttpConnections  |  Amazon EC2 인스턴스 내에서 애플리케이션에 대한 최대 동시 접속 수입니다.  Elastic Beanstalk 콘솔을 통해 환경을 생성하는 경우 [구성 파일](ebextensions.md)에서 이 옵션을 설정할 수 없습니다. 콘솔이 이 옵션을 [권장 값](command-options.md#configuration-options-recommendedvalues)으로 재정의합니다.   |  `50`   |  `1`\$1`100`  | 
|  ConnectTimeout  |  애플리케이션에 연결하기 위해 대기하는 시간(초)입니다.  |  `5`   |  `1`\$1`60`  | 
|  InactivityTimeout  | 기존 애플리케이션 연결에 대한 응답을 대기하는 시간(초)입니다.대몬(daemon)이 작업자 환경 애플리케이션에서 200 (OK) 응답을 수신하거나 RetentionPeriod이(가) 만료될 때까지 메시지가 다시 처리됩니다. |  `299`   |  `1`\$1`36000`  | 
|  VisibilityTimeout  |  처리를 위해 Amazon SQS 대기열에서 수신되는 메시지를 잠그는 시간(초)입니다. 구성된 시간이 경과한 이후에는 다른 데몬에서 읽을 수 있도록 메시지가 대기열에 다시 표시됩니다.  |  300  |  `0`\$1`43200`  | 
|  ErrorVisibilityTimeout  |  명시적인 오류로 인해 처리 시도가 실패한 이후에 Elastic Beanstalk에서 메시지를 Amazon SQS 대기열로 반환할 때까지 경과하는 시간(초)입니다.  |  `2`초  |  `0`\$1`43200`초  | 
|  RetentionPeriod  |  메시지가 유효하고 능동적으로 처리되는 시간(초)입니다.  |  `345600`   |  `60`\$1`1209600`  | 
|  MaxRetries  |  Elastic Beanstalk에서 메시지를 배달 못한 편지 대기열로 이동하기 전에 메시지를 처리할 웹 애플리케이션으로 메시지 전송을 시도하는 최대 횟수입니다.  |   `10`   |  `1`\$1`100`  | 

## aws:elasticbeanstalk:trafficsplitting
<a name="command-options-general-elasticbeanstalktrafficsplitting"></a>

환경에 대한 트래픽 분할 배포를 구성합니다.

이 네임스페이스는 [aws:elasticbeanstalk:command](#command-options-general-elasticbeanstalkcommand) 네임스페이스의 `DeploymentPolicy` 옵션을 `TrafficSplitting`으로 설정할 때 적용됩니다. 배포 정책에 대한 자세한 내용은 [정책 및 설정 배포](using-features.rolling-version-deploy.md)을 참조하십시오.


**네임스페이스: `aws:elasticbeanstalk:trafficsplitting`**  

| **이름**  | **설명**  | **기본값**  | **유효값**  | 
| --- | --- | --- | --- | 
|  NewVersionPercent  |  Elastic Beanstalk가 수신되는 클라이언트 트래픽을 배포할 새 애플리케이션 버전을 실행하는 환경 인스턴스로 전환하는 초기 비율입니다.  |   `10`   |  `1`\$1`100`  | 
|  EvaluationTime  |  Elastic Beanstalk가 모든 수신 클라이언트 트래픽을 배포할 새 애플리케이션 버전으로 전환하기 전에 초기 정상 배포 후에 대기하는 시간(분)입니다.  |   `5`   |  `3`\$1`600`  | 

## aws:elasticbeanstalk:xray
<a name="command-options-general-elasticbeanstalkxray"></a>

 AWS X-Ray 데몬을 실행하여 [X-Ray 통합](environment-configuration-debugging.md) 애플리케이션에서 트레이스 정보를 릴레이합니다.


**네임스페이스: `aws:elasticbeanstalk:xray`**  

| **이름**  | **설명**  | **기본값**  | **유효값**  | 
| --- | --- | --- | --- | 
|  `XRayEnabled`  |  `true`로 설정하면 환경 인스턴스에서 X-Ray 대몬(daemon)이 실행됩니다.  |  `false`  |  `true` `false`  | 

## aws:elb:healthcheck
<a name="command-options-general-elbhealthcheck"></a>

Classic Load Balancer에 대한 상태 확인을 구성합니다.


**네임스페이스: `aws:elb:healthcheck`**  

| **이름**  | **설명**  | **기본값**  | **유효값**  | 
| --- | --- | --- | --- | 
|  HealthyThreshold  |  Elastic Load Balancing에서 인스턴스 상태를 변경하기 전 연속 성공 요청 수입니다.  |  `3`   |  `2`\$1`10`  | 
|  Interval  |  Elastic Load Balancing이 애플리케이션의 Amazon EC2 인스턴스의 상태를 확인하는 간격입니다.  |  `10`   |  `5`\$1`300`  | 
|  Timeout  |  Elastic Load Balancing이 인스턴스가 응답하지 않는 것으로 간주되기 전에 응답을 기다리는 시간(초)입니다.  |  `5`   |  `2`\$1`60`  | 
|  UnhealthyThreshold  |  Elastic Load Balancing에서 인스턴스 상태를 변경하기 전 연속 실패 요청 수입니다.  |  `5`   |  `2`\$1`10`  | 
|  (사용되지 않음)Target  |  상태 확인이 전송되는 백엔드 인스턴스 대상입니다. 대신 [`Application Healthcheck URL`](#command-options-general-elasticbeanstalkapplication) 네임스페이스의 `aws:elasticbeanstalk:application`을 사용합니다.  |  `TCP:80`   |  대상의 형식은 *PROTOCOL*:*PORT**/PATH*입니다.  | 

## aws:elb:loadbalancer
<a name="command-options-general-elbloadbalancer"></a>

환경의 Classic Load Balancer를 구성합니다.

이 네임스페이스의 여러 옵션은 더 이상 지원되지 않으며 [aws:elb:listener](#command-options-general-elblistener) 네임스페이스의 리스너별 옵션으로 대체되었습니다. 더 이상 지원되지 않는 이러한 옵션을 통해서는 표준 포트에서 두 개의 리스너(보안 리스너 하나와 비보안 리스너 하나)만 구성할 수 있습니다.


**네임스페이스: `aws:elb:loadbalancer`**  

| 이름 | 설명 | 기본값 | 유효한 값 | 
| --- | --- | --- | --- | 
|  CrossZone  |  각 가용 영역 내에서 만이 아니라 모든 가용 영역 내의 모든 인스턴스 간에 트래픽을 균등하게 라우팅하도록 로드 밸런서를 구성합니다.  Elastic Beanstalk 콘솔 또는 EB CLI를 사용하여 환경을 생성하는 경우 [구성 파일](ebextensions.md)에서 이 옵션을 설정할 수 없습니다. 콘솔과 EB CLI가 이 옵션을[권장 값](command-options.md#configuration-options-recommendedvalues)으로 재정의합니다.   |  `false`   |  `true`  `false`   | 
|  SecurityGroups  |  생성한 하나 이상의 보안 그룹을 로드 밸런서에 할당합니다. `DisableDefaultEC2SecurityGroup`([aws:autoscaling:launchconfiguration](#command-options-general-autoscalinglaunchconfiguration))이 `true`로 설정된 경우 필수입니다. 기본 Elastic Beanstalk EC2 보안 그룹에서 옵트아웃한 로드 밸런싱된 환경은 이 옵션을 사용하여 하나 이상의 보안 그룹을 제공해야 합니다. 자세한 내용은 단원을 참조하십시오[EC2 보안 그룹 관리](using-features.managing.ec2.instances.sg.md).  |  없음  |  하나 이상의 보안 그룹 ID  | 
| ManagedSecurityGroup |  새 보안 그룹을 만드는 대신, 환경의 로드 밸런서에 기존 보안 그룹을 할당합니다. 이 설정을 사용하려면 이 네임스페이스의 `SecurityGroups` 설정을 업데이트하여 보안 그룹의 ID를 포함하고 자동 생성된 보안 그룹 ID(생성된 경우)를 제거합니다. 로드 밸런서의 트래픽을 환경의 EC2 인스턴스로 보내도록 허용하기 위해 Elastic Beanstalk에서는 관리형 보안 그룹의 인바운드 트래픽을 허용하는 규칙을 인스턴스의 보안 그룹에 추가합니다.  | 없음 | 보안 그룹 ID | 
|  (사용되지 않음)LoadBalancerHTTPPort  | 비보안 리스너의 수신 포트입니다. |  `80`   |  `OFF`  `80`   | 
|  (사용되지 않음)LoadBalancerPortProtocol  |  비보안 리스너에서 사용하는 프로토콜입니다.  |  `HTTP`   |  `HTTP`  `TCP`   | 
|  (사용되지 않음)LoadBalancerHTTPSPort  | 보안 리스너의 수신 포트입니다. |  `OFF`   |  `OFF`  `443`  `8443`   | 
|  (사용되지 않음)LoadBalancerSSLPortProtocol  | 보안 리스너에서 사용하는 프로토콜입니다. |  `HTTPS`   |  `HTTPS`  `SSL`   | 
|  (사용되지 않음)SSLCertificateId  | 보안 리스너에 바인딩할 SSL 인증서의 Amazon 리소스 이름(ARN)입니다. |  없음  |    | 

## aws:elb:listener
<a name="command-options-general-elblistener"></a>

Classic Load Balancer에 대해 기본 리스너(포트 80)를 구성합니다.


**네임스페이스: `aws:elb:listener`**  

| 이름 | 설명 | 기본값 | 유효한 값 | 
| --- | --- | --- | --- | 
| ListenerProtocol | 리스너가 사용하는 프로토콜입니다. | HTTP  | HTTP TCP  | 
| InstancePort | 이 리스너가 EC2 인스턴스와의 통신에 사용하는 포트입니다. | 80 | 1\$165535 | 
| InstanceProtocol |  이 리스너가 EC2 인스턴스와의 통신에 사용하는 프로토콜입니다. `ListenerProtocol`과 동일한 인터넷 프로토콜 계층이어야 합니다. 또한 이 리스너와 동일한 `InstancePort`를 사용하는 다른 리스너와 동일한 보안 수준이어야 합니다. 예를 들어 `ListenerProtocol`이 `HTTPS`(애플리케이션 계층, 보안 연결 사용)인 경우 `InstanceProtocol`을 `HTTP`(애플리케이션 계층, 비보안 연결 사용)로 설정할 수 있습니다. 또한 `InstancePort`를 `80`으로 설정할 경우 `InstanceProtocol`가 `HTTP`으로 설정된 다른 모든 리스너에서 `InstancePort`을 `80`로 설정합니다.  |  `HTTP`(`ListenerProtocol`이 `HTTP`인 경우) `TCP`(`ListenerProtocol`이 `TCP`인 경우)  | HTTP 또는 HTTPS(ListenerProtocol이 HTTP 또는 HTTPS인 경우) `TCP` 또는 `SSL`(`ListenerProtocol`이 `TCP` 또는 `SSL`인 경우) | 
| PolicyNames | 리스너의 포트에 적용할, 쉼표로 구분된 정책 목록입니다. 대신 [aws:elb:policies](#command-options-general-elbpolicies) 네임스페이스의 LoadBalancerPorts 옵션을 사용하는 것이 좋습니다. | 없음 |  | 
| ListenerEnabled | 이 리스너가 활성화되는지 여부를 지정합니다. false을 지정하면 로드 밸런서에 리스너가 포함되지 않습니다. | true |  `true` `false`  | 

## aws:elb:listener:listener\$1port
<a name="command-options-general-elblistener-listener"></a>

Classic Load Balancer에 대한 추가 리스너를 구성합니다.


**네임스페이스: `aws:elb:listener:listener_port`**  

| 이름 | 설명 | 기본값 | 유효한 값 | 
| --- | --- | --- | --- | 
|  ListenerProtocol  | 리스너가 사용하는 프로토콜입니다. |  HTTP  |  HTTP HTTPS TCP SSL  | 
|  InstancePort  | 이 리스너가 EC2 인스턴스와의 통신에 사용하는 포트입니다. | listener\$1port와 동일함 | 1\$165535 | 
|  InstanceProtocol  |  이 리스너가 EC2 인스턴스와의 통신에 사용하는 프로토콜입니다. `ListenerProtocol`과 동일한 인터넷 프로토콜 계층이어야 합니다. 또한 이 리스너와 동일한 `InstancePort`를 사용하는 다른 리스너와 동일한 보안 수준이어야 합니다. 예를 들어 `ListenerProtocol`이 `HTTPS`(애플리케이션 계층, 보안 연결 사용)인 경우 `InstanceProtocol`을 `HTTP`(애플리케이션 계층, 비보안 연결 사용)로 설정할 수 있습니다. 또한 `InstancePort`를 `80`으로 설정할 경우 `InstanceProtocol`가 `HTTP`으로 설정된 다른 모든 리스너에서 `InstancePort`을 `80`로 설정합니다.  |  `HTTP`(`ListenerProtocol`이 `HTTP` 또는 `HTTPS`인 경우) `TCP`(`ListenerProtocol`이 `TCP` 또는 `SSL`인 경우)  | HTTP 또는 HTTPS(ListenerProtocol이 HTTP 또는 HTTPS인 경우) `TCP` 또는 `SSL`(`ListenerProtocol`이 `TCP` 또는 `SSL`인 경우) | 
|  PolicyNames  | 리스너의 포트에 적용할, 쉼표로 구분된 정책 목록입니다. 대신 [aws:elb:policies](#command-options-general-elbpolicies) 네임스페이스의 LoadBalancerPorts 옵션을 사용하는 것이 좋습니다. | 없음 |  | 
|  SSLCertificateId  | 리스너에 바인딩할 SSL 인증서의 Amazon 리소스 이름(ARN)입니다. |  없음  |  | 
|  ListenerEnabled  | 이 리스너가 활성화되는지 여부를 지정합니다. false을 지정하면 로드 밸런서에 리스너가 포함되지 않습니다. | 다른 옵션이 설정된 경우 true이고, 그렇지 않으면 false입니다. |  true false  | 

## aws:elb:policies
<a name="command-options-general-elbpolicies"></a>

Classic Load Balancer에 대한 기본 고정 및 글로벌 로드 밸런서 정책을 수정합니다.


**네임스페이스: `aws:elb:policies`**  

| **이름**  | **설명**  | **기본값**  | **유효값**  | 
| --- | --- | --- | --- | 
|  ConnectionDrainingEnabled  |  비정상 상태가 되었거나 진행 중인 요청을 완료하기 위해 등록 취소된 인스턴스에 대한 기존 연결을 로드 밸런서에서 유지할지 여부를 지정합니다.  Elastic Beanstalk 콘솔 또는 EB CLI를 사용하여 환경을 생성하는 경우 [구성 파일](ebextensions.md)에서 이 옵션을 설정할 수 없습니다. 콘솔과 EB CLI가 이 옵션을[권장 값](command-options.md#configuration-options-recommendedvalues)으로 재정의합니다.   |  `false`   |  `true`  `false`   | 
|  ConnectionDrainingTimeout  |  연결을 강제로 종료하기 전에 Connection Draining 중 로드 밸런서에서 인스턴스에 대한 기존 연결을 유지할 최대 시간(초)입니다.  Elastic Beanstalk 콘솔을 사용하여 환경을 생성하는 경우 [구성 파일](ebextensions.md)에서 이 옵션을 설정할 수 없습니다. 콘솔이 이 옵션을 [권장 값](command-options.md#configuration-options-recommendedvalues)으로 재정의합니다.   |  `20`   |  `1`\$1`3600`  | 
|  ConnectionSettingIdleTimeout  |  로드 밸런서가 연결을 통해 데이터를 전송 또는 수신하기 위해 대기하는 시간(초)입니다. 이 기간이 경과한 이후 데이터가 전송되거나 전송 또는 수신되지 않으면 로드 밸런서는 연결을 종료합니다.  |  `60`   |  `1`\$1`3600`  | 
| LoadBalancerPorts |  기본 정책(`AWSEB-ELB-StickinessPolicy`)이 적용되는 쉼표로 구분된 리스너 포트 목록입니다.  | 없음 | :all을 사용하여 모든 리스너 포트를 표시할 수 있습니다. | 
|  Stickiness Cookie Expiration  |  각 쿠키가 유효한 시간(초)입니다. 기본 정책(`AWSEB-ELB-StickinessPolicy`)을 사용합니다.  |   `0`   |  `0`\$1`1000000`  | 
|  Stickiness Policy  |  세션 중에 사용자로부터 나오는 모든 요청이 동일한 서버 인스턴스로 전송되도록 사용자 세션을 특정 서버 인스턴스에 바인딩합니다. 기본 정책(`AWSEB-ELB-StickinessPolicy`)을 사용합니다.  |   `false`   |  true false  | 

## aws:elb:policies:policy\$1name
<a name="command-options-general-elbpolicies-custom"></a>

Classic Load Balancer에 대한 추가 로드 밸런서 정책을 생성합니다.


**네임스페이스: `aws:elb:policies:policy_name`**  

| **이름**  | **설명**  | **기본값**  | **유효값**  | 
| --- | --- | --- | --- | 
|  CookieName  | AppCookieStickinessPolicyType 정책의 세션 수명 주기를 제어하는 애플리케이션 생성 쿠키의 이름입니다. 이러한 정책은 HTTP/HTTPS 리스너에만 연결할 수 있습니다. | 없음 |  | 
|  InstancePorts  |  이 정책이 적용되는 쉼표로 구분된 인스턴스 포트 목록입니다.  | 없음 | 포트 목록 또는 :all | 
|  LoadBalancerPorts  |  이 정책이 적용되는 쉼표로 구분된 리스너 포트 목록입니다.  | 없음 | 포트 목록 또는 :all | 
|  ProxyProtocol  |  `ProxyProtocolPolicyType` 정책의 경우 TCP 메시지의 원본 요청 IP 주소 및 포트를 포함할지 여부를 지정합니다. 이 정책은 TCP/SSL 리스너에만 연결할 수 있습니다.  | 없음 | true false  | 
|  PublicKey  |  백엔드 서버를 인증할 때 사용하는 `PublicKeyPolicyType` 정책에 대한 퍼블릭 키의 내용입니다. 이 정책은 백엔드 서버 또는 리스너에 직접 적용할 수 없습니다. `BackendServerAuthenticationPolicyType` 정책의 일부여야 합니다.  | 없음 |  | 
|  PublicKeyPolicyNames  |  백엔드 서버에 대한 인증을 제어하는 `PublicKeyPolicyType` 정책 이름 목록으로, 쉼표로 구분됩니다(`BackendServerAuthenticationPolicyType` 정책에서 가져옴). 이 정책은 HTTPS/SSL을 사용하는 백엔드 서버에만 연결할 수 있습니다.  | 없음 |  | 
|  SSLProtocols  |  로드 밸런서가 수락하는 암호 및 프로토콜을 정의하는 `SSLNegotiationPolicyType` 정책에 대해 활성화할 SSL 프로토콜 목록으로, 쉼표로 구분됩니다. 이 정책은 HTTPS/SSL 리스너에만 연결할 수 있습니다.  | 없음 |  | 
|  SSLReferencePolicy  |  보안 모범 사례를 준수하고 로드 밸런서에서 허용하는 암호 및 프로토콜을 정의하는 정책에 대해 활성화하려는 사전 정의된 AWS 보안 `SSLNegotiationPolicyType` 정책의 이름입니다. 이 정책은 HTTPS/SSL 리스너에만 연결할 수 있습니다.  | 없음 |  | 
|  Stickiness Cookie Expiration  |  각 쿠키가 유효한 시간(초)입니다.  |  `0`   |  `0`\$1`1000000`  | 
|  Stickiness Policy  |  세션 중에 사용자로부터 나오는 모든 요청이 동일한 서버 인스턴스로 전송되도록 사용자 세션을 특정 서버 인스턴스에 바인딩합니다.  |  `false`   | true false  | 

## aws:elbv2:listener:default
<a name="command-options-general-elbv2-listener-default"></a>

Application Load Balancer 또는 Network Load Balancer에서 기본 리스너(포트 80)를 구성합니다.

이 네임스페이스는 공유 로드 밸런서를 사용하는 환경에는 적용되지 않습니다. 공유 로드 밸런서에는 기본 리스너가 없습니다.


**네임스페이스: `aws:elbv2:listener:default`**  

| **이름**  | **설명**  | **기본값**  | **유효값**  | 
| --- | --- | --- | --- | 
|  DefaultProcess  |  일치하는 규칙이 없는 경우 트래픽을 전달할 [프로세스](#command-options-general-environmentprocess)의 이름입니다.  |  `default`  |  프로세스 이름  | 
|  ListenerEnabled  |  `false`로 설정하면 리스너가 비활성화됩니다. 이 옵션을 사용하여 포트 80에서 기본 리스너를 비활성화할 수 있습니다.  |  `true`  |  `true` `false`  | 
|  Protocol  |  처리할 트래픽의 프로토콜입니다.  |  Application Load Balancer 사용 시: `HTTP` Network Load Balancer 사용 시: `TCP`  |  Application Load Balancer 사용 시: `HTTP`, `HTTPS`  Network Load Balancer 사용 시: `TCP`  | 
|  Rules  |  리스너에 적용할 [규칙](#command-options-general-elbv2-listenerrule) 목록입니다. 이 옵션은 Application Load Balancer를 사용하는 환경에만 적용할 수 있습니다.  |  없음  |  쉼표로 구분된 규칙 이름 목록입니다.  | 
|  SSLCertificateArns  |  리스너에 바인딩할 SSL 인증서의 Amazon 리소스 이름(ARN) 입니다. 이 옵션은 Application Load Balancer를 사용하는 환경에만 적용할 수 있습니다.  |  없음  |  IAM 또는 ACM에 저장된 인증서의 ARN  | 
|  SSLPolicy  |  리스너에 적용할 보안 정책을 지정합니다. 이 옵션은 Application Load Balancer를 사용하는 환경에만 적용할 수 있습니다.  | 없음(ELB 기본값) |  로드 밸런서 보안 정책의 이름  | 

## aws:elbv2:listener:listener\$1port
<a name="command-options-general-elbv2-listener"></a>

Application Load Balancer 또는 Network Load Balancer에서 추가 리스너를 구성합니다.

**참고**  
공유 Application Load Balancer의 경우 `Rule` 옵션만 지정할 수 있습니다. 다른 옵션은 공유 로드 밸런서에는 적용되지 않습니다.


**네임스페이스: `aws:elbv2:listener:listener_port`**  

| **이름**  | **설명**  | **기본값**  | **유효값**  | 
| --- | --- | --- | --- | 
|  DefaultProcess  |  일치하는 규칙이 없는 경우 트래픽이 전달되는 [프로세스](#command-options-general-environmentprocess)의 이름입니다.  |  `default`  |  프로세스 이름  | 
|  ListenerEnabled  |  `false`로 설정하면 리스너가 비활성화됩니다. 이 옵션을 사용하여 포트 80에서 기본 리스너를 비활성화할 수 있습니다.  |  `true`  |  `true` `false`  | 
|  Protocol  |  처리할 트래픽의 프로토콜입니다.  |  Application Load Balancer 사용 시: `HTTP` Network Load Balancer 사용 시: `TCP`  |  Application Load Balancer 사용 시: `HTTP`, `HTTPS`  Network Load Balancer 사용 시: `TCP`  | 
|  Rules  |  리스너에 적용할 [규칙](#command-options-general-elbv2-listenerrule) 목록입니다. 이 옵션은 Application Load Balancer를 사용하는 환경에만 적용할 수 있습니다. 사용자 환경에서 공유 Application Load Balancer를 사용하고 리스너에 이 옵션을 지정하지 않은 경우 Elastic Beanstalk는 `default` 규칙을 포트 80 리스너에 자동으로 연결합니다.  |  없음  |  쉼표로 구분된 규칙 이름 목록입니다.  | 
|  SSLCertificateArns  |  리스너에 바인딩할 SSL 인증서의 Amazon 리소스 이름(ARN) 입니다. 이 옵션은 Application Load Balancer를 사용하는 환경에만 적용할 수 있습니다.  |  없음  |  IAM 또는 ACM에 저장된 인증서의 ARN  | 
|  SSLPolicy  |  리스너에 적용할 보안 정책을 지정합니다. 이 옵션은 Application Load Balancer를 사용하는 환경에만 적용할 수 있습니다.  | 없음(ELB 기본값) |  로드 밸런서 보안 정책의 이름  | 

## aws:elbv2:listenerrule:rule\$1name
<a name="command-options-general-elbv2-listenerrule"></a>

Application Load Balancer의 리스너 규칙을 정의합니다. 요청이 규칙의 호스트 이름 또는 경로와 일치할 경우 로드 밸런서는 요청을 지정된 프로세스로 전달합니다. 규칙을 사용하려면 `Rules` 옵션을 사용하여 [`aws:elbv2:listener:listener_port`](#command-options-general-elbv2-listener) 네임스페이스에서 리스너로 규칙을 추가합니다.

**참고**  
Network Load Balancer를 사용하는 환경에는 이 네임스페이스를 적용할 수 없습니다.


**네임스페이스: `aws:elbv2:listenerrule:rule_name`**  

| **이름**  | **설명**  | **기본값**  | **유효값**  | 
| --- | --- | --- | --- | 
|  HostHeaders  |  일치시킬 호스트 이름 목록입니다. 예를 들어 `my.example.com`입니다.  |  전용 로드 밸런서: 없음 공유 로드 밸런서: 환경의 CNAME  |  각 이름은 최대 128자를 포함할 수 있습니다. 패턴에는 대문자와 소문자, 숫자, 하이픈(–) 및 최대 3개의 와일드카드 문자(`*`은 0개 이상의 문자와 일치하며 `?`은 정확히 한 문자와 일치)가 포함될 수 있습니다. 둘 이상의 이름을 쉼표로 구분하여 나열할 수 있습니다. Application Load Balancer는 최대 5개의 `HostHeader` 및 `PathPattern` 조합 규칙을 지원합니다. 자세한 내용은 *Application Load Balancer 사용 설명서*의 [호스트 조건](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/load-balancer-listeners.html#host-conditions)을 참조하세요.  | 
|  PathPatterns  |  일치시킬 경로 패턴(예: `/img/*`)입니다. 이 옵션은 Application Load Balancer를 사용하는 환경에만 적용할 수 있습니다.  |  없음  |  각 패턴은 최대 128자를 포함할 수 있습니다. 패턴에는 대문자와 소문자, 숫자, 하이픈(–) 및 최대 3개의 와일드카드 문자(`*`은 0개 이상의 문자와 일치하고 `?`은 정확히 한 문자와 일치)가 포함될 수 있습니다. 쉼표로 구분된 여러 경로 패턴을 추가할 수 있습니다. Application Load Balancer는 최대 5개의 `HostHeader` 및 `PathPattern` 조합 규칙을 지원합니다. 자세한 내용은 *Application Load Balancer 사용 설명서*의 [경로 조건](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/load-balancer-listeners.html#path-conditions)을 참조하세요.  | 
|  Priority  |  여러 규칙이 일치하는 경우 이 규칙이 우선합니다. 번호가 낮을수록 우선 순위가 높습니다. 두 규칙의 우선 순위가 동일할 수는 없습니다. 공유 로드 밸런서를 사용하는 경우 Elastic Beanstalk는 공유 환경 전체에서 규칙 우선 순위를 상대적으로 취급하고 생성 시 절대 우선 순위에 매핑합니다.  |  `1`  |  `1`\$1`1000`  | 
|  Process  |  이 규칙이 요청과 일치하는 경우 트래픽을 전달할 [프로세스](#command-options-general-environmentprocess)의 이름입니다.  |  `default`  |  프로세스 이름  | 

## aws:elbv2:loadbalancer
<a name="command-options-general-elbv2"></a>

Application Load Balancer를 구성합니다.

공유 로드 밸런서의 경우 `SharedLoadBalancer` 및 `SecurityGroups` 옵션만 유효합니다.

**참고**  
Network Load Balancer를 사용하는 환경에는 이 네임스페이스를 적용할 수 없습니다.


**네임스페이스: `aws:elbv2:loadbalancer`**  

| **이름**  | **설명**  | **기본값**  | **유효값**  | 
| --- | --- | --- | --- | 
|  AccessLogsS3Bucket  |  액세스 로그가 저장되는 Amazon S3 버킷입니다. 이 버킷은 환경과 같은 리전에 있어야 하며 로드 밸런서 쓰기 액세스를 허용해야 합니다.  |  없음  |  버킷 이름  | 
|  AccessLogsS3Enabled  |  액세스 로그 스토리지를 활성화합니다.  |  `false`  |  `true` `false`  | 
|  AccessLogsS3Prefix  |  액세스 로그 이름 앞에 붙는 접두사입니다. 기본적으로 로드 밸런서는 지정한 버킷의 디렉터리 이름 AWSLogs에 로그를 업로드합니다. 다른 디렉터리 내에 AWSLogs 디렉터리를 배치하려면 접두사를 지정하세요.  |  없음  |    | 
|  IdleTimeout  |  클라이언트 및 인스턴스에 대한 연결을 종료하기 전에 요청이 완료될 때까지 대기하는 시간(초)입니다.  |  없음  |  `1`\$1`3600`  | 
|  IpAddressType  | 환경의 로드 밸런서에 대한 IP 주소 형식 구성을 지정합니다. *듀얼 스택* 옵션을 사용하여 IPv4 프로토콜과 함께 IPv6 프로토콜을 활성화합니다. *듀얼 스택* 옵션은 Application Load Balancer 및 Network Load Balancer에서만 지원됩니다. 단일 인스턴스 환경 및 Classic Load Balancer를 사용하는 환경은 이를 지원하지 않습니다. *듀얼 스택* 옵션을 지원하려면 환경의 VPC와 모든 VPC 서브넷에 IPv6 CIDR 블록이 연결되어 있어야 합니다. 자세한 내용은 [듀얼 스택 Elastic Beanstalk 로드 밸런서 구성](environments-cfg-elbv2-ipv6-dualstack.md) 단원을 참조하십시오.  | ipv4 | ipv4, 듀얼 스택 | 
|  ManagedSecurityGroup  |  새 보안 그룹을 만드는 대신 기존 보안 그룹을 환경의 로드 밸런서에 할당합니다. 이 설정을 사용하려면 이 네임스페이스의 `SecurityGroups` 설정을 업데이트하여 보안 그룹의 ID를 포함시키고 자동 생성된 보안 그룹의 ID(존재하는 경우)를 제거해야 합니다. 로드 밸런서의 트래픽을 환경의 EC2 인스턴스로 보내도록 허용하기 위해 Elastic Beanstalk에서는 관리형 보안 그룹의 인바운드 트래픽을 허용하는 규칙을 인스턴스의 보안 그룹에 추가합니다.  |  Elastic Beanstalk에서 로드 밸런서에 대해 생성한 보안 그룹입니다.  |  보안 그룹 ID  | 
|  SecurityGroups  |  로드 밸런서에 연결할 보안 그룹의 목록입니다. `DisableDefaultEC2SecurityGroup`([aws:autoscaling:launchconfiguration](#command-options-general-autoscalinglaunchconfiguration))이 `true`로 설정된 경우 필수입니다. 기본 Elastic Beanstalk EC2 보안 그룹에서 옵트아웃한 로드 밸런싱된 환경은 이 옵션을 사용하여 하나 이상의 보안 그룹을 제공해야 합니다. 자세한 내용은 단원을 참조하십시오[EC2 보안 그룹 관리](using-features.managing.ec2.instances.sg.md). 공유 로드 밸런서의 경우 이 값을 지정하지 않으면 Elastic Beanstalk에서 관리하는 기존 보안 그룹이 로드 밸런서에 이미 연결되어 있는지 확인합니다. 로드 밸런서에 연결되어 있지 않으면 Elastic Beanstalk에서 보안 그룹을 생성하여 로드 밸런서에 연결합니다. Elastic Beanstalk는 로드 밸런서를 공유하는 마지막 환경이 종료되면 이 보안 그룹을 삭제합니다. 로드 밸런서 보안 그룹은 Amazon EC2 인스턴스 보안 그룹 수신 규칙을 설정하는 데 사용됩니다.  |  Elastic Beanstalk에서 로드 밸런서에 대해 생성한 보안 그룹입니다.  |  쉼표로 구분된 보안 그룹 ID의 목록입니다.  | 
|  SharedLoadBalancer  |  공유 로드 밸런서의 Amazon 리소스 이름(ARN)입니다. 이 옵션은 Application Load Balancer에만 관련이 있습니다. [aws:elasticbeanstalk:environment](#command-options-general-elasticbeanstalkenvironment) 네임스페이스의 `LoadBalancerIsShared` 옵션이 `true`로 설정된 경우에 필요합니다. 환경 생성 후에는 공유 로드 밸런서 ARN을 변경할 수 없습니다. 유효한 값의 조건: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/elasticbeanstalk/latest/dg/command-options-general.html) 예: `arn:aws:elasticloadbalancing:us-east-2:123456789012:loadbalancer/app/FrontEndLB/0dbf78d8ad96abbc`  |  없음  |  여기에 설명된 모든 기준을 충족하는 유효한 로드 밸런서의 ARN입니다.  | 

## aws:rds:dbinstance
<a name="command-options-general-rdsdbinstance"></a>

연결된 Amazon RDS DB 인스턴스를 구성합니다.


**네임스페이스: `aws:rds:dbinstance`**  

| **이름**  | **설명**  | **기본값**  | **유효값**  | 
| --- | --- | --- | --- | 
|  DBAllocatedStorage  |  할당된 데이터베이스 스토리지 크기로 기가바이트(GB) 단위입니다.  |  MySQL: `5` Oracle: `10` sqlserver-se: `200` sqlserver-ex: `30` sqlserver-web: `30`  |  MySQL: `5`-`1024` Oracle: `10`-`1024` sqlserver: 수정 불가능  | 
|  DBDeletionPolicy  |  환경을 종료할 때 DB 인스턴스의 스냅샷을 유지, 삭제 또는 생성할지 여부를 지정합니다. 이 옵션은 `HasCoupledDatabase` 및 이 네임스페이스의 옵션과 함께 작동합니다.  DB 인스턴스를 삭제하면 데이터가 영구 손실됩니다.   |  `Delete`   |  `Delete`  `Retain`  `Snapshot`   | 
|  DBEngine  |  이 인스턴스에서 사용할 데이터베이스 엔진의 이름입니다.  |  `mysql`   |  `mysql`  `oracle-se1`  `sqlserver-ex`  `sqlserver-web`  `sqlserver-se`  `postgres`   | 
|  DBEngineVersion  |  데이터베이스 엔진의 버전 번호입니다.  |  `5.5`   |    | 
|  DBInstanceClass  |  데이터베이스 인스턴스 유형입니다.  |  `db.t2.micro`  (Amazon VPC에서 실행하지 않는 환경의 경우 `db.m1.large`)   |  자세한 내용은 *Amazon 관계형 데이터베이스 서비스 사용 설명서*의 [DB 인스턴스 클래스](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Concepts.DBInstanceClass.html)를 참조하세요.  | 
|  DBPassword  |  데이터베이스 인스턴스에 대한 마스터 사용자 암호의 이름입니다.  |  없음  |    | 
|  DBSnapshotIdentifier  |  복구할 DB 스냅샷에 대한 식별자.  |  없음  |    | 
|  DBUser  |  DB 인스턴스에 대한 마스터 사용자 이름입니다.  |  **ebroot**   |    | 
|  HasCoupledDatabase  |  DB 인스턴스를 환경에 연결할지 여부를 지정합니다. `true`(으)로 토글된 경우, Elastic Beanstalk는 사용자 환경에 연결된 새 DB 인스턴스를 생성합니다. `false`(으)로 토글된 경우, Elastic Beanstalk가 DB 인스턴스를 사용자 환경에서 분리하기 시작합니다. 이 옵션은 `DBDeletionPolicy` 및 이 네임스페이스의 옵션과 함께 작동합니다.  참고: 이전 데이터베이스를 분리한 후 이 값을 다시 `true`으(로) 토글하는 경우 Elastic Beanstalk는 이전 데이터베이스 옵션 설정을 사용하여 새 데이터베이스를 생성합니다. 그러나 환경의 보안을 유지하기 위해 기존 `DBUser` 및 `DBPassword` 설정은 유지하지 않습니다. `DBUser` 및 `DBPassword`을(를) 다시 지정해야 합니다.   |  `false`   |  `true`  `false`   | 
|  MultiAZDatabase  |  데이터베이스 인스턴스 다중 AZ 배포를 생성해야 할지 여부를 지정합니다. Amazon 관계형 데이터베이스 서비스(RDS)에서 다중 AZ 배포에 대한 자세한 내용은 *Amazon 관계형 데이터베이스 서비스 사용 설명서*의 [리전 및 가용 영역](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Concepts.RegionsAndAvailabilityZones.html)을 참조하세요.  |  `false`   |  `true`  `false`   | 

# 플랫폼별 옵션
<a name="command-options-specific"></a>

일부 Elastic Beanstalk 플랫폼은 플랫폼과 관련된 옵션 네임스페이스를 정의합니다. 각 플랫폼에 대한 이러한 네임스페이스 및 해당 옵션은 아래에 나열되어 있습니다.

**참고**  
이전에는 Amazon Linux AMI(이전 Amazon Linux 2)에 기반한 플랫폼 버전에서 다음 두 기능 및 각 기능에 대한 네임스페이스가 플랫폼별 기능으로 간주되었으며 플랫폼별로 여기에 나열되었습니다.  
**정적 파일을 위한 프록시 구성** – `aws:elasticbeanstalk:environment:proxy:staticfiles`
**AWS X-Ray 지원** - `aws:elasticbeanstalk:xray`
Amazon Linux 2 플랫폼 버전에서 Elastic Beanstalk는 모든 지원 플랫폼에서 일관된 방식으로 이러한 기능을 구현합니다. 이제 관련 네임스페이스는 [모든 환경의 일반 옵션](command-options-general.md) 페이지에 나열되어 있습니다. 이름이 다른 네임스페이스를 가진 플랫폼에 대해서는 여전히 이 페이지에 언급되어 있습니다.

**Topics**
+ [Docker 플랫폼 옵션](#command-options-docker)
+ [Go 플랫폼 옵션](#command-options-golang)
+ [Java SE 플랫폼 옵션](#command-options-plain-java)
+ [Java with Tomcat 플랫폼 옵션](#command-options-java)
+ [Linux 플랫폼 옵션의 .NET Core](#command-options-dotnet-core-linux)
+ [.NET 플랫폼 옵션](#command-options-net)
+ [Node.js 플랫폼 옵션](#command-options-nodejs)
+ [PHP 플랫폼 옵션](#command-options-php)
+ [Python 플랫폼 옵션](#command-options-python)
+ [Ruby 플랫폼 옵션](#command-options-ruby)

## Docker 플랫폼 옵션
<a name="command-options-docker"></a>

다음 Docker별 구성 옵션은 Docker 및 미리 구성된 Docker 플랫폼에 적용됩니다.

**참고**  
이러한 구성 옵션은 다음에 적용되지 않습니다.  
Docker Compose를 사용하는 Docker 플랫폼(Amazon Linux 2)
멀티컨테이너 도커 플랫폼(Amazon Linux AMI AL1) - 이 플랫폼은 사용 중지됨


**네임스페이스: `aws:elasticbeanstalk:environment:proxy`**  

|  **이름**  |  **설명**  |  **기본값**  |  **유효값**  | 
| --- | --- | --- | --- | 
|  ProxyServer  |  프록시로 사용할 웹 서버를 지정합니다.  |  `nginx`  |  `nginx` `none` – *Amazon Linux AM* 및 *DC를 사용하는 Docker만*  | 

## Go 플랫폼 옵션
<a name="command-options-golang"></a>

### Amazon Linux AMI(Amazon Linux 2 이전) 플랫폼 옵션
<a name="command-options-golang.alami"></a>

#### 네임스페이스: `aws:elasticbeanstalk:container:golang:staticfiles`
<a name="command-options-golang.alami.staticfiles"></a>

다음 네임스페이스를 사용하여 정적 파일을 제공하도록 프록시 서버를 구성할 수 있습니다. 프록시 서버가 지정된 경로에서 파일 요청을 수신하면 요청을 애플리케이션으로 라우팅하는 대신 파일을 직접 제공합니다. 따라서 애플리케이션에서 처리해야 하는 요청 수가 줄어듭니다.

프록시 서버가 제공하는 경로를 정적 자산이 포함된 소스 코드의 폴더에 매핑합니다. 이 네임스페이스에서 정의하는 각 옵션은 다른 경로를 매핑합니다.


|  **이름**  |  **값**  | 
| --- | --- | 
|  프록시 서버가 파일을 제공할 경로입니다. 예: `/images`. `subdomain.eleasticbeanstalk.com/images`에 있는 파일을 제공합니다.  |  파일이 포함된 폴더의 이름입니다. 예: `staticimages`. 소스 번들의 최상위 레벨에 있는 `staticimages` 폴더에서 파일을 제공합니다.  | 

## Java SE 플랫폼 옵션
<a name="command-options-plain-java"></a>

### Amazon Linux AMI(Amazon Linux 2 이전) 플랫폼 옵션
<a name="command-options-plain-java.alami"></a>

#### 네임스페이스: `aws:elasticbeanstalk:container:java:staticfiles`
<a name="command-options-plain-java.alami.staticfiles"></a>

다음 네임스페이스를 사용하여 정적 파일을 제공하도록 프록시 서버를 구성할 수 있습니다. 프록시 서버가 지정된 경로에서 파일 요청을 수신하면 요청을 애플리케이션으로 라우팅하는 대신 파일을 직접 제공합니다. 따라서 애플리케이션에서 처리해야 하는 요청 수가 줄어듭니다.

프록시 서버가 제공하는 경로를 정적 자산이 포함된 소스 코드의 폴더에 매핑합니다. 이 네임스페이스에서 정의하는 각 옵션은 다른 경로를 매핑합니다.


|  **이름**  |  **값**  | 
| --- | --- | 
|  프록시 서버가 파일을 제공할 경로입니다. 예: `/images`. `subdomain.eleasticbeanstalk.com/images`에 있는 파일을 제공합니다.  |  파일이 포함된 폴더의 이름입니다. 예: `staticimages`. 소스 번들의 최상위 레벨에 있는 `staticimages` 폴더에서 파일을 제공합니다.  | 

## Java with Tomcat 플랫폼 옵션
<a name="command-options-java"></a>


**네임스페이스: `aws:elasticbeanstalk:application:environment`**  

|  **이름**  |  **설명**  |  **기본값**  |  **유효값**  | 
| --- | --- | --- | --- | 
|  JDBC\$1CONNECTION\$1STRING  |  외부 데이터베이스에 대한 연결 문자열입니다.  |  해당 사항 없음  |  해당 사항 없음  | 

자세한 정보는 [환경 변수 및 기타 소프트웨어 설정](environments-cfg-softwaresettings.md)을 참조하세요.


**네임스페이스: `aws:elasticbeanstalk:container:tomcat:jvmoptions`**  

|  **이름**  |  **설명**  |  **기본값**  |  **유효값**  | 
| --- | --- | --- | --- | 
|  JVM Options  |  시작 시 JVM으로 명령줄 옵션을 전달합니다.  |  해당 사항 없음  |  해당 사항 없음  | 
|  Xmx  |  최대 JVM 힙 크기입니다.  |  `256m`  |  해당 사항 없음  | 
|  XX:MaxPermSize  |  클래스 정의 및 연결된 메타데이터를 저장하는 데 사용되는 JVM 힙의 섹션입니다.  이 옵션은 Java 8 이전의 Java 버전에만 적용되며 Amazon Linux 2 이상에 기반한 Elastic Beanstalk Tomcat 플랫폼에서는 지원되지 않습니다.   |  `64m`  |  해당 사항 없음  | 
|  Xms  |  초기 JVM 힙 크기입니다.  |  `256m`  |  해당 사항 없음  | 
|  *optionName*  |  Tomcat 플랫폼에서 정의하는 옵션 이외에 임의 JVM 옵션을 지정합니다.  |  해당 사항 없음  |  해당 사항 없음  | 


**네임스페이스: `aws:elasticbeanstalk:environment:proxy`**  

|  **이름**  |  **설명**  |  **기본값**  |  **유효값**  | 
| --- | --- | --- | --- | 
|  GzipCompression  |  `false`로 설정하면 응답 압축이 비활성화됩니다. *Amazon Linux AMI(이전 Amazon Linux 2) 플랫폼 버전에서만 유효합니다.*  |  `true`  |  `true` `false`  | 
|  ProxyServer  |  환경 인스턴스에서 사용할 프록시를 설정합니다. 이 옵션을 `apache`로 설정하면 Elastic Beanstalk는 [Apache 2.4](https://httpd.apache.org/docs/2.4/)를 사용합니다. 호환되지 않는 프록시 구성 설정으로 인해 애플리케이션을 [Apache 2.2](https://httpd.apache.org/docs/2.2/)에서 마이그레이션할 준비가 되지 않은 경우 `apache/2.2`로 설정합니다. *이 값은 Amazon Linux AMI(이전 Amazon Linux 2) 플랫폼 버전에서만 유효합니다.* [nginx](https://www.nginx.com/)를 사용하려면 `nginx`로 설정합니다. Amazon Linux 2 플랫폼 버전으로 시작하는 기본값입니다. 자세한 내용은 [프록시 서버 구성](java-tomcat-proxy.md)을(를) 참조하세요.  |  `nginx`(Amazon Linux 2) `apache`(Amazon Linux AMI)  |  `apache` `apache/2.2` – *Amazon Linux AMI만 해당* `nginx`  | 

## Linux 플랫폼 옵션의 .NET Core
<a name="command-options-dotnet-core-linux"></a>


**네임스페이스: `aws:elasticbeanstalk:environment:proxy`**  

|  **이름**  |  **설명**  |  **기본값**  |  **유효값**  | 
| --- | --- | --- | --- | 
|  ProxyServer  |  프록시로 사용할 웹 서버를 지정합니다.  |  `nginx`  |  `nginx` `none`  | 

## .NET 플랫폼 옵션
<a name="command-options-net"></a>


**네임스페이스: `aws:elasticbeanstalk:container:dotnet:apppool`**  

|  **이름**  |  **설명**  |  **기본값**  |  **유효값**  | 
| --- | --- | --- | --- | 
|  Target Runtime  |  애플리케이션에 대한 .NET Framework 버전을 선택합니다.  |  `4.0`  |  `2.0` `4.0`  | 
|  Enable 32-bit Applications  |  32비트 애플리케이션을 실행하려면 `True`로 설정합니다.  |  `False`  |  `True` `False`  | 

## Node.js 플랫폼 옵션
<a name="command-options-nodejs"></a>


**네임스페이스: `aws:elasticbeanstalk:environment:proxy`**  

|  **이름**  |  **설명**  |  **기본값**  |  **유효값**  | 
| --- | --- | --- | --- | 
|  ProxyServer  |  환경 인스턴스에서 사용할 프록시를 설정합니다.  |  `nginx`  |  `apache` `nginx`  | 

### Amazon Linux AMI(Amazon Linux 2 이전) 플랫폼 옵션
<a name="command-options-nodejs.alami"></a>

#### 네임스페이스: `aws:elasticbeanstalk:container:nodejs`
<a name="command-options-nodejs.alami.nodejs"></a>


|  **이름**  |  **설명**  |  **기본값**  |  **유효값**  | 
| --- | --- | --- | --- | 
|  NodeCommand  |  Node.js 애플리케이션을 시작하는 데 사용하는 명령입니다. 빈 문자열이 지정되어 있으면 `app.js`, `server.js`, `npm start`가 순서대로 사용됩니다.  |  ""  |  해당 사항 없음  | 
|  NodeVersion  |  Node.js 버전. (예: `4.4.6`) 지원되는 Node.js 버전은 Node.js 플랫폼 버전 간에 달라집니다. 현재 지원되는 버전 목록은 지원되는 *AWS Elastic Beanstalk 플랫폼* 문서의 [Node.js](https://docs.aws.amazon.com/elasticbeanstalk/latest/platforms/platforms-supported.html#platforms-supported.nodejs) 단원을 참조하세요.  현재 사용 중인 Node.js 버전에 대한 지원이 플랫폼에서 제거되면 [플랫폼 업데이트](using-features.platform.upgrade.md)를 수행하기 전에 버전 설정을 변경하거나 제거해야 합니다. 하나 이상의 Node.js 버전에 대해 보안 취약성이 발견된 경우 이러한 상황이 발생할 수 있습니다. 이러한 상황이 발생하면 구성된 [NodeVersion](#command-options-nodejs)을 지원하지 않는 새 플랫폼 버전으로 업데이트할 수 없습니다. 새 환경을 생성할 필요가 없도록 하기 위해 *NodeVersion* 구성 옵션을 이전 플랫폼 버전과 새 플랫폼 버전에서 모두 지원하는 Node.js 버전으로 변경하거나 [옵션 설정을 제거](environment-configuration-methods-after.md)한 후 플랫폼 업데이트를 수행합니다.   | varies | varies | 
|  GzipCompression  |  gzip 압축이 활성화되는지 여부를 지정합니다. ProxyServer를 `none`으로 설정하면 gzip 압축이 비활성화됩니다.  |  `false`  |  `true` `false`  | 
|  ProxyServer  |  Node.js 연결에 프록시하는 데 사용해야 할 웹 서버를 지정합니다. ProxyServer가 `none`으로 설정되면 정적 파일 매핑이 적용되지 않고 gzip 압축이 비활성화됩니다.  |  `nginx`  |  `apache` `nginx` `none`  | 

#### 네임스페이스: `aws:elasticbeanstalk:container:nodejs:staticfiles`
<a name="command-options-nodejs.alami.staticfiles"></a>

다음 네임스페이스를 사용하여 정적 파일을 제공하도록 프록시 서버를 구성할 수 있습니다. 프록시 서버가 지정된 경로에서 파일 요청을 수신하면 요청을 애플리케이션으로 라우팅하는 대신 파일을 직접 제공합니다. 따라서 애플리케이션에서 처리해야 하는 요청 수가 줄어듭니다.

프록시 서버가 제공하는 경로를 정적 자산이 포함된 소스 코드의 폴더에 매핑합니다. 이 네임스페이스에서 정의하는 각 옵션은 다른 경로를 매핑합니다.

**참고**  
`aws:elasticbeanstalk:container:nodejs::ProxyFiles`를 `none`으로 설정하면 정적 파일 설정이 적용되지 않습니다.


|  **이름**  |  **값**  | 
| --- | --- | 
|  프록시 서버가 파일을 제공할 경로입니다. 예: `/images`. `subdomain.eleasticbeanstalk.com/images`에 있는 파일을 제공합니다.  |  파일이 포함된 폴더의 이름입니다. 예: `staticimages`. 소스 번들의 최상위 레벨에 있는 `staticimages` 폴더에서 파일을 제공합니다.  | 

## PHP 플랫폼 옵션
<a name="command-options-php"></a>


**네임스페이스: `aws:elasticbeanstalk:container:php:phpini`**  

|  **이름**  |  **설명**  |  **기본값**  |  **유효값**  | 
| --- | --- | --- | --- | 
|  document\$1root  |  퍼블릭 웹 루트로 처리되는 프로젝트의 하위 디렉터리를 지정합니다.  |  `/`  |  빈 문자열은 `/`로 처리되거나 `/`로 시작하는 문자열을 지정합니다.  | 
|  memory\$1limit  |  PHP 환경에 할당된 메모리 양입니다.  |  `256M`  |  해당 사항 없음  | 
|  zlib.output\$1compression  |  PHP가 출력을 위해 압축을 사용해야 하는지 여부를 지정합니다.  |  `Off`  |  `On` `Off` `true` `false`  | 
|  allow\$1url\$1fopen  |  PHP의 파일 기능을 통해 웹사이트나 FTP 서버와 같은 원격 위치에서 데이터를 검색할 수 있는지 여부를 지정합니다.  |  `On`  |  `On` `Off` `true` `false`  | 
|  display\$1errors  |  오류 메시지가 출력의 일부인지 여부를 지정합니다.  |  `Off`  |  `On` `Off`  | 
|  max\$1execution\$1time  |  환경에서 스크립트를 종료할 때까지 스크립트가 실행될 수 있는 최대 시간(초)을 설정합니다.  |  `60`  |  `0` \$1 `9223372036854775807`(PHP\$1INT\$1MAX)  | 
|  composer\$1options  |  **composer.phar install** 명령을 통해 Composer를 사용하여 종속 항목을 설치할 때 사용하는 사용자 지정 옵션을 설정합니다. 자세한 내용은 *getcomposer.org* 웹 사이트에서 [설치](https://getcomposer.org/doc/03-cli.md#install-i)를 참조하세요.  |  해당 사항 없음  |  해당 사항 없음  | 


**네임스페이스: `aws:elasticbeanstalk:environment:proxy`**  

|  **이름**  |  **설명**  |  **기본값**  |  **유효값**  | 
| --- | --- | --- | --- | 
|  ProxyServer  |  환경 인스턴스에서 사용할 프록시를 설정합니다.  |  `nginx`  |  `apache` `nginx`  | 

**참고**  
PHP 플랫폼에 대한 자세한 내용은 [Elastic Beanstalk PHP 플랫폼 사용](create_deploy_PHP.container.md) 단원을 참조하십시오.

## Python 플랫폼 옵션
<a name="command-options-python"></a>


**네임스페이스: `aws:elasticbeanstalk:application:environment`**  

|  **이름**  |  **설명**  |  **기본값**  |  **유효값**  | 
| --- | --- | --- | --- | 
|  DJANGO\$1SETTINGS\$1MODULE  |  사용할 설정 파일을 지정합니다.  |  해당 사항 없음  |  해당 사항 없음  | 

자세한 정보는 [환경 변수 및 기타 소프트웨어 설정](environments-cfg-softwaresettings.md)을 참조하세요.


**네임스페이스: `aws:elasticbeanstalk:container:python`**  

|  **이름**  |  **설명**  |  **기본값**  |  **유효값**  | 
| --- | --- | --- | --- | 
|  WSGIPath  |  WSGI 애플리케이션이 포함된 파일. 이 파일에는 호출할 수 있는 `application`이 있어야 합니다.  |  Amazon Linux 2 Python 플랫폼 버전: `application` Amazon Linux AMI Python 플랫폼 버전: `application.py`  |  해당 사항 없음  | 
|  NumProcesses  |  WSGI 애플리케이션을 실행하는 경우 프로세스 그룹에서 시작해야 하는 데몬 프로세스의 수입니다.  |  `1`  |  해당 사항 없음  | 
|  NumThreads  |  WSGI 애플리케이션을 실행하는 경우 프로세스 그룹 내에서 각 데몬 프로세스의 요청을 처리하기 위해 생성할 스레드 수입니다.  |  `15`  |  해당 사항 없음  | 


**네임스페이스: `aws:elasticbeanstalk:environment:proxy`**  

|  **이름**  |  **설명**  |  **기본값**  |  **유효값**  | 
| --- | --- | --- | --- | 
|  ProxyServer  |  환경 인스턴스에서 사용할 프록시를 설정합니다.  |  `nginx`  |  `apache` `nginx`  | 

### Amazon Linux AMI(Amazon Linux 2 이전) 플랫폼 옵션
<a name="command-options-python.alami"></a>

#### 네임스페이스: `aws:elasticbeanstalk:container:python:staticfiles`
<a name="command-options-python.alami.staticfiles"></a>

다음 네임스페이스를 사용하여 정적 파일을 제공하도록 프록시 서버를 구성할 수 있습니다. 프록시 서버가 지정된 경로에서 파일 요청을 수신하면 요청을 애플리케이션으로 라우팅하는 대신 파일을 직접 제공합니다. 따라서 애플리케이션에서 처리해야 하는 요청 수가 줄어듭니다.

프록시 서버가 제공하는 경로를 정적 자산이 포함된 소스 코드의 폴더에 매핑합니다. 이 네임스페이스에서 정의하는 각 옵션은 다른 경로를 매핑합니다.

기본적으로 Python 환경에서 프록시 서버는 `static` 경로의 `/static` 폴더에서 모든 파일을 제공합니다.


**네임스페이스: `aws:elasticbeanstalk:container:python:staticfiles`**  

|  **이름**  |  **값**  | 
| --- | --- | 
|  프록시 서버가 파일을 제공할 경로입니다. 예: `/images`. `subdomain.eleasticbeanstalk.com/images`에 있는 파일을 제공합니다.  |  파일이 포함된 폴더의 이름입니다. 예: `staticimages`. 소스 번들의 최상위 레벨에 있는 `staticimages` 폴더에서 파일을 제공합니다.  | 

## Ruby 플랫폼 옵션
<a name="command-options-ruby"></a>


**네임스페이스: `aws:elasticbeanstalk:application:environment`**  

|  **이름**  |  **설명**  |  **기본값**  |  **유효값**  | 
| --- | --- | --- | --- | 
|  RAILS\$1SKIP\$1MIGRATIONS  |  사용자의 애플리케이션을 대신해 ``rake db:migrate``를 실행할지 여부 또는 건너뛰어야 할지 여부를 지정합니다. 이 값은 Rails 3 애플리케이션에만 적용됩니다.  |  `false`  |  `true` `false`  | 
|  RAILS\$1SKIP\$1ASSET\$1COMPILATION  |  컨테이너가 사용자의 애플리케이션을 대신해 ``rake assets:precompile` `을 실행할지 여부 또는 건너뛰어야 할지 여부를 지정합니다. 이 값 역시 Rails 3 애플리케이션에만 적용됩니다.  |  `false`  |  `true` `false`  | 
|  BUNDLE\$1WITHOUT  |  Gemfile에서 종속성을 설치할 때 무시하는 콜론(`:`)으로 구분된 그룹 목록입니다.  |  `test:development`  |  해당 사항 없음  | 
|  RACK\$1ENV  |  애플리케이션을 실행할 수 있는 환경 단계를 지정합니다. 공통 환경의 예에는 개발, 프로덕션, 테스트가 포함됩니다.  |  `production`  |  해당 사항 없음  | 

자세한 내용은 [환경 변수 및 기타 소프트웨어 설정](environments-cfg-softwaresettings.md)를 참조하세요.

# 사용자 지정 옵션
<a name="configuration-options-custom"></a>

`aws:elasticbeanstalk:customoption` 네임스페이스를 사용하여 다른 구성 파일의 `Resources` 블록에서 읽을 수 있는 옵션 및 값을 정의합니다. 사용자 지정 옵션을 사용하여 단일 구성 파일에서 사용자 지정 설정을 수집합니다.

예를 들어, 환경을 시작하는 사용자가 구성 가능한 리소스를 정의하는 복잡한 구성 파일이 존재할 수 있습니다. `Fn::GetOptionSetting`을 사용하여 사용자 지정 옵션의 값을 검색할 경우 사용자가 쉽게 검색하여 수정할 수 있는 다른 구성 파일에 해당 옵션의 정의를 넣을 수 있습니다.

또한 사용자 지정 옵션은 구성 옵션이므로 API 수준에서 설정하여 구성 파일에 설정된 값을 무시할 수 있습니다. 자세한 내용은 [우선 순위](command-options.md#configuration-options-precedence) 섹션을 참조하십시오.

사용자 지정 옵션은 다른 옵션과 같은 방법으로 정의합니다.

```
option_settings:
  aws:elasticbeanstalk:customoption:
    option name: option value
```

예를 들어, 다음 구성 파일은 `ELBAlarmEmail`이라는 옵션을 생성하고 값을 `someone@example.com`으로 설정합니다.

```
option_settings:
  aws:elasticbeanstalk:customoption:
    ELBAlarmEmail: someone@example.com
```

다른 위치의 구성 파일은 `Fn::GetOptionSetting`을 사용하여 옵션을 읽어서 `Endpoint` 속성 값을 채우는 SNS 주제를 정의합니다.

```
Resources:
  MySNSTopic:
    Type: AWS::SNS::Topic
    Properties:
      Subscription:
        - Endpoint: 
            Fn::GetOptionSetting:
              OptionName: ELBAlarmEmail
              DefaultValue: nobody@example.com
          Protocol: email
```

`Fn::GetOptionSetting`을 사용하는 더 많은 예제 코드 조각은 [Elastic Beanstalk 환경 리소스 추가 및 사용자 지정](environment-resources.md) 단원에서 확인할 수 있습니다.

# 구성 파일(`.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)

# Elastic Beanstalk 저장된 구성 사용
<a name="environment-configuration-savedconfig"></a>

환경의 구성은 Amazon Simple Storage Service(Amazon S3)에서 객체로 저장하여 환경 생성 중 다른 환경에 적용하거나 실행 중인 환경에 적용할 수 있습니다. *저장된 구성*은 환경의 [플랫폼 버전](concepts.platforms.md), [티어](concepts.md#concepts-tier), [구성 옵션](command-options.md) 설정 및 태그를 정의하는 YAML 형식 템플릿입니다.

저장된 구성을 생성할 때 해당 구성에 태그를 적용하고 기존 저장된 구성의 태그를 편집할 수 있습니다. 저장된 구성에 적용된 태그는 `Tags:` 키를 사용하여 저장된 구성에 지정된 태그와 관련이 없습니다. 두 번째 태그는 환경에 저장된 구성을 적용할 때 환경에 적용됩니다. 자세한 내용은 [저장된 구성 태그 지정](environment-configuration-savedconfig-tagging.md)을 참조하세요.

**참고**  
몇 가지 방법을 사용하여 저장된 구성을 생성하고 Elastic Beanstalk 환경에 적용할 수 있습니다. 여기에는 Elastic Beanstalk 콘솔, EB CLI 및 AWS CLI가 포함됩니다.  
저장된 구성을 생성 및 적용하는 대체 방법의 예는 다음 주제를 참조하세요.  
[환경 생성 이전에 구성 옵션 설정](environment-configuration-methods-before.md)
[환경 생성 중 구성 옵션 설정](environment-configuration-methods-during.md)
[환경 생성 후 구성 옵션 설정](environment-configuration-methods-after.md)

Elastic Beanstalk Management Console에서 환경의 현재 상태로부터 저장된 구성을 생성합니다.

**환경의 구성을 저장하려면**

1. [Elastic Beanstalk 콘솔](https://console.aws.amazon.com/elasticbeanstalk)을 열고 **리전** 목록에서를 선택합니다 AWS 리전.

1. 탐색 창에서 **환경**을 선택한 다음 목록에서 환경의 이름을 선택합니다.

1. **작업(Actions)**을 선택한 후 **구성 저장(Save configuration)**을 선택합니다.

1. 화면에 표시되는 양식을 사용하여 저장된 구성의 이름을 지정합니다. 또는 간단한 설명을 제공하고 태그 키 및 값을 추가합니다.

1. **저장**을 선택합니다.  
![\[Elastic Beanstalk 콘솔의 구성 저장 페이지\]](http://docs.aws.amazon.com/ko_kr/elasticbeanstalk/latest/dg/images/environment-cfg-saveconfiguration-dialog.png)

저장된 구성에는 콘솔 또는 Elastic Beanstalk API를 사용하는 기타 모든 클라이언트의 환경에 적용한 모든 설정이 포함됩니다. 환경을 이전 상태로 복원하기 위해 나중에 환경에 저장된 구성을 적용하거나 [환경 생성](environments-create-wizard.md) 중 새 환경에 저장된 구성을 적용할 수 있습니다.

다음 예에 나와 있는 대로 EB CLI [**eb config**](eb3-config.md) 명령을 사용하여 구성을 다운로드할 수 있습니다. *NAME*은 저장된 구성의 이름입니다.

```
eb config get NAME
```

**환경을 생성하는 동안 저장된 구성을 적용하려면(Elastic Beanstalk 콘솔)**

1. [Elastic Beanstalk 콘솔](https://console.aws.amazon.com/elasticbeanstalk)을 열고 **리전** 목록에서를 선택합니다 AWS 리전.

1. 탐색 창에서 **애플리케이션**을 선택한 다음 목록에서 애플리케이션의 이름을 선택합니다.

1. 탐색 창에서 애플리케이션 이름을 찾은 다음 **저장된 구성**을 선택합니다.

1. 적용할 저장된 구성을 선택한 다음 [**Launch environment**]를 선택합니다.

1. 마법사를 진행하여 환경을 생성합니다.

저장된 구성에는 [구성 파일](ebextensions.md)을 사용하여 적용한 애플리케이션의 소스 코드 내 설정은 포함되지 않습니다. 구성 파일 및 저장된 구성 모두에 동일한 설정이 적용되면 저장된 구성의 설정이 우선합니다. 마찬가지로, Elastic Beanstalk 콘솔에 지정된 옵션이 저장된 구성의 옵션을 재정의합니다. 자세한 내용은 [우선 순위](command-options.md#configuration-options-precedence) 단원을 참조하십시오.

저장된 구성은 Elastic Beanstalk S3 버킷에서 애플리케이션을 따라 이름이 지정된 폴더에 저장됩니다. 예를 들어, 계정 번호 123456789012에 대한 us-west-2 리전 내 `my-app` 애플리케이션의 구성은 `s3://elasticbeanstalk-us-west-2-123456789012/resources/templates/my-app/`에서 찾을 수 있습니다.

저장된 구성을 텍스트 편집기에서 열어 해당 내용을 봅니다. 다음 구성의 예는 Elastic Beanstalk Management Console을 사용하여 시작한 웹 서버 환경의 구성을 보여줍니다.

```
EnvironmentConfigurationMetadata:
  Description: Saved configuration from a multicontainer Docker environment created with the Elastic Beanstalk Management Console
  DateCreated: '1520633151000'
  DateModified: '1520633151000'
Platform:
  PlatformArn: arn:aws:elasticbeanstalk:us-east-2::platform/Java 8 running on 64bit Amazon Linux/2.5.0
OptionSettings:
  aws:elasticbeanstalk:command:
    BatchSize: '30'
    BatchSizeType: Percentage
  aws:elasticbeanstalk:sns:topics:
    Notification Endpoint: me@example.com
  aws:elb:policies:
    ConnectionDrainingEnabled: true
    ConnectionDrainingTimeout: '20'
  aws:elb:loadbalancer:
    CrossZone: true
  aws:elasticbeanstalk:environment:
    ServiceRole: aws-elasticbeanstalk-service-role
  aws:elasticbeanstalk:application:
    Application Healthcheck URL: /
  aws:elasticbeanstalk:healthreporting:system:
    SystemType: enhanced
  aws:autoscaling:launchconfiguration:
    IamInstanceProfile: aws-elasticbeanstalk-ec2-role
    InstanceType: t2.micro
    EC2KeyName: workstation-uswest2
  aws:autoscaling:updatepolicy:rollingupdate:
    RollingUpdateType: Health
    RollingUpdateEnabled: true
EnvironmentTier:
  Type: Standard
  Name: WebServer
AWSConfigurationTemplateVersion: 1.1.0.0
Tags:
  Cost Center: WebApp Dev
```

저장된 구성의 내용을 수정하여 Amazon S3의 동일한 위치에 저장할 수 있습니다. 저장된 구성이 올바른 위치에 적절한 형식으로 저장되면 Elastic Beanstalk Management Console을 사용하여 환경에 적용할 수 있습니다.

지원되는 키는 다음과 같습니다.
+ **AWSConfigurationTemplateVersion**(필수) – 구성 템플릿 버전(1.1.0.0)입니다.

  ```
  AWSConfigurationTemplateVersion: 1.1.0.0
  ```
+ **플랫폼** – 환경의 플랫폼 버전의 Amazon 리소스 이름(ARN)입니다. 플랫폼에 ARN 또는 솔루션 스택 이름을 지정할 수 있습니다.

  ```
  Platform:
    PlatformArn: arn:aws:elasticbeanstalk:us-east-2::platform/Java 8 running on 64bit Amazon Linux/2.5.0
  ```
+ **SolutionStack** – 환경 생성에 사용된 [솔루션 스택](concepts.platforms.md)의 전체 이름입니다.

  ```
  SolutionStack: 64bit Amazon Linux 2017.03 v2.5.0 running Java 8
  ```
+ **OptionSettings** – 환경에 적용할 [구성 옵션](command-options.md) 설정입니다. 예를 들어 다음 항목은 인스턴스 유형을 t2.micro로 설정합니다.

  ```
  OptionSettings:
    aws:autoscaling:launchconfiguration:
      InstanceType: t2.micro
  ```
+ **태그** – 환경 내에서 생성된 리소스에 적용할 최대 47개의 태그입니다.

  ```
  Tags:
    Cost Center: WebApp Dev
  ```
+ **EnvironmentTier** – 생성할 환경 유형입니다. 웹 서버 환경의 경우 이 섹션은 제외시킬 수 있습니다(웹 서버가 기본값임). 작업자 환경의 경우 다음을 사용합니다.

  ```
  EnvironmentTier:
    Name: Worker
    Type: SQS/HTTP
  ```

**참고**  
몇 가지 방법을 사용하여 저장된 구성을 생성하고 Elastic Beanstalk 환경에 적용할 수 있습니다. 여기에는 Elastic Beanstalk 콘솔, EB CLI 및 AWS CLI가 포함됩니다.  
저장된 구성을 생성 및 적용하는 대체 방법의 예는 다음 주제를 참조하세요.  
[환경 생성 이전에 구성 옵션 설정](environment-configuration-methods-before.md)
[환경 생성 중 구성 옵션 설정](environment-configuration-methods-during.md)
[환경 생성 후 구성 옵션 설정](environment-configuration-methods-after.md)

# 저장된 구성 태그 지정
<a name="environment-configuration-savedconfig-tagging"></a>

 AWS Elastic Beanstalk 저장된 구성에 태그를 적용할 수 있습니다. 태그는 AWS 리소스와 연결된 키-값 페어입니다. Elastic Beanstalk 리소스 태그 지정, 사용 사례, 태그 키 및 값 제약, 지원되는 리소스 유형에 대한 자세한 내용은 [Elastic Beanstalk 애플리케이션 리소스 태그 지정](applications-tagging-resources.md)을 참조하세요.

저장된 구성을 생성할 때 태그를 지정할 수 있습니다. 기존 저장된 구성에서 태그를 추가 또는 제거할 수 있으며, 기존 태그의 값을 업데이트할 수 있습니다. 각 저장된 구성에 최대 50개의 태그를 추가할 수 있습니다.

## 저장된 구성을 생성하는 동안 태그 추가
<a name="environment-configuration-savedconfig-tagging.create"></a>

Elastic Beanstalk 콘솔을 사용하여 [구성을 저장](environment-configuration-savedconfig.md)할 때 **구성 저장** 페이지에서 태그 키 및 값을 지정할 수 있습니다.

EB CLI를 사용하여 구성을 저장하는 경우 `--tags` 옵션과 **[eb config](eb3-config.md)**를 함께 사용하여 태그를 추가합니다.

```
~/workspace/my-app$ eb config --tags mytag1=value1,mytag2=value2
```

 AWS CLI 또는 기타 API 기반 클라이언트에서 **[create-configuration-template](https://docs.aws.amazon.com/cli/latest/reference/elasticbeanstalk/create-configuration-template.html)** 명령의 `--tags` 파라미터를 사용하여 태그를 추가합니다.

```
$ aws elasticbeanstalk create-configuration-template \
      --tags Key=mytag1,Value=value1 Key=mytag2,Value=value2 \
      --application-name my-app --template-name my-template --solution-stack-name solution-stack
```

## 기존에 저장된 구성의 태그 관리
<a name="environment-configuration-savedconfig-tagging.manage"></a>

기존 Elastic Beanstalk 저장된 구성에서 태그를 추가, 업데이트 및 삭제할 수 있습니다.

**Elastic Beanstalk 콘솔을 사용하여 저장된 구성의 태그를 관리하려면**

1. [Elastic Beanstalk 콘솔](https://console.aws.amazon.com/elasticbeanstalk)을 열고 **리전** 목록에서를 선택합니다 AWS 리전.

1. 탐색 창에서 **애플리케이션**을 선택한 다음 목록에서 애플리케이션의 이름을 선택합니다.

1. 탐색 창에서 애플리케이션 이름을 찾은 다음 **저장된 구성**을 선택합니다.

1. 관리할 저장된 구성을 선택합니다.

1. [**작업**]을 선택한 다음 [**태그 관리**]를 선택합니다.

1. 화면에 표시되는 양식을 사용하여 태그를 추가, 업데이트 또는 삭제합니다.

1. 변경 사항을 저장하려면 페이지 하단에서 **적용**을 선택합니다.

EB CLI를 사용하여 저장된 구성을 업데이트하는 경우 **[eb tags](eb3-tags.md)**를 사용하여 태그를 추가, 업데이트, 삭제 또는 나열합니다.

예를 들어 다음 명령은 저장된 구성의 태그를 나열합니다.

```
~/workspace/my-app$ eb tags --list --resource "arn:aws:elasticbeanstalk:us-east-2:my-account-id:configurationtemplate/my-app/my-template"
```

다음 명령은 태그 `mytag1`를 업데이트하고 태그 `mytag2`를 삭제합니다.

```
~/workspace/my-app$ eb tags --update mytag1=newvalue --delete mytag2 \
      --resource "arn:aws:elasticbeanstalk:us-east-2:my-account-id:configurationtemplate/my-app/my-template"
```

전체 옵션 목록과 예제를 더 살펴보려면 `eb tags`를 참조하십시오.

 AWS CLI 또는 기타 API 기반 클라이언트에서 **[list-tags-for-resource](https://docs.aws.amazon.com/cli/latest/reference/elasticbeanstalk/list-tags-for-resource.html)** 명령을 사용하여 저장된 구성의 태그를 나열합니다.

```
$ aws elasticbeanstalk list-tags-for-resource --resource-arn "arn:aws:elasticbeanstalk:us-east-2:my-account-id:configurationtemplate/my-app/my-template"
```

**[update-tags-for-resource](https://docs.aws.amazon.com/cli/latest/reference/elasticbeanstalk/update-tags-for-resource.html)** 명령을 사용하여 저장된 구성에서 태그를 추가, 업데이트 또는 삭제합니다.

```
$ aws elasticbeanstalk update-tags-for-resource \
      --tags-to-add Key=mytag1,Value=newvalue --tags-to-remove mytag2 \
      --resource-arn "arn:aws:elasticbeanstalk:us-east-2:my-account-id:configurationtemplate/my-app/my-template"
```

**update-tags-for-resource**의 `--tags-to-add` 파라미터에 추가할 태그 및 업데이트할 모든 태그를 지정합니다. 새로운 태그가 추가되고 기존 태그 값은 업데이트됩니다.

**참고**  
Elastic Beanstalk 저장 구성과 함께 일부 EB CLI 및 AWS CLI 명령을 사용하려면 저장된 구성의 ARN이 필요합니다. ARN을 작성하려면 먼저 다음 명령을 사용하여 저장된 구성의 이름을 검색합니다.  

```
$ aws elasticbeanstalk describe-applications --application-names my-app
```
명령의 출력에서 `ConfigurationTemplates` 키를 찾습니다. 이 요소는 저장된 구성의 이름을 표시합니다. 이 페이지에서 언급한 명령에서 `my-template`이 지정된 위치에 이 이름을 사용합니다.

# 환경 매니페스트(`env.yaml`)
<a name="environment-cfg-manifest"></a>

애플리케이션 소스 번들의 루트에 YAML 형식의 환경 매니페스트를 포함시켜 환경을 생성할 때 사용할 환경 이름, 솔루션 스택, [환경 링크](environment-cfg-links.md)를 구성할 수 있습니다.

이 파일 형식에는 환경 그룹 지원이 포함되어 있습니다. 그룹을 사용하려면 매니페스트에서 끝에 \$1 기호를 붙여 환경 이름을 지정합니다. 환경을 생성하거나 업데이트할 때 `--group-name`(AWS CLI) 또는 `--env-group-suffix` (EB CLI)를 사용하여 그룹 이름을 지정합니다. 그룹에 대한 자세한 내용은 [Elastic Beanstalk 환경 그룹 생성 및 업데이트](environment-mgmt-compose.md) 단원을 참조하십시오.

다음 매니페스트 예제에서는 웹 서버 환경의 기반이 되는 작업자 환경 구성 요소의 링크가 있는 웹 서버 환경을 정의합니다. 이 매니페스트에서는 그룹을 사용하여 동일한 소스 번들로 여러 가지 환경을 생성합니다.

**`~/myapp/frontend/env.yaml`**

```
AWSConfigurationTemplateVersion: 1.1.0.0
SolutionStack: 64bit Amazon Linux 2015.09 v2.0.6 running Multi-container Docker 1.7.1 (Generic)
OptionSettings:
  aws:elasticbeanstalk:command:
    BatchSize: '30'
    BatchSizeType: Percentage
  aws:elasticbeanstalk:sns:topics:
    Notification Endpoint: me@example.com
  aws:elb:policies:
    ConnectionDrainingEnabled: true
    ConnectionDrainingTimeout: '20'
  aws:elb:loadbalancer:
    CrossZone: true
  aws:elasticbeanstalk:environment:
    ServiceRole: aws-elasticbeanstalk-service-role
  aws:elasticbeanstalk:application:
    Application Healthcheck URL: /
  aws:elasticbeanstalk:healthreporting:system:
    SystemType: enhanced
  aws:autoscaling:launchconfiguration:
    IamInstanceProfile: aws-elasticbeanstalk-ec2-role
    InstanceType: t2.micro
    EC2KeyName: workstation-uswest2
  aws:autoscaling:updatepolicy:rollingupdate:
    RollingUpdateType: Health
    RollingUpdateEnabled: true
Tags:
  Cost Center: WebApp Dev
CName: front-A08G28LG+
EnvironmentName: front+
EnvironmentLinks:
  "WORKERQUEUE" : "worker+"
```

지원되는 키는 다음과 같습니다.
+ **AWSConfigurationTemplateVersion**(필수) – 구성 템플릿 버전(1.1.0.0)입니다.

  ```
  AWSConfigurationTemplateVersion: 1.1.0.0
  ```
+ **플랫폼** – 환경의 플랫폼 버전의 Amazon 리소스 이름(ARN)입니다. 플랫폼에 ARN 또는 솔루션 스택 이름을 지정할 수 있습니다.

  ```
  Platform:
    PlatformArn: arn:aws:elasticbeanstalk:us-east-2::platform/Java 8 running on 64bit Amazon Linux/2.5.0
  ```
+ **SolutionStack** – 환경 생성에 사용된 [솔루션 스택](concepts.platforms.md)의 전체 이름입니다.

  ```
  SolutionStack: 64bit Amazon Linux 2017.03 v2.5.0 running Java 8
  ```
+ **OptionSettings** – 환경에 적용할 [구성 옵션](command-options.md) 설정입니다. 예를 들어 다음 항목은 인스턴스 유형을 t2.micro로 설정합니다.

  ```
  OptionSettings:
    aws:autoscaling:launchconfiguration:
      InstanceType: t2.micro
  ```
+ **태그** – 환경 내에서 생성된 리소스에 적용할 최대 47개의 태그입니다.

  ```
  Tags:
    Cost Center: WebApp Dev
  ```
+ **EnvironmentTier** – 생성할 환경 유형입니다. 웹 서버 환경의 경우 이 섹션은 제외시킬 수 있습니다(웹 서버가 기본값임). 작업자 환경의 경우 다음을 사용합니다.

  ```
  EnvironmentTier:
    Name: Worker
    Type: SQS/HTTP
  ```
+ **CName** – 환경의 CNAME입니다. 그룹을 활성화하려면 이 이름의 끝에 \$1 문자를 포함합니다.

  ```
  CName: front-A08G28LG+
  ```
+ **EnvironmentName** – 생성할 환경 이름입니다. 그룹을 활성화하려면 이 이름의 끝에 \$1 문자를 포함합니다.

  ```
  EnvironmentName: front+
  ```

  그룹이 활성화되어 있으면 환경을 생성할 때 그룹 이름을 지정해야 합니다. Elastic Beanstalk에서는 하이픈을 사용하여 환경 이름에 그룹 이름을 추가합니다. 예를 들어, 환경 이름이 `front+`이고, 그룹 이름이 `dev`이면 Elastic Beanstalk에서는 이름이 `front-dev`인 환경을 생성합니다.
+ **EnvironmentLinks** – 변수 이름 및 환경 이름의 종속성 맵입니다. 다음 예제에서는 `worker+` 환경을 종속시키고 Elastic Beanstalk에 링크 정보를 변수 `WORKERQUEUE`에 저장하도록 지시합니다.

  ```
  EnvironmentLinks:
    "WORKERQUEUE" : "worker+"
  ```

  링크 변수의 값은 연결된 환경의 유형에 따라 달라집니다. 웹 서버 환경의 경우 이 링크는 환경의 CNAME입니다. 작업자 환경의 경우 이 링크는 환경의 Amazon Simple Queue Service(Amazon SQS) 대기열 이름입니다.

**CName**, **EnvironmentName** 및 **EnvironmentLinks** 키는 [환경 그룹](environment-mgmt-compose.md) 및 [다른 환경에 대한 링크](environment-cfg-links.md)를 생성하는 데 사용할 수 있습니다. 이러한 기능은 현재 EB CLI AWS CLI 또는 SDK를 사용할 때 지원됩니다.

# Elastic Beanstalk 환경에서 사용자 지정 Amazon Machine Image(AMI) 사용
<a name="using-features.customenv"></a>

이 섹션에서는 사용자 지정 AMI 사용을 고려해야 하는 경우를 설명하고 환경에서 사용자 지정 AMI를 구성하고 관리하는 절차를 제공합니다. AWS Elastic Beanstalk 환경을 생성할 때 플랫폼 버전에 포함된 표준 Elastic Beanstalk AMI 대신 사용할 Amazon Machine Image(AMI)를 지정할 수 있습니다. 사용자 지정 AMI는 표준 AMI에 포함되어 있지 않은 여러 소프트웨어를 설치해야 할 경우 환경에서 인스턴스를 시작할 때 프로비저닝 시간을 향상할 수 있습니다.

[구성 파일](ebextensions.md)을 사용하면 환경을 빠르고 일관되게 사용자 지정할 수 있습니다. 환경 생성 및 업데이트 중에 구성을 적용하는 데 시간이 오래 걸릴 수 있습니다. 구성 파일에서 여러 서버 구성을 처리해야 하는 경우, 이미 필요한 소프트웨어와 구성이 갖춰진 사용자 지정 AMI를 만들어서 시간을 단축할 수 있습니다.

사용자 지정 AMI를 통해 구성 파일에 적용하기까지 시간이 오래 걸리거나 구현하기 까다로운 하위 수준 구성 요소(예: Linux 커널)를 변경할 수 있습니다. 사용자 지정 AMI를 생성하려면 Amazon EC2에 Elastic Beanstalk 플랫폼 AMI를 시작하고 필요에 따라 소프트웨어와 구성을 사용자 지정한 후 인스턴스를 중지하고 AMI를 저장합니다.

## 사용자 지정 AMI 생성
<a name="using-features.customenv.create"></a>

[EC2 Image Builder](https://aws.amazon.com/image-builder)를 사용하여 이러한 절차의 대안으로 사용자 지정 AMI를 생성하고 관리할 수 있습니다. 자세한 내용은 [Image Builder 사용 설명서](https://docs.aws.amazon.com/imagebuilder/latest/userguide/what-is-image-builder.html)를 참조하세요.

**기본 Elastic Beanstalk AMI를 식별하려면**

1. 명령 창에서 명령을 다음과 같이 실행합니다. 자세한 내용은 *AWS CLI 명령 참조*의 [describe-platform-version](https://docs.aws.amazon.com/cli/latest/reference/elasticbeanstalk/describe-platform-version.html)을 참조하세요.

   사용자 지정 AMI를 사용할 AWS 리전을 지정하고 플랫폼 ARN 및 버전 번호를 애플리케이션이 기반으로 하는 Elastic Beanstalk 플랫폼으로 바꿉니다.

     
**Example - Mac OS/Linux OS**  

   ```
   $ aws elasticbeanstalk describe-platform-version --region us-east-2 \
         --platform-arn "arn:aws:elasticbeanstalk:us-east-2::platform/Node.js 20 running on 64bit Amazon Linux 2023/6.1.7" \
         --query PlatformDescription.CustomAmiList
   [
       {
           "VirtualizationType": "pv",
           "ImageId": ""
       },
       {
           "VirtualizationType": "hvm",
           "ImageId": "ami-020ae06fdda6a0f66"
       }
   ]
   ```  
**Example - Windows OS**  

   ```
   C:\> aws elasticbeanstalk describe-platform-version --region us-east-2 --platform-arn"arn:aws:elasticbeanstalk:us-east-2::platform/
   IIS 10.0 running on 64bit Windows Server 2022/2.15.3" --query PlatformDescription.CustomAmiList
   [
       {
           "VirtualizationType": "pv",
           "ImageId": ""
       },
       {
           "VirtualizationType": "hvm",
           "ImageId": "ami-020ae06fdda6a0f66"
       }
   ]
   ```

1. 결과에서 `ami-020ae06fdda6a0f66`와 같은 형태의 `ImageId` 값을 기록해 두십시오.

값은 애플리케이션과 관련된 플랫폼 버전, EC2 인스턴스 아키텍처 및 AWS 리전의 주식 Elastic Beanstalk AMI입니다. 여러 플랫폼, 아키텍처 또는 AWS 리전에 대한 AMIs를 생성해야 하는 경우이 프로세스를 반복하여 각 조합에 대한 올바른 기본 AMI를 식별합니다.

**참고**  
Elastic Beanstalk 환경에서 시작된 인스턴스에서 AMI를 생성하지 마십시오. Elastic Beanstalk는 프로비저닝 중에 인스턴스를 변경하며, 이는 저장된 AMI에 문제를 일으킬 수 있습니다. Elastic Beanstalk 환경의 인스턴스에서 이미지를 저장하면 인스턴스에 배포된 애플리케이션의 버전이 이미지의 일부분으로 고정됩니다.

Linux의 경우, Elastic Beanstalk에 게시되지 않은 커뮤니티 AMI에서 사용자 지정 AMI를 생성할 수도 있습니다. 최신 [Amazon Linux](https://aws.amazon.com/amazon-linux-ami/) AMI를 시작점으로 사용할 수 있습니다. Elastic Beanstalk에서 관리하지 않는 Linux AMI로 환경을 시작하면 Elastic Beanstalk는 플랫폼 소프트웨어(예: 언어, 프레임워크, 프록시 서버 등)와 [확장 상태 보고](health-enhanced.md) 등의 기능을 지원하는 추가 구성 요소의 설치를 시도합니다.

**참고**  
Windows Server를 기반으로 하는 사용자 지정 AMI에는 1단계 앞부분에서 설명한 것처럼 `describe-platform-version`에서 반환된 Elastic Beanstalk AMI가 필요합니다.

Elastic Beanstalk가 Elastic Beanstalk에서 관리하지 않는 AMI를 사용할 수 있더라도 Elastic Beanstalk가 누락된 구성 요소를 설치하여 프로비저닝 시간이 늘어나면 무엇보다 사용자 지정 AMI 생성의 혜택이 줄어들거나 없어질 수 있습니다. 다른 Linux 배포는 일부 문제 해결을 처리할 수 있으나 공식적으로 지원되지 않습니다. 애플리케이션에 특정 Linux 배포가 필요한 경우, 한 가지 대안은 Docker 이미지를 생성하여 Elastic Beanstalk [Docker 플랫폼](docker.md) 또는 [멀티컨테이너 Docker 플랫폼](create_deploy_docker_ecs.md)에서 실행하는 것입니다.

**사용자 지정 AMI를 생성하려면**

1. [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/)에서 Amazon EC2 콘솔을 엽니다.

1. **인스턴스 시작**을 선택합니다.

1. 기본 Elastic Beanstalk AMI(`describe-platform-version` 사용) 또는 Amazon Linux AMI를 확인한 경우 검색 상자에 해당 AMI ID를 입력합니다. 그런 다음 **Enter**를 누릅니다.

   목록에서 필요에 맞는 다른 커뮤니티 AMI를 검색할 수도 있습니다.
**참고**  
HVM 가상화를 사용하는 AMI를 선택하는 것이 좋습니다. 이러한 AMI는 설명에 **Virtualization type: hvm(가상화 유형: hvm)**이 표시되어 있습니다.  
자세한 내용은 *Amazon EC2 사용 설명서*의 [가상화 유형](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ComponentsAMIs.html#virtualization_types)을 참조하세요.

1. **Select(선택)**를 선택하여 AMI를 선택합니다.

1. 인스턴스 유형을 선택하고 **Next: Configure Instance Details(다음: 인스턴스 정보 구성)**를 선택합니다.

1. **(사용되지 않은 Amazon Linux AMI(AL1) 플랫폼의 경우)** 환경이 지원되는 Linux 기반 플랫폼 또는 Windows 플랫폼에서 실행되는 경우 이 단계를 건너뜁니다.

   **고급 세부 정보** 섹션을 확장하고 **사용자 데이터** 필드에 다음 텍스트를 붙여 넣습니다.

   ```
   #cloud-config
     repo_releasever: repository version number
     repo_upgrade: none
   ```

   *리포지토리 버전 번호*는 AMI 이름의 연월 버전입니다. 예를 들어 2015년 3월 Amazon Linux를 출시한 AMI의 리포지토리 버전 번호는 `2015.03`입니다. Elastic Beanstalk 이미지에서 버전 번호는 Amazon Linux AMI(이전 Amazon Linux 2)를 기반으로 하는 [플랫폼 버전](concepts.platforms.md)의 솔루션 스택 이름에 표시되는 날짜와 일치합니다.
**참고**  
`repo_releasever` 설정은 Amazon Linux AMI에 대한 lock-on-launch 기능을 구성합니다. 이렇게 하면 AMI가 시작될 때 고정된 특정 리포지토리 버전을 사용합니다. 이 기능은 Amazon Linux 2에서 지원되지 않습니다. 환경에서 현재 Amazon Linux 2 플랫폼 브랜치를 사용하는 경우 지정하지 마십시오. Amazon Linux AMI 플랫폼 브랜치(이전 Amazon Linux 2)에서 Elastic Beanstalk와 함께 사용자 지정 AMI를 사용하는 경우에만 이 설정이 필요합니다.  
`repo_upgrade` 설정은 보안 업데이트의 자동 설치를 비활성화합니다. Elastic Beanstalk에서 사용자 지정 AMI를 사용해야 합니다.

1. 마법사를 진행하여 [EC2 인스턴스를 시작](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/launching-an-instance.html)합니다. 메시지가 표시되면 액세스할 키 페어를 선택하여 다음 단계에서 인스턴스에 연결하도록 합니다.

1.  SSH 또는 RDP로 [인스턴스에 연결](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/AccessingInstances.html)합니다.

1. 원하는 사용자 지정을 수행합니다.

1. **(Windows 플랫폼)** EC2Config 서비스 Sysprep을 실행합니다. EC2Config에 대한 자세한 내용은 [EC2Config 서비스를 사용한 Windows 인스턴스 구성](https://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/UsingConfig_WinAMI.html)을 참조하십시오. Sysprep이 AWS Management Console에서 검색할 수 있는 임의 암호를 생성하도록 구성하세요.

1. Amazon EC2 콘솔에서 EC2 인스턴스를 중지합니다. 그런 다음 **인스턴스 작업** 메뉴에서 **이미지 생성(EBS AMI)**을 선택합니다.

1. 추가 AWS 요금이 발생하지 않도록 [ EC2 인스턴스를 종료](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/terminating-instances.html)합니다.

**Elastic Beanstalk 환경에서 사용자 지정 AMI를 사용하려면**

1. [Elastic Beanstalk 콘솔](https://console.aws.amazon.com/elasticbeanstalk)을 열고 **리전** 목록에서을 선택합니다 AWS 리전.

1. 탐색 창에서 **환경**을 선택한 다음 목록에서 환경의 이름을 선택합니다.

1. 탐색 창에서 **구성**을 선택합니다.

1. [**용량**] 구성 범주에서 [**편집**]을 선택합니다.

1. **AMI ID**의 경우 사용자 지정 AMI ID를 입력합니다.

1. 변경 사항을 저장하려면 페이지 하단에서 **적용**을 선택합니다.

사용자 지정 AMI로 새 환경을 생성할 때, AMI를 생성할 때 사용했던 기본 구성과 동일한 플랫폼 버전을 사용해야 합니다.

## 사용자 지정 AMI를 사용하여 환경 관리
<a name="using-features.customenv.managing"></a>

### 플랫폼 업데이트
<a name="using-features.customenv.platform-updates."></a>

사용자 지정 AMI를 사용하는 경우 Elastic Beanstalk는 업데이트가 수동으로 적용되었는지 관리형 플랫폼 업데이트를 통해 적용되었는지에 관계없이 플랫폼 버전이 업데이트될 때 환경에서 동일한 사용자 지정 AMI를 계속 사용합니다. 새로운 플랫폼 버전의 스톡 AMI를 사용하도록 환경이 재설정되지 **않습니다**.

새로운 플랫폼 버전의 재고 AMI를 기반으로 새로운 사용자 지정 AMI를 생성하는 것이 좋습니다. 이렇게 하면 새로운 플랫폼 버전에서 사용할 수 있는 패치가 적용되고 호환되지 않는 패키지 또는 라이브러리 버전으로 인한 배포 실패도 최소화됩니다.

새로운 사용자 지정 AMI 생성에 대한 자세한 내용은 이 주제의 [사용자 지정 AMI 생성](#using-features.customenv.create) 앞부분을 참조하세요.

### 사용자 지정 AMI 제거
<a name="using-features.customenv.platform-updates."></a>

환경에서 사용자 지정 AMI를 제거하고 환경의 플랫폼 버전에 스톡 AMI를 사용하도록 재설정하려면 다음 CLI 명령을 사용하세요.

```
aws elasticbeanstalk update-environment \
  --application-name my-application \
  --environment-name my-environment \
  --region us-east-1 \
  --options-to-remove Namespace=aws:autoscaling:launchconfiguration,OptionName=ImageId
```

**참고**  
서비스 중단을 방지하려면 이 변경 사항을 프로덕션 환경에 적용하기 전에 스톡 AMI로 애플리케이션을 테스트합니다.

## 사용자 지정 AMI 정리
<a name="using-features.customenv.cleanup"></a>

사용자 지정 AMI를 사용한 후 Elastic Beanstalk 환경을 더 이상 시작할 필요가 없으면 해당 AMI를 정리하여 저장 비용을 최소화해 보십시오. 사용자 지정 AMI를 정리하면 Amazon EC2에서 등록 취소되고 기타 관련 리소스가 삭제됩니다. 자세한 내용은 [Linux AMI 등록 취소](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/deregister-ami.html) 또는 [Windows AMI 등록 취소](https://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/deregister-ami.html)를 참조하십시오.

# 사용 중지 플랫폼에 대한 Amazon Machine Image(AMI)에 대한 액세스 보존하기
<a name="using-features.customenv-env-copy"></a>

Elastic Beanstalk는 브랜치에서 사용하는 운영 체제 또는 주 구성 요소가 수명 종료에 도달하면 플랫폼 브랜치 상태를 *사용 중지됨*으로 설정합니다. 플랫폼 브랜치용 *기본* Elastic Beanstalk AMI를 프라이빗으로 설정하여 이 사용 중지된 AMI를 사용하지 않도록 할 수도 있습니다. 프라이빗으로 설정된 AMI를 사용하는 환경에서는 더 이상 인스턴스를 시작할 수 없습니다.

애플리케이션이 사용 중지되기 전에 지원되는 환경으로 마이그레이션할 수 없는 경우, 사용 중인 환경이 이러한 상황일 수 있습니다. 기본 Elastic Beanstalk AMI가 프라이빗으로 설정된 Beanstalk 플랫폼 브랜치에 대한 환경을 업데이트해야 할 수 있습니다. 다른 접근법을 사용할 수도 있습니다. 사용자 환경에서 사용하는 기본 Elastic Beanstalk AMI의 *사본*을 기반으로 기존 환경을 업데이트할 수 있습니다.

이 주제에서는 사용자 환경에서 사용하는 기본 Elastic Beanstalk AMI의 *사본*을 기반으로 기존 환경을 업데이트하는 몇 가지 단계와 독립 실행형 스크립트를 제공합니다. 애플리케이션을 지원되는 플랫폼으로 마이그레이션할 수 있게 되면 애플리케이션 및 지원되는 환경을 유지하기 위한 표준 절차를 계속 사용할 수 있습니다.

## 수동 단계
<a name="using-features.customenv-env-copy.manual-steps"></a>

**기본 Elastic Beanstalk AMI의 AMI 사본을 기반으로 환경을 업데이트하려면**

1. **환경에서 사용 중인 AMI를 확인합니다.** 이 명령은 사용자가 파라미터에 입력한 Elastic Beanstalk 환경에서 사용하는 AMI를 반환합니다. 반환된 값은 다음 단계에서 *source-ami-id*로 사용할 수 있습니다.

   명령 창에서 명령을 다음과 같이 실행합니다. 자세한 내용은 *AWS CLI 명령 참조*에서 [describe-configuration-settings](https://docs.aws.amazon.com/cli/latest/reference/elasticbeanstalk/describe-configuration-settings.html)를 참조하세요.

   복사하려는 소스 AMI를 저장하는 AWS 리전을 지정합니다. 애플리케이션 이름 및 환경 이름을 소스 AMI를 기반으로 하는 애플리케이션 이름 및 환경 이름으로 바꿉니다. 다음과 같이 쿼리 파라미터의 텍스트를 입력합니다.  
**Example**  

   ```
   >aws elasticbeanstalk describe-configuration-settings \
     --application-name my-application \
     --environment-name my-environment \
     --region us-east-2 \
     --query "ConfigurationSettings[0].OptionSettings[?OptionName=='ImageId'] | [0].Value"
   ```

1. **AMI를 계정에 복사합니다.** 이 명령은 이전 단계에서 반환된 *source-ami-id*를 복사하여 생성된 새 AMI를 반환합니다.
**참고**  
이 명령으로 출력되는 새 AMI ID를 기록해 둡니다. 다음 단계에서는 예시 명령의 *copied-ami-id*를 바꾸어 입력해야 합니다.

   명령 창에서 명령을 다음과 같이 실행합니다. 자세한 내용은 *AWS CLI 명령 참조*의 [copy-image](https://docs.aws.amazon.com/cli/latest/reference/ec2/copy-image.html)를 참조하세요.

   복사할 소스 AMI의 AWS 리전(**--source-region**)과 새 사용자 지정 AMI를 사용할 리전(**--region**)을 지정합니다. *source-ami-id*를 복사할 이미지의 AMI로 바꿉니다. 이전 단계의 명령에서 *source-ami-id*가 반환되었습니다. *new-ami-name*을 대상 리전의 새 AMI를 설명하는 이름으로 바꿉니다. 이 절차를 따르는 스크립트는 *source-ami-id* 이름 앞에 "*Copy of*" 문자열을 추가하여 새 AMI 이름을 생성합니다.

   ```
   >aws ec2 copy-image \
       --region us-east-2 \
       --source-image-id source-ami-id \
       --source-region us-east-2 \
       --name new-ami-name
   ```

1. **복사한 AMI를 사용하도록 환경을 업데이트합니다.** 명령이 실행되면 환경의 상태를 반환합니다.

   명령 창에서 명령을 다음과 같이 실행합니다. 자세한 내용은 *AWS CLI 명령 참조*의 [update-environment](https://docs.aws.amazon.com/cli/latest/reference/elasticbeanstalk/update-environment.html)를 참조하세요.

   업데이트해야 하는 환경 및 애플리케이션의 AWS 리전을 지정합니다. 애플리케이션 이름 및 환경 이름을 이전 단계의 *copied-ami-id*와 연결해야 하는 이름으로 바꿉니다. **--option-setttings** 파라미터의 경우 *copied-ami-id*를 이전 명령의 출력에서 기록해 둔 AMI ID로 바꿉니다.

   ```
   >aws elasticbeanstalk update-environment \
     --application-name my-application \
     --environment-name my-environment \
     --region us-east-2 \
     --option-settings "Namespace=aws:autoscaling:launchconfiguration,OptionName=ImageId,Value=copied-ami-id"
   ```

**참고**  
스토리지 비용을 최소화하려면, Elastic Beanstalk 환경을 실행하는 데 필요하지 않은 사용자 지정 AMI를 정리하는 것이 좋습니다. 자세한 내용은 [사용자 지정 AMI 정리](using-features.customenv.md#using-features.customenv.cleanup) 단원을 참조하십시오.

## 독립 실행형 스크립트
<a name="using-features.customenv-env-copy.script"></a>

다음 스크립트는 이전 수동 단계와 동일한 결과를 제공합니다. [copy\$1ami\$1and\$1update\$1env.zip](samples/copy_ami_and_update_env.zip) 링크를 선택하여 스크립트를 다운로드합니다.

### 스크립트 소스: copy\$1ami\$1and\$1update\$1env.sh
<a name="abc"></a>

```
#!/bin/bash

set -ue

USAGE="This script is used to copy an AMI used by your Elastic Beanstalk environment into your account to use in your environment.\n\n" 
USAGE+="Usage:\n\n"
USAGE+="./$(basename $0) [OPTIONS]\n"
USAGE+="OPTIONS:\n"
USAGE+="\t--application-name <application-name>\tThe name of your Elastic Beanstalk application.\n"
USAGE+="\t--environment-name <environment-name>\tThe name of your Elastic Beanstalk environment.\n"
USAGE+="\t--region <region> \t\t\tThe AWS region your Elastic Beanstalk environment is deployed to.\n"
USAGE+="\n\n"
USAGE+="Script Usage Example(s):\n"
USAGE+="./$(basename $0) --application-name my-application --environment-name my-environment --region us-east-1\n"

if [ $# -eq 0 ]; then
  echo -e $USAGE
  exit
fi

while [[ $# -gt 0 ]]; do
  case $1 in
    --application-name)       APPLICATION_NAME="$2"; shift ;;
    --environment-name)       ENVIRONMENT_NAME="$2"; shift ;;
    --region)                 REGION="$2"; shift ;;
    *)                        echo "Unknown option $1" ; echo -e $USAGE ; exit ;;
  esac
  shift
done

aws_cli_version="$(aws --version)"
if [ $? -ne 0 ]; then
  echo "aws CLI not found. Please install it: https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html. Exiting."
  exit 1
fi
echo "Using aws CLI version: ${aws_cli_version}"

account=$(aws sts get-caller-identity --query "Account" --output text)
echo "Using account ${account}"

environment_ami_id=$(aws elasticbeanstalk describe-configuration-settings \
  --application-name "$APPLICATION_NAME" \
  --environment-name "$ENVIRONMENT_NAME" \
  --region "$REGION" \
  --query "ConfigurationSettings[0].OptionSettings[?OptionName=='ImageId'] | [0].Value" \
  --output text)
echo "Image associated with environment ${ENVIRONMENT_NAME} is ${environment_ami_id}"

owned_image=$(aws ec2 describe-images \
  --owners self \
  --image-ids "$environment_ami_id" \
  --region "$REGION" \
  --query "Images[0]" \
  --output text)
if [ "$owned_image" != "None" ]; then
  echo "${environment_ami_id} is already owned by account ${account}. Exiting."
  exit
fi

source_image_name=$(aws ec2 describe-images \
  --image-ids "$environment_ami_id" \
  --region "$REGION" \
  --query "Images[0].Name" \
  --output text)
if [ "$source_image_name" = "None" ]; then
  echo "Cannot find ${environment_ami_id}. Please contact AWS support if you need additional help: https://aws.amazon.com/support."
  exit 1
fi

copied_image_name="Copy of ${source_image_name}"
copied_ami_id=$(aws ec2 describe-images \
  --owners self \
  --filters Name=name,Values="${copied_image_name}" \
  --region "$REGION" \
  --query "Images[0].ImageId" \
  --output text)
if [ "$copied_ami_id" != "None" ]; then
  echo "Detected that ${environment_ami_id} has already been copied by account ${account}. Skipping image copy."
else
  echo "Copying ${environment_ami_id} to account ${account} with name ${copied_image_name}"
  copied_ami_id=$(aws ec2 copy-image \
    --source-image-id "$environment_ami_id" \
    --source-region "$REGION" \
    --name "$copied_image_name" \
    --region "$REGION" \
    --query "ImageId" \
    --output text)
  echo "New AMI ID is ${copied_ami_id}"

  echo "Waiting for ${copied_ami_id} to become available"
  aws ec2 wait image-available \
    --image-ids "$copied_ami_id" \
    --region "$REGION"
  echo "${copied_ami_id} is now available"
fi

echo "Updating environment ${ENVIRONMENT_NAME} to use ${copied_ami_id}"
environment_status=$(aws elasticbeanstalk update-environment \
  --application-name "$APPLICATION_NAME" \
  --environment-name "$ENVIRONMENT_NAME" \
  --option-settings "Namespace=aws:autoscaling:launchconfiguration,OptionName=ImageId,Value=${copied_ami_id}" \
  --region "$REGION" \
  --query "Status" \
  --output text)
echo "Environment ${ENVIRONMENT_NAME} is now ${environment_status}"

echo "Waiting for environment ${ENVIRONMENT_NAME} update to complete"
aws elasticbeanstalk wait environment-updated \
  --application-name "$APPLICATION_NAME" \
  --environment-names "$ENVIRONMENT_NAME" \
  --region "$REGION"
echo "Environment ${ENVIRONMENT_NAME} update complete"
```

**참고**  
스크립트를 실행하려면가 AWS CLI 설치되어 있어야 합니다. 설치 지침은 *AWS Command Line Interface 사용 설명서*의 [AWS CLI의 최신 버전 설치 또는 업데이트](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html)를 참조하세요.  
설치 후 환경을 소유한 AWS 계정을 사용하도록 구성해야 AWS CLI합니다. 자세한 내용은 *AWS Command Line Interface 사용 설명서*의 [AWS CLI구성](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html)을 참조하세요. 또한 계정에 AMI를 생성하고 Elastic Beanstalk 환경을 업데이트할 수 있는 권한도 있어야 합니다.

 이 단계에서는 스크립트가 따르는 프로세스를 설명합니다.

1. 사용 중인 계정을 인쇄합니다.

1. 환경(소스 AMI)에서 사용하는 AMI를 확인합니다.

1. 소스 AMI를 이미 해당 계정이 소유하고 있는지 확인합니다. 계정을 소유하고 있다면 종료합니다.

1. 새 AMI 이름에 사용할 수 있는지 소스 AMI의 이름을 확인합니다. 이는 소스 AMI에 대한 액세스를 확인하는 역할도 수행합니다.

1. 소스 AMI가 이미 계정에 복사되었는지 확인합니다. 이는 계정이 소유하고 있는 복사된 AMI의 이름으로 AMI를 검색하여 수행됩니다. 스크립트 실행 사이에 AMI 이름이 변경된 경우 이미지를 다시 복사합니다.

1. 소스 AMI가 아직 복사되지 않은 경우, 소스 AMI를 계정에 복사하고 새 AMI를 사용할 수 있을 때까지 기다립니다.

1. 새 AMI를 사용하도록 환경 구성을 업데이트합니다.

1. 환경 업데이트가 완료될 때까지 기다립니다.

[copy\$1ami\$1and\$1update\$1env.zip](samples/copy_ami_and_update_env.zip) 파일에서 스크립트를 추출한 후 다음 예시를 실행하여 실행합니다. 예시의 애플리케이션 이름과 환경 이름을 사용자의 값으로 바꿉니다.

```
>sh copy_ami_and_update_env.sh \
  --application-name my-application \
  --environment-name my-environment \
  --region us-east-1
```

**참고**  
스토리지 비용을 최소화하려면, Elastic Beanstalk 환경을 실행하는 데 필요하지 않은 사용자 지정 AMI를 정리하는 것이 좋습니다. 자세한 내용은 [사용자 지정 AMI 정리](using-features.customenv.md#using-features.customenv.cleanup) 단원을 참조하십시오.

# 정적 파일 제공
<a name="environment-cfg-staticfiles"></a>

성능을 향상하려면 웹 애플리케이션 내부의 디렉터리 집합에서 정적 파일(예: HTML 또는 이미지)을 제공하도록 프록시 서버를 구성할 수 있습니다. 지정된 경로에서 프록시 서버가 파일 요청을 수신받으면 요청을 애플리케이션으로 라우팅하지 않고 파일을 직접 제공합니다.

Elastic Beanstalk는 Amazon Linux 2를 기반으로 하는 대부분의 플랫폼 브랜치에서 정적 파일을 제공하도록 프록시 구성을 지원합니다. 한 가지 예외는 Docker입니다.

**참고**  
Python 및 Ruby 플랫폼에서 Elastic Beanstalk는 기본적으로 몇 개의 정적 파일 폴더를 구성합니다. 자세한 내용은 [Python](create-deploy-python-container.md#python-platform-staticfiles) 및 [Ruby](create_deploy_Ruby.container.md#create_deploy_Ruby.container.console.staticfiles)의 정적 파일 구성 섹션을 참조하십시오. 이 페이지에서 설명한 대로 추가 폴더를 구성할 수 있습니다.

## 콘솔을 사용하여 정적 파일 구성
<a name="environment-cfg-staticfiles.console"></a>

**정적 파일을 제공하도록 프록시 서버를 구성합니다.**

1. [Elastic Beanstalk 콘솔](https://console.aws.amazon.com/elasticbeanstalk)을 열고 **리전** 목록에서를 선택합니다 AWS 리전.

1. 탐색 창에서 **환경**을 선택한 다음 목록에서 환경의 이름을 선택합니다.

1. 탐색 창에서 **구성**을 선택합니다.

1. **업데이트, 모니터링 및 로깅** 구성 범주에서 **편집**을 선택합니다.

1. **플랫폼 소프트웨어** 섹션으로 스크롤하여 **정적 파일** 그룹을 찾습니다.

    

   1. 정적 파일 매핑을 추가하려면 **정적 파일 추가**를 선택합니다. 표시되는 추가 행에 정적 파일을 제공할 *경로*와 제공할 정적 파일이 들어 있는 *디렉터리*를 입력합니다.
      + **경로** 필드에서 슬래시(`/`)로 경로 이름을 시작합니다(예: ‘*/images*’).
      + **디렉터리** 필드에 애플리케이션 소스 코드의 루트에 있는 디렉터리 이름을 지정합니다. 슬래시로 시작해서는 안됩니다(예: ‘*static/image-files*’).
**참고**  
**정적 파일** 섹션이 표시되지 않는 경우, [구성 파일](ebextensions.md)로 매핑을 하나 이상 추가해야 합니다. 자세한 내용은 이 페이지의 [구성 옵션을 사용하는 정적 파일 구성](#environment-cfg-staticfiles.namespace)를 참조하십시오.

   1. 매핑을 제거하려면 **제거**를 선택합니다.

1. 변경 사항을 저장하려면 페이지 하단에서 **적용**을 선택합니다.

## 구성 옵션을 사용하는 정적 파일 구성
<a name="environment-cfg-staticfiles.namespace"></a>

구성 옵션을 사용하는 정적 파일 경로 및 디렉터리 위치를 구성하는 데 [구성 파일](ebextensions.md)을 사용할 수 있습니다. 구성 파일을 애플리케이션의 소스 번들에 추가하고 환경 생성 시 또는 추후 배포 시 배포할 수 있습니다.

사용자 환경에서 Amazon Linux 2에 기반한 플랫폼 브랜치를 사용하는 경우 `aws:elasticbeanstalk:environment:proxy:staticfiles` 네임스페이스를 사용합니다.

다음 예제 구성 파일은 `/html` 경로에 있는 `statichtml` 폴더의 파일과 `/images` 경로에 있는 `staticimages` 폴더의 파일을 제공하라고 프록시 서버에 알려 줍니다.

**Example .ebextensions/static-files.config**  

```
option_settings:
  aws:elasticbeanstalk:environment:proxy:staticfiles:
    /html: statichtml
    /images: staticimages
```

Elastic Beanstalk 환경에서 Amazon Linux AMI 플랫폼 버전(이전 Amazon Linux 2)을 사용하는 경우 다음 추가 정보를 읽어 보세요.

### Amazon Linux AMI 플랫폼별 네임스페이스
<a name="environment-cfg-staticfiles.namespace.specific"></a>

Amazon Linux AMI 플랫폼 브랜치에서 정적 파일 구성 네임스페이스는 플랫폼에 따라 다릅니다. 자세한 내용은 다음 페이지 중 하나를 참조하십시오.
+ [Go 구성 네임스페이스](go-environment.md#go-namespaces)
+ [Java SE 구성 네임스페이스](java-se-platform.md#java-se-namespaces)
+ [Tomcat 구성 네임스페이스](java-tomcat-platform.md#java-tomcat-namespaces)
+ [Node.js 구성 네임스페이스](create_deploy_nodejs.container.md#nodejs-namespaces)
+ [Python 구성 네임스페이스](create-deploy-python-container.md#python-namespaces)

# Elastic Beanstalk 환경에 사용할 HTTPS 구성
<a name="configuring-https"></a>

이 섹션의 이 주제에서는 Elastic Beanstalk 환경에 HTTPS를 구성하는 방법을 설명합니다. 사용자 데이터 또는 로그인 정보를 전송하는 애플리케이션에서 HTTPS는 필수입니다.

Elastic Beanstalk 환경에 대한 [사용자 지정 도메인 이름](customdomains.md)을 구매하고 구성한 경우, HTTPS를 사용하여 사용자가 안전하게 웹 사이트에 연결할 수 있습니다.

도메인 이름이 없는 경우, 자체 서명된 인증서가 있는 HTTPS를 개발 및 테스트 용도로 사용할 수 있습니다. 자세한 내용은 [서버 인증서](configuring-https.certificate.md) 단원을 참조하십시오.

**로드 밸런서에서 HTTPS 종료 구성**  
로드 밸런서는 애플리케이션을 실행하는 EC2 인스턴스로 요청을 분산합니다. 또한 로드 밸런서가 있으면 인터넷에 인스턴스를 직접 노출할 필요가 없습니다. Elastic Beanstalk 다중 인스턴스 환경에서 HTTPS를 사용하는 가장 간단한 방법은 로드 밸런서에 대한 보안 리스너를 구성하는 것입니다. 클라이언트와 로드 밸런서 간의 연결은 안전하게 유지되므로 HTTPS를 종료하도록 로드 밸런서를 구성할 수 있습니다. 로그 밸런서와 EC2 인스턴스 간의 백엔드 연결은 HTTP를 사용하기 때문에 추가로 인스턴스를 구성할 필요가 없습니다. 보안 목록 작성기를 구성하는 자세한 지침은 [로드 밸런서에서 HTTPS 종료 구성](configuring-https-elb.md) 단원을 참조하세요.

**EC2 인스턴스에서 HTTPS 종료 구성**  
단일 인스턴스 환경에서 애플리케이션을 실행하거나 로드 밸런서를 거쳐 EC2 인스턴스까지 연결 보안을 유지해야 할 경우, HTTPS를 종료하도록 인스턴스에서 실행되는 프록시 서버를 구성할 수 있습니다. HTTPS 연결을 종료하도록 인스턴스를 구성하려면 [구성 파일](ebextensions.md)을 사용하여 인스턴스에서 실행 중인 소프트웨어를 수정하고, 보안 연결을 허용하도록 보안 그룹을 수정해야 합니다. 자세한 내용은 [인스턴스에서 HTTPS 종료 구성](https-singleinstance.md) 단원을 참조하십시오.

**HTTPS 엔드 투 엔드 구성**  
로드 밸런싱 수행 환경의 종단 간 HTTPS의 경우, 인스턴스와 로드 밸런서 종료를 결합하여 두 연결을 암호화할 수 있습니다. 기본적으로 HTTPS를 사용하여 트래픽을 전달하도록 로드 밸런서를 구성하는 경우, 백엔드 인스턴스가 제시한 인증서를 신뢰합니다. 보안을 극대화하기 위해 신뢰할 퍼블릭 인증서를 제시하지 않는 인스턴스 연결을 금지하는 정책을 로드 밸런서에 연결할 수 있습니다. 자세한 내용은 [로드 밸런싱된 Elastic Beanstalk 환경에서 종단 간 암호화 구성](configuring-https-endtoend.md) 단원을 참조하십시오.

**TCP Passthrough를 사용하여 HTTPS 구성**  
 암호를 해독하지 않고 HTTPS 트래픽을 릴레이하도록 로드 밸런서를 구성할 수도 있습니다. 자세한 내용은 [TCP 패스스루를 위한 환경 로드 밸런서 구성](https-tcp-passthrough.md) 단원을 참조하십시오.

**참고**  
GitHub의 [Does it have Snakes?](https://github.com/awslabs/eb-tomcat-snakes) 샘플 애플리케이션에는 Tomcat 웹 애플리케이션으로 HTTPS를 구성하는 각 방법에 대한 지침과 구성 파일이 포함되어 있습니다. 자세한 내용은 [readme 파일](https://github.com/awslabs/eb-tomcat-snakes/blob/master/README.md) 및 [HTTPS 지침](https://github.com/awslabs/eb-tomcat-snakes/blob/master/src/.ebextensions/inactive/HTTPS.md)을 참조하십시오.

**Topics**
+ [서버 인증서](configuring-https.certificate.md)
+ [로드 밸런서에서 HTTPS 종료 구성](configuring-https-elb.md)
+ [인스턴스에서 HTTPS 종료 구성](https-singleinstance.md)
+ [로드 밸런싱된 Elastic Beanstalk 환경에서 종단 간 암호화 구성](configuring-https-endtoend.md)
+ [TCP 패스스루를 위한 환경 로드 밸런서 구성](https-tcp-passthrough.md)
+ [HTTP-HTTPS 리디렉션 구성](configuring-https-httpredirect.md)

# 서버 인증서
<a name="configuring-https.certificate"></a>

이 주제에서는 HTTPS를 구성하는 데 사용할 수 있는 다양한 유형의 인증서와 각 인증서를 적용할 시기에 대해 설명합니다. 이 섹션의 하위 주제는 자체 인증서를 생성하는 지침과 업로드 방법을 제공합니다.

**AWS Certificate Manager (ACM)**  
ACM은 서버 인증서를 프로비저닝, 관리 및 배포하기 위한 기본 도구입니다. 프로그래밍 방식으로 또는를 사용하여이 작업을 수행할 수 있습니다 AWS CLI. ACM을 사용하면 도메인 이름에 대한 보안 인증서를 무료로 생성할 수 있습니다.

 ACM 인증서는 AWS 로드 밸런서 및 Amazon CloudFront 배포에서만 사용할 수 있으며 ACM은 특정 AWS 리전에서만 사용할 수 있습니다. Elastic Beanstalk에서 ACM 인증서를 사용하려면 [로드 밸런서에서 HTTPS 종료 구성](configuring-https-elb.md) 단원을 참조하십시오. ACM에 대한 자세한 내용은 [https://docs.aws.amazon.com/acm/latest/userguide/acm-overview.html](https://docs.aws.amazon.com/acm/latest/userguide/acm-overview.html)를 참조하세요.

**참고**  
 ACM을 사용할 수 있는 리전 목록은 *Amazon Web Services 일반 참조*의 [ 엔드포인트 및 할당량](https://docs.aws.amazon.com/general/latest/gr/acm.html)을 참조하세요.

 AWS 리전에서 ACM을 사용할 수 없는 경우 타사 또는 자체 서명된 인증서와 프라이빗 키를 AWS Identity and Access Management (IAM)에 업로드할 수 있습니다. 를 사용하여 인증서를 업로드 AWS CLI 할 수 있습니다. IAM에 저장된 인증서는 로드 밸런서와 CloudFront 배포를 통해 사용할 수 있습니다. 자세한 내용은 [IAM에 인증서 업로드](configuring-https-ssl-upload.md) 단원을 참조하십시오.

**타사 인증서**  
리전에서 ACM을 사용할 수 없는 경우, 타사의 보안 인증서를 구매할 수 있습니다. 타사 인증서를 사용하여 로드 밸런서, 백엔드 인스턴스 또는 두 개 모두에서 HTTPS 트래픽의 암호를 해독할 수 있습니다.

**자체 서명된 인증서**  
오픈 소스 도구를 사용하여 개발 및 테스트 용도로 [인증서를 만들어 서명](configuring-https-ssl.md)할 수 있습니다. 자체 서명된 인증서는 무료이며 만들기 쉬우나, 퍼블릭 사이트에서 프런트 엔드 해독에는 사용할 수 없습니다. 클라이언트와 HTTPS 간의 연결에 자체 서명된 인증서를 사용하려는 경우, 사용자의 브라우저에 웹 사이트가 안전하지 않다는 오류 메시지가 표시됩니다. 그러나 자체 서명된 인증서를 사용하여 문제 없이 백엔드 연결을 보호할 수 있습니다.

# X509 인증서 생성 및 서명
<a name="configuring-https-ssl"></a>

`OpenSSL`을 사용하여 애플리케이션의 X509 인증서를 생성할 수 있습니다. OpenSSL은 x509 인증서의 생성 및 서명을 비롯한 다양한 암호화 기능을 지원하는 표준 오픈 소스 라이브러리입니다. OpenSSL에 대한 자세한 내용은 [www.openssl.org](https://www.openssl.org/)를 참조하십시오.

**참고**  
[단일 인스턴스 환경에서 HTTPS를 사용](https-singleinstance.md)하거나 자체 서명된 인증서로 [백엔드에서 다시 암호화](configuring-https-endtoend.md)하려는 경우 인증서를 로컬에서 생성하면 됩니다. 도메인 이름을 소유한 경우에서 인증서를 생성하고 AWS Certificate Manager (ACM)을 사용하여 로드 밸런싱된 환경에서 무료로 AWS 사용할 수 있습니다. 자세한 내용은 *AWS Certificate Manager 사용 설명서*의 [인증서 요청](https://docs.aws.amazon.com/acm/latest/userguide/gs-acm-request.html)을 참조하세요.

OpenSSL이 이미 설치되어 있는지 확인하려면 명령줄에서 `openssl version`을 실행합니다. 설치되어 있지 않은 경우 [퍼블릭 GitHub 리포지토리](https://github.com/openssl/openssl)의 지침을 참조하여 소스 코드를 빌드하고 설치하거나, 선호하는 패키지 관리자를 사용할 수 있습니다. OpenSSL은 Elastic Beanstalk의 Linux 이미지에도 설치되어 있으므로 빠른 대안은 [EB CLI](eb-cli3.md)의 **eb ssh** 명령을 사용하여 실행 중인 환경의 EC2 인스턴스에 연결하는 것입니다.

```
~/eb$ eb ssh
[ec2-user@ip-255-55-55-255 ~]$ openssl version
OpenSSL 1.0.1k-fips 8 Jan 2015
```

인증서 서명 요청(CSR)을 생성하려면 RSA 프라이빗 키를 생성해야 합니다. 프라이빗 키를 생성하려면 **openssl genrsa** 명령을 사용합니다.

```
[ec2-user@ip-255-55-55-255 ~]$ openssl genrsa 2048 > privatekey.pem
Generating RSA private key, 2048 bit long modulus
.................................................................................................................................+++
...............+++
e is 65537 (0x10001)
```

*privatekey.pem*  
프라이빗 키를 저장할 파일의 이름입니다. 일반적으로 **openssl genrsa** 명령은 프라이빗 키 내용을 화면에 인쇄하지만, 이 명령은 출력을 파일로 파이프합니다. 파일 이름을 선택한 후, 나중에 검색할 수 있도록 안전한 곳에 파일을 저장합니다. 프라이빗 키를 잃어버리면 인증서를 사용할 수 없습니다.

CSR은 디지털 서버 인증서를 신청하기 위해 인증 기관(CA)에 보내는 파일입니다. CSR을 생성하려면 **openssl req** 명령을 사용합니다.

```
$ openssl req -new -key privatekey.pem -out csr.pem
You are about to be asked to enter information that will be incorporated 
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
```

요청된 정보를 입력하고 **Enter(입력)**를 누릅니다. 다음 표에 각 필드에 대한 설명과 예가 나와 있습니다.


****  

| 이름 | 설명 | 예제 | 
| --- | --- | --- | 
| 국가 이름 | 해당 국가의 두 자리 ISO 약자. | US = 미국 | 
| 주 또는 지방 | 해당 조직이 위치한 주 또는 지방의 이름. 이 이름은 약어로 지정할 수 없습니다. | 워싱턴 | 
| 시 이름 | 해당 조직이 위치한 주 또는 시의 이름. | 시애틀 | 
| 조직 이름 | 해당 조직의 정식 이름. 조직 이름의 약칭을 사용하지 마세요. | Example Corporation | 
| 조직 단위 | 조직에 대한 추가 정보(선택 사항). | 마케팅 | 
| 일반 이름 | 웹 사이트의 정규화된 도메인 이름입니다. 이는 사용자가 사이트를 방문할 때 보는 도메인 이름과 일치해야 합니다. 그렇지 않으면 인증서 오류가 표시됩니다. | www.example.com | 
| 이메일 주소 | 사이트 관리자의 이메일 주소입니다. | someone@example.com | 

서명을 위해 서명 요청을 제3자에게 제출하거나, 개발 및 테스트를 위해 자체 서명할 수 있습니다. 자체 서명된 인증서는 로드 밸런서와 EC2 인스턴스 간의 백엔드 HTTPS에도 사용할 수 있습니다.

인증서에 서명하려면 **openssl x509** 명령을 사용합니다. 다음 예에서는 이전 단계의 프라이빗 키(*privatekey.pem*)와 서명 요청(*csr.pem*)을 사용하여 *365*일 동안 유효한 *public.crt*라는 퍼블릭 인증서를 생성합니다.

```
$ openssl x509 -req -days 365 -in csr.pem -signkey privatekey.pem -out public.crt
Signature ok
subject=/C=us/ST=washington/L=seattle/O=example corporation/OU=marketing/CN=www.example.com/emailAddress=someone@example.com
Getting Private key
```

나중에 사용할 수 있도록 프라이빗 키와 퍼블릭 인증서를 보관하십시오. 서명 요청을 무시할 수 있습니다. 항상 [안전한 위치에 프라이빗 키를 저장](https-storingprivatekeys.md)하고 소스 코드에 이를 추가하지 마십시오.

Windows Server 플랫폼에서 인증서를 사용하려면 이를 PFX 형식으로 변환해야 합니다. 다음 명령을 사용하여 프라이빗 키와 퍼블릭 인증서 파일에서 PFX 인증서를 생성합니다.

```
$ openssl pkcs12 -export -out example.com.pfx -inkey privatekey.pem -in public.crt
Enter Export Password: password
Verifying - Enter Export Password: password
```

이제 인증서가 있으므로 로드 밸런서에서 사용할 수 있도록 [이를 IAM에 업로드](configuring-https-ssl-upload.md)하거나, [HTTPS를 종료하도록 환경의 인스턴스를 구성](https-singleinstance.md)할 수 있습니다.

# IAM에 인증서 업로드
<a name="configuring-https-ssl-upload"></a>

인증서를 Elastic Beanstalk 환경의 로드 밸런서와 함께 사용하려면 인증서와 프라이빗 키를 AWS Identity and Access Management (IAM)에 업로드합니다. Elastic Load Balancing 로드 밸런서 및 Amazon CloudFront 배포에서 IAM에 저장된 인증서를 사용할 수 있습니다.

**참고**  
AWS Certificate Manager (ACM)은 서버 인증서를 프로비저닝, 관리 및 배포하는 데 선호되는 도구입니다. ACM 인증서 요청에 대한 자세한 내용은 *AWS Certificate Manager 사용 설명서*의 [인증서 요청](https://docs.aws.amazon.com/acm/latest/userguide/gs-acm-request.html)을 참조하세요. 서드 파티 인증서를 ACM으로 가져오는 방법에 대한 자세한 내용은 *AWS Certificate Manager 사용 설명서*의 [인증서 가져오기](https://docs.aws.amazon.com/acm/latest/userguide/import-certificate.html)를 참조하세요. [AWS 리전에서 ACM을 사용할 수 없는 경우에만 IAM을 사용하여 인증서를 업로드합니다](https://docs.aws.amazon.com/general/latest/gr/acm.html).

 AWS Command Line Interface (AWS CLI)를 사용하여 인증서를 업로드할 수 있습니다. 다음 명령은 *private-key.pem*이라는 프라이빗 키가 있는 *https-cert.crt*라는 자체 서명된 인증서를 업로드합니다.

```
$ aws iam upload-server-certificate --server-certificate-name elastic-beanstalk-x509 --certificate-body file://https-cert.crt --private-key file://private-key.pem
{
    "ServerCertificateMetadata": {
        "ServerCertificateId": "AS5YBEIONO2Q7CAIHKNGC",
        "ServerCertificateName": "elastic-beanstalk-x509",
        "Expiration": "2017-01-31T23:06:22Z",
        "Path": "/",
        "Arn": "arn:aws:iam::123456789012:server-certificate/elastic-beanstalk-x509",
        "UploadDate": "2016-02-01T23:10:34.167Z"
    }
}
```

`file://` 접두사는에 현재 디렉터리에 있는 파일의 콘텐츠를 로드 AWS CLI 하도록 지시합니다. *elastic-beanstalk-x509*는 IAM에서 인증서를 호출할 이름을 지정합니다.

인증 기관에서 인증서를 구매했으며 인증서 체인 파일을 받은 경우, `--certificate-chain` 옵션을 포함시켜 인증서 체인 파일도 업로드합니다.

```
$ aws iam upload-server-certificate --server-certificate-name elastic-beanstalk-x509 --certificate-chain file://certificate-chain.pem --certificate-body file://https-cert.crt --private-key file://private-key.pem
```

인증서의 Amazon 리소스 이름(ARN)을 적어 둡니다. HTTPS를 사용하도록 로드 밸런서 구성 설정을 업데이트할 때 이를 사용합니다.

**참고**  
IAM에 업로드된 인증서는 환경의 로드 밸런서에서 더 이상 사용되지 않는 경우에도 저장 상태를 유지합니다. 여기에는 기밀 데이터가 들어 있습니다. 환경에 더 이상 인증서가 필요하지 않은 경우 인증서를 삭제하십시오. IAM에서 인증서를 삭제하는 방법에 대한 자세한 내용은 [https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_server-certs.html#delete-server-certificate](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_server-certs.html#delete-server-certificate) 단원을 참조하십시오.

IAM의 서버 인증서에 대한 자세한 내용은 *IAM 사용 설명서*의 [서버 인증서 작업](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_server-certs.html)을 참조하세요.

# 프라이빗 키를 Amazon S3에 안전하게 저장
<a name="https-storingprivatekeys"></a>

퍼블릭 인증서에 서명할 때 사용하는 프라이빗 키는 개인 소유로, 소스 코드에 커밋하면 안 됩니다. 프라이빗 키를 Amazon S3에 업로드한 후 애플리케이션 배포 중에 Amazon S3에서 이 파일을 다운로드하도록 Elastic Beanstalk를 구성하면 프라이빗 키를 구성 파일에 저장하지 않을 수 있습니다.

다음 예제에서는 [구성 파일](ebextensions.md)의 [리소스](environment-resources.md) 및 [파일](customize-containers-ec2.md#linux-files) 섹션이 Amazon S3 버킷에서 프라이빗 키 파일을 다운로드하는 것을 보여 줍니다.

**Example .ebextensions/privatekey.config**  

```
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:
  # Private key
  "/etc/pki/tls/certs/server.key":
    mode: "000400"
    owner: root
    group: root
    authentication: "S3Auth"
    source: https://elasticbeanstalk-us-west-2-123456789012.s3.us-west-2.amazonaws.com/server.key
```

예제의 버킷 이름과 URL을 본인의 것으로 바꿉니다. 이 파일의 첫 번째 항목에서는 환경의 Auto Scaling 그룹의 메타데이터에 `S3Auth`라는 인증 방법을 추가합니다. 환경에 대해 사용자 지정 [인스턴스 프로파일](concepts-roles-instance.md)을 구성한 경우 이것이 사용되며, 그렇지 않은 경우 기본값인 `aws-elasticbeanstalk-ec2-role`이 적용됩니다. 기본 인스턴스 프로파일에는 Elastic Beanstalk 스토리지 버킷에서 읽을 권한이 있습니다. 다른 버킷을 사용하는 경우 [인스턴스 프로파일에 권한을 추가](iam-instanceprofile.md#iam-instanceprofile-addperms)합니다.

두 번째 항목에서는 `S3Auth` 인증 방법을 사용하여 지정된 URL에서 프라이빗 키를 다운로드하고 이를 `/etc/pki/tls/certs/server.key`에 저장합니다. 그러면 프록시 서버가 이 위치에서 프라이빗 키를 읽어 [인스턴스에서 HTTPS 연결을 종료](https-singleinstance.md)할 수 있습니다.

환경의 EC2 인스턴스에 할당된 인스턴스 프로파일에는 지정된 버킷에서 키 객체를 읽을 권한이 있어야 합니다. IAM의 객체를 읽을 권한이 [인스턴스 프로파일에 있는지](iam-instanceprofile.md#iam-instanceprofile-verify), 버킷 및 객체에 대한 권한이 인스턴스 프로파일을 금지하지 않는지 확인합니다.

**버킷의 권한을 보려면**

1. [Amazon S3 관리 콘솔](https://console.aws.amazon.com/s3/home)을 엽니다.

1. 버킷을 선택합니다.

1. **Properties(속성)**를 선택한 후 **권한**을 선택합니다.

1. 계정이 읽기 권한이 있는 버킷의 피부여자인지 확인합니다.

1. 버킷 정책이 연결되면 **Bucket policy(버킷 정책)**를 선택하여 버킷에 할당된 권한을 봅니다.

# 로드 밸런서에서 HTTPS 종료 구성
<a name="configuring-https-elb"></a>

HTTPS를 사용하도록 AWS Elastic Beanstalk 환경을 업데이트하려면 환경에서 로드 밸런서에 대한 HTTPS 리스너를 구성해야 합니다. 두 가지 유형의 로드 밸런서(Classic Load Balancer 및 Application Load Balancer)는 HTTPS 리스너를 지원합니다.

Elastic Beanstalk 콘솔이나 구성 파일을 사용하여 보안 리스너를 구성하고 인증서를 할당할 수 있습니다.

**참고**  
단일 인스턴스 환경에는 로드 밸런서가 없으며, 따라서 로드 밸런스에서 HTTPS 종료를 지원하지 않습니다.

## Elastic Beanstalk 콘솔을 사용하여 보안 리스너 구성
<a name="configuring-https-elb.console"></a>

**환경의 로드 밸런서에 인증서를 할당**

1. [Elastic Beanstalk 콘솔](https://console.aws.amazon.com/elasticbeanstalk)을 열고 **리전** 목록에서를 선택합니다 AWS 리전.

1. 탐색 창에서 **환경**을 선택한 다음 목록에서 환경의 이름을 선택합니다.

1. 탐색 창에서 **구성**을 선택합니다.

1. [**로드 밸런서**] 구성 범주에서 [**편집**]을 선택합니다.
**참고**  
[**로드 밸런서**] 구성 범주에 [**편집**] 버튼이 없으면 환경에 [로드 밸런서](using-features-managing-env-types.md#using-features.managing.changetype)가 없는 것입니다.

1. **로드 밸런서 수정** 페이지의 절차는 환경과 연결된 로드 밸런서 유형에 따라 다릅니다.
   + **Classic Load Balancer**

     1. **리스너 추가**를 선택합니다.

     1. **Classic Load Balancer 리스너** 대화 상자에서 다음 설정을 구성합니다.
        + **리스너 포트**에서 수신 트래픽 포트(대체로 `443`)를 입력합니다.
        + **리스너 프로토콜**에서 **HTTPS**를 선택합니다.
        + **인스턴스 포트**에는 `80`을 입력합니다.
        + **인스턴스 프로토콜**에서 **HTTP**를 선택합니다.
        + **SSL 인증서**에서 해당 인증서를 선택합니다.

     1. **추가**를 선택합니다.
   + **Application Load Balancer**

     1. **리스너 추가**를 선택합니다.

     1. **Application Load Balancer 리스너** 대화 상자에서 다음 설정을 구성합니다.
        + **포트**에서 수신 트래픽 포트(대체로 `443`)를 입력합니다.
        + **프로토콜**에서 **HTTPS**를 선택합니다.
        + **SSL 인증서**에서 해당 인증서를 선택합니다.

     1. **추가**를 선택합니다.
**참고**  
Classic Load Balancer 및 Application Load Balancer의 드롭다운 메뉴에 아무 인증서도 표시되지 않으면 [AWS Certificate Manager (ACM)](https://docs.aws.amazon.com/acm/latest/userguide/)에서 [사용자 지정 도메인](customdomains.md) 이름을 위한 인증서를 생성하거나 업로드해야 합니다(선호되는 방법). 또는 AWS CLI를 사용해 IAM에 인증서를 업로드합니다.
   + **Network Load Balancer**

     1. **리스너 추가**를 선택합니다.

     1. **Network Load Balancer 리스너** 대화 상자에서 **포트**에 대해 수신 트래픽 포트(대체로 `443`)를 입력합니다.

     1. **추가**를 선택합니다.

1. 변경 사항을 저장하려면 페이지 하단에서 **적용**을 선택합니다.

## 구성 파일을 사용하여 보안 리스너 구성
<a name="configuring-https-elb.configurationfile"></a>

다음과 같은 [구성 파일](ebextensions.md) 중 하나를 사용하여 로드 밸런서에서 보안 리스너를 구성할 수 있습니다.

**Example .ebextensions/securelistener-clb.config**  
환경에 Classic Load Balancer가 있는 경우 이 예제를 사용합니다. 이 예제에서는 `aws:elb:listener` 네임스페이스의 옵션을 사용하여 지정된 인증서로 포트 443에서 HTTPS 리스너를 구성한 후, 포트 80에서 암호가 해독된 트래픽을 환경의 인스턴스로 전달합니다.  

```
option_settings:
  aws:elb:listener:443:
    SSLCertificateId: arn:aws:acm:us-east-2:1234567890123:certificate/####################################
    ListenerProtocol: HTTPS
    InstancePort: 80
```

강조 표시된 텍스트를 본인 인증서의 ARN으로 바꿉니다. 인증서는 AWS Certificate Manager (ACM)에서 생성하거나 업로드한 인증서(선호) 또는를 사용하여 IAM에 업로드한 인증서일 수 있습니다 AWS CLI.

Classic Load Balancer 구성 옵션에 대한 자세한 내용은 [Classic Load Balancer 구성 네임스페이스](environments-cfg-clb.md#environments-cfg-clb-namespace) 단원을 참조하십시오.

**Example .ebextensions/securelistener-alb.config**  
환경에 Application Load Balancer가 있는 경우 이 예제를 사용합니다. 이 예제에서는 `aws:elbv2:listener` 네임스페이스의 옵션을 사용하여 지정된 인증서로 포트 443의 HTTPS 리스너를 구성합니다. 이 리스너는 트래픽을 기본 프로세스로 라우팅합니다.  

```
option_settings:
  aws:elbv2:listener:443:
    ListenerEnabled: 'true'
    Protocol: HTTPS
    SSLCertificateArns: arn:aws:acm:us-east-2:1234567890123:certificate/####################################
```

**Example .ebextensions/securelistener-nlb.config**  
환경에 Network Load Balancer가 있는 경우 이 예제를 사용합니다. 예제에서는 `aws:elbv2:listener` 네임스페이스의 옵션을 사용하여 포트 443의 리스너를 구성합니다. 이 리스너는 트래픽을 기본 프로세스로 라우팅합니다.  

```
option_settings:
  aws:elbv2:listener:443:
    ListenerEnabled: 'true'
```

## 보안 그룹 구성
<a name="configuring-https-elb.security-group"></a>

포트 80 이외의 인스턴스 포트로 트래픽을 전달하도록 로드 밸런서를 구성하는 경우, 로드 밸런서에서 오는 인스턴스 포트를 통한 인바운드 트래픽을 허용하는 규칙을 보안 그룹에 추가해야 합니다. 사용자 지정 VPC에서 환경을 생성하는 경우 Elastic Beanstalk가 이 규칙을 추가합니다.

애플리케이션용 `.ebextensions` 디렉터리의 [구성 파일](ebextensions.md)에 `Resources` 키를 추가하여 이 규칙을 추가합니다.

다음의 예제 구성 파일에서는 `AWSEBSecurityGroup` 보안 그룹에 수신 규칙을 추가합니다. 이렇게 하면 로드 밸런서의 보안 그룹에서 포트 1000의 트래픽이 허용됩니다.

**Example .ebextensions/sg-ingressfromlb.config**  

```
Resources:
  sslSecurityGroupIngress:
    Type: AWS::EC2::SecurityGroupIngress
    Properties:
      GroupId: {"Fn::GetAtt" : ["AWSEBSecurityGroup", "GroupId"]}
      IpProtocol: tcp
      ToPort: 1000
      FromPort: 1000
      SourceSecurityGroupId: {"Fn::GetAtt" : ["AWSEBLoadBalancerSecurityGroup", "GroupId"]}
```

# 인스턴스에서 HTTPS 종료 구성
<a name="https-singleinstance"></a>

[구성 파일](ebextensions.md)을 사용하여 HTTPS 연결을 종료하도록 트래픽을 애플리케이션으로 전달하는 프록시 서버를 구성할 수 있습니다. HTTPS를 단일 인스턴스 환경에서 사용하고자 하거나, 트래픽의 암호를 해독하지 않고 트래픽을 전달하도록 로드 밸런서를 구성하는 경우에 유용합니다.

HTTPS를 활성화하려면 Elastic Beanstalk 애플리케이션을 실행 중인 EC2 인스턴스로 들어오는 포트 443을 통한 수신 트래픽을 허용해야 합니다. 이렇게 하려면 구성 파일의 `Resources` 키를 사용하여 AWSEBSecurityGroup 보안 그룹의 수신 규칙에 포트 443의 규칙을 추가합니다.

다음 조각은 단일 인스턴스 환경의 모든 트래픽에 대해 포트 443을 여는 수신 규칙을 `AWSEBSecurityGroup` 보안 그룹에 추가합니다.

**`.ebextensions/https-instance-securitygroup.config`**

```
Resources:
  sslSecurityGroupIngress: 
    Type: AWS::EC2::SecurityGroupIngress
    Properties:
      GroupId: {"Fn::GetAtt" : ["AWSEBSecurityGroup", "GroupId"]}
      IpProtocol: tcp
      ToPort: 443
      FromPort: 443
      CidrIp: 0.0.0.0/0
```

기본 [Amazon Virtual Private Cloud](https://docs.aws.amazon.com/vpc/latest/userguide/)(Amazon VPC)의 로드 밸런싱된 환경에서는 로드 밸런서의 트래픽만 허용하도록 이 정책을 수정할 수 있습니다. 예제는 [로드 밸런싱된 Elastic Beanstalk 환경에서 종단 간 암호화 구성](configuring-https-endtoend.md) 섹션을 참조하세요.

**Topics**
+ [Docker를 실행하는 EC2 인스턴스에서 HTTPS 종료](https-singleinstance-docker.md)
+ [Go를 실행하는 EC2 인스턴스에서 HTTPS 종료](https-singleinstance-go.md)
+ [Java SE를 실행하는 EC2 인스턴스에서 HTTPS 종료](https-singleinstance-java.md)
+ [Node.js를 실행하는 EC2 인스턴스에서 HTTPS 종료](https-singleinstance-nodejs.md)
+ [PHP를 실행하는 EC2 인스턴스에서 HTTPS 종료](https-singleinstance-php.md)
+ [Python을 실행하는 EC2 인스턴스에서 HTTPS 종료](https-singleinstance-python.md)
+ [Ruby를 실행하는 EC2 인스턴스에서 HTTPS 종료](https-singleinstance-ruby.md)
+ [Tomcat을 실행하는 EC2 인스턴스에서 HTTPS 종료](https-singleinstance-tomcat.md)
+ [Linux의 .NET Core를 실행하는 Amazon EC2 인스턴스에서 HTTPS 종료](https-singleinstance-dotnet-linux.md)
+ [.NET을 실행하는 Amazon EC2 인스턴스에서 HTTPS 종료](SSLNET.SingleInstance.md)

# Docker를 실행하는 EC2 인스턴스에서 HTTPS 종료
<a name="https-singleinstance-docker"></a>

Docker 컨테이너의 경우 [구성 파일](ebextensions.md)을 사용하여 HTTPS를 활성화합니다.

지침에 따라 인증서와 프라이빗 키 구성 요소를 바꿔 구성 파일에 다음 조각을 추가한 후, 이를 소스 번들의 `.ebextensions` 디렉터리에 저장합니다. 구성 파일은 다음 작업을 수행합니다.
+ `files` 키는 인스턴스에 다음 파일을 만듭니다.  
`/etc/nginx/conf.d/https.conf`  
nginx 서버를 구성합니다. 이 파일은 nginx 서비스가 시작되면 로드됩니다.  
`/etc/pki/tls/certs/server.crt`  
인스턴스에 인증서 파일을 만듭니다. *인증서 파일 내용*을 본인의 인증서 내용으로 바꿉니다.  
YAML은 일정한 들여쓰기를 사용합니다. 예제 구성 파일의 콘텐츠를 바꿀 때 들여쓰기 레벨을 일치시키고, 텍스트 편집기가 탭 문자 대신 공백을 사용해 들여쓰기를 하도록 합니다.
중간 인증서를 보유한 경우, 사이트 인증 후 `server.crt`에 포함시킵니다.  

  ```
        -----BEGIN CERTIFICATE-----
    certificate file contents
    -----END CERTIFICATE-----
    -----BEGIN CERTIFICATE-----
    first intermediate certificate
    -----END CERTIFICATE-----
    -----BEGIN CERTIFICATE-----
    second intermediate certificate
    -----END CERTIFICATE-----
  ```  
`/etc/pki/tls/certs/server.key`  
인스턴스에 프라이빗 키 파일을 만듭니다. *프라이빗 키 내용*을 인증서 요청 또는 자체 서명된 인증서를 만들 때 사용한 프라이빗 키 내용으로 바꿉니다.

**Example .ebextensions/https-instance.config**  

```
files:
  /etc/nginx/conf.d/https.conf:
    mode: "000644"
    owner: root
    group: root
    content: |
      # HTTPS Server
      
      server {
        listen 443;
        server_name localhost;
        
        ssl on;
        ssl_certificate /etc/pki/tls/certs/server.crt;
        ssl_certificate_key /etc/pki/tls/certs/server.key;
        
        ssl_session_timeout 5m;
        
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        ssl_prefer_server_ciphers on;
        
        location / {
          proxy_pass http://docker;
          proxy_http_version 1.1;
          
          proxy_set_header Connection "";
          proxy_set_header Host $host;
          proxy_set_header X-Real-IP $remote_addr;
          proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
          proxy_set_header X-Forwarded-Proto https;
        }
      }
      
  /etc/pki/tls/certs/server.crt:
    mode: "000400"
    owner: root
    group: root
    content: |
      -----BEGIN CERTIFICATE-----
      certificate file contents
      -----END CERTIFICATE-----
      
  /etc/pki/tls/certs/server.key:
    mode: "000400"
    owner: root
    group: root
    content: |
      -----BEGIN RSA PRIVATE KEY-----
      private key contents # See note below.
      -----END RSA PRIVATE KEY-----
```

**참고**  
프라이빗 키를 포함한 구성 파일을 소스 제어에 커밋하지 마십시오. 구성을 테스트하고 작동 여부를 확인한 후 Amazon S3에 프라이빗 키를 저장하고 배포 중에 다운로드하도록 구성을 변경합니다. 지침은 [프라이빗 키를 Amazon S3에 안전하게 저장](https-storingprivatekeys.md) 섹션을 참조하세요.

단일 인스턴스 환경에서 포트 443의 트래픽을 허용하도록 인스턴스의 보안 그룹도 수정해야 합니다. 다음 구성 파일은 CloudFormation [함수](ebextensions-functions.md)를 사용하여 보안 그룹의 ID를 검색하고 여기에 규칙을 추가합니다.

**Example .ebextensions/https-instance-single.config**  

```
Resources:
  sslSecurityGroupIngress: 
    Type: AWS::EC2::SecurityGroupIngress
    Properties:
      GroupId: {"Fn::GetAtt" : ["AWSEBSecurityGroup", "GroupId"]}
      IpProtocol: tcp
      ToPort: 443
      FromPort: 443
      CidrIp: 0.0.0.0/0
```

로드 밸런싱된 환경에서 로드 밸런서가 [안전한 트래픽을 그대로 통과](https-tcp-passthrough.md)시키거나 종단 간 암호화를 위해 [암호 해독과 재암호화](configuring-https-endtoend.md)하도록 구성합니다.

# Go를 실행하는 EC2 인스턴스에서 HTTPS 종료
<a name="https-singleinstance-go"></a>

Go 컨테이너 유형의 경우 [구성 파일](ebextensions.md)과 HTTPS를 사용하도록 nginx 서버를 구성하는 nginx 구성 파일로 HTTPS를 활성화합니다.

지침에 따라 인증서와 프라이빗 키 자리 표시자를 바꿔 구성 파일에 다음 조각을 추가한 후, 이를 소스 번들의 `.ebextensions` 디렉터리에 저장합니다. 구성 파일은 다음 작업을 수행합니다.
+ `Resources` 키는 환경의 인스턴스에서 사용하는 보안 그룹에서 포트 443을 활성화합니다.
+ `files` 키는 인스턴스에 다음 파일을 만듭니다.  
`/etc/pki/tls/certs/server.crt`  
인스턴스에 인증서 파일을 만듭니다. *인증서 파일 내용*을 본인의 인증서 내용으로 바꿉니다.  
YAML은 일정한 들여쓰기를 사용합니다. 예제 구성 파일의 콘텐츠를 바꿀 때 들여쓰기 레벨을 일치시키고, 텍스트 편집기가 탭 문자 대신 공백을 사용해 들여쓰기를 하도록 합니다.
중간 인증서를 보유한 경우, 사이트 인증 후 `server.crt`에 포함시킵니다.  

  ```
        -----BEGIN CERTIFICATE-----
    certificate file contents
    -----END CERTIFICATE-----
    -----BEGIN CERTIFICATE-----
    first intermediate certificate
    -----END CERTIFICATE-----
    -----BEGIN CERTIFICATE-----
    second intermediate certificate
    -----END CERTIFICATE-----
  ```  
`/etc/pki/tls/certs/server.key`  
인스턴스에 프라이빗 키 파일을 만듭니다. *프라이빗 키 내용*을 인증서 요청 또는 자체 서명된 인증서를 만들 때 사용한 프라이빗 키 내용으로 바꿉니다.

**Example .ebextensions/https-instance.config**  

```
files:
  /etc/pki/tls/certs/server.crt:
    content: |
      -----BEGIN CERTIFICATE-----
      certificate file contents
      -----END CERTIFICATE-----
      
  /etc/pki/tls/certs/server.key:
    content: |      
      -----BEGIN RSA PRIVATE KEY-----
      private key contents # See note below.
      -----END RSA PRIVATE KEY-----
```

**참고**  
프라이빗 키를 포함한 구성 파일을 소스 제어에 커밋하지 마십시오. 구성을 테스트하고 작동 여부를 확인한 후 Amazon S3에 프라이빗 키를 저장하고 배포 중에 다운로드하도록 구성을 변경합니다. 지침은 [프라이빗 키를 Amazon S3에 안전하게 저장](https-storingprivatekeys.md) 섹션을 참조하세요.

소스 번들의 `.conf` 디렉터리에서 `.ebextensions/nginx/conf.d/` 확장명을 사용하는 파일에 다음을 놓습니다(예: `.ebextensions/nginx/conf.d/https.conf`). *app\$1port*를 애플리케이션이 수신 대기하는 포트 번호로 바꿉니다. 이 예제에서는 SSL을 사용하여 포트 443에서 수신 대기하도록 nginx 서버를 구성합니다. Go 플랫폼의 이러한 구성 파일에 대한 자세한 내용은 [프록시 서버 구성](go-nginx.md) 단원을 참조하십시오.

**Example .ebextensions/nginx/conf.d/https.conf**  

```
# HTTPS server

server {
    listen       443;
    server_name  localhost;
    
    ssl                  on;
    ssl_certificate      /etc/pki/tls/certs/server.crt;
    ssl_certificate_key  /etc/pki/tls/certs/server.key;
    
    ssl_session_timeout  5m;
    
    ssl_protocols  TLSv1 TLSv1.1 TLSv1.2;
    ssl_prefer_server_ciphers   on;
    
    location / {
        proxy_pass  http://localhost:app_port;
        proxy_set_header   Connection "";
        proxy_http_version 1.1;
        proxy_set_header        Host            $host;
        proxy_set_header        X-Real-IP       $remote_addr;
        proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header        X-Forwarded-Proto https;
    }
}
```

단일 인스턴스 환경에서 포트 443의 트래픽을 허용하도록 인스턴스의 보안 그룹도 수정해야 합니다. 다음 구성 파일은 CloudFormation [함수](ebextensions-functions.md)를 사용하여 보안 그룹의 ID를 검색하고 여기에 규칙을 추가합니다.

**Example .ebextensions/https-instance-single.config**  

```
Resources:
  sslSecurityGroupIngress: 
    Type: AWS::EC2::SecurityGroupIngress
    Properties:
      GroupId: {"Fn::GetAtt" : ["AWSEBSecurityGroup", "GroupId"]}
      IpProtocol: tcp
      ToPort: 443
      FromPort: 443
      CidrIp: 0.0.0.0/0
```

로드 밸런싱된 환경에서 로드 밸런서가 [안전한 트래픽을 그대로 통과](https-tcp-passthrough.md)시키거나 종단 간 암호화를 위해 [암호 해독과 재암호화](configuring-https-endtoend.md)하도록 구성합니다.

# Java SE를 실행하는 EC2 인스턴스에서 HTTPS 종료
<a name="https-singleinstance-java"></a>

Java SE 컨테이너 유형의 경우 .ebextensions [구성 파일](ebextensions.md)과 HTTPS를 사용하도록 nginx 서버를 구성하는 nginx 구성 파일로 HTTPS를 활성화합니다.

모든 AL2023/AL2 플랫폼은 균일한 프록시 구성 기능을 지원합니다. AL2023/AL2를 실행하는 플랫폼 버전에서 프록시 서버를 구성하는 방법에 대한 자세한 내용은 [역방향 프록시 구성](platforms-linux-extend.proxy.md) 단원을 참조하세요.

지침에 따라 인증서와 프라이빗 키 자리 표시자를 바꿔 구성 파일에 다음 조각을 추가한 후, 이를 `.ebextensions` 디렉터리에 저장합니다. 구성 파일은 다음 작업을 수행합니다.
+ `files` 키는 인스턴스에 다음 파일을 만듭니다.  
`/etc/pki/tls/certs/server.crt`  
인스턴스에 인증서 파일을 만듭니다. *인증서 파일 내용*을 본인의 인증서 내용으로 바꿉니다.  
YAML은 일정한 들여쓰기를 사용합니다. 예제 구성 파일의 콘텐츠를 바꿀 때 들여쓰기 레벨을 일치시키고, 텍스트 편집기가 탭 문자 대신 공백을 사용해 들여쓰기를 하도록 합니다.
중간 인증서를 보유한 경우, 사이트 인증 후 `server.crt`에 포함시킵니다.  

  ```
        -----BEGIN CERTIFICATE-----
    certificate file contents
    -----END CERTIFICATE-----
    -----BEGIN CERTIFICATE-----
    first intermediate certificate
    -----END CERTIFICATE-----
    -----BEGIN CERTIFICATE-----
    second intermediate certificate
    -----END CERTIFICATE-----
  ```  
`/etc/pki/tls/certs/server.key`  
인스턴스에 프라이빗 키 파일을 만듭니다. *프라이빗 키 내용*을 인증서 요청 또는 자체 서명된 인증서를 만들 때 사용한 프라이빗 키 내용으로 바꿉니다.

**Example .ebextensions/https-instance.config**  

```
files:
  /etc/pki/tls/certs/server.crt:
    content: |
      -----BEGIN CERTIFICATE-----
      certificate file contents
      -----END CERTIFICATE-----
      
  /etc/pki/tls/certs/server.key:
    content: |
      -----BEGIN RSA PRIVATE KEY-----
      private key contents # See note below.
      -----END RSA PRIVATE KEY-----
```

**참고**  
프라이빗 키를 포함한 구성 파일을 소스 제어에 커밋하지 마십시오. 구성을 테스트하고 작동 여부를 확인한 후 Amazon S3에 프라이빗 키를 저장하고 배포 중에 다운로드하도록 구성을 변경합니다. 지침은 [프라이빗 키를 Amazon S3에 안전하게 저장](https-storingprivatekeys.md) 섹션을 참조하세요.

소스 번들의 `.conf` 디렉터리에서 `.ebextensions/nginx/conf.d/` 확장명을 사용하는 파일에 다음을 놓습니다(예: `.ebextensions/nginx/conf.d/https.conf`). *app\$1port*를 애플리케이션이 수신 대기하는 포트 번호로 바꿉니다. 이 예제에서는 SSL을 사용하여 포트 443에서 수신 대기하도록 nginx 서버를 구성합니다. Java SE 플랫폼의 이러한 구성 파일에 대한 자세한 내용은 [프록시 서버 구성](java-se-nginx.md) 단원을 참조하십시오.

**Example .ebextensions/nginx/conf.d/https.conf**  

```
# HTTPS server

server {
    listen       443;
    server_name  localhost;
    
    ssl                  on;
    ssl_certificate      /etc/pki/tls/certs/server.crt;
    ssl_certificate_key  /etc/pki/tls/certs/server.key;
    
    ssl_session_timeout  5m;
    
    ssl_protocols  TLSv1 TLSv1.1 TLSv1.2;
    ssl_prefer_server_ciphers   on;
    
    location / {
        proxy_pass  http://localhost:app_port;
        proxy_set_header   Connection "";
        proxy_http_version 1.1;
        proxy_set_header        Host            $host;
        proxy_set_header        X-Real-IP       $remote_addr;
        proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header        X-Forwarded-Proto https;
    }
}
```

단일 인스턴스 환경에서 포트 443의 트래픽을 허용하도록 인스턴스의 보안 그룹도 수정해야 합니다. 다음 구성 파일은 CloudFormation [함수](ebextensions-functions.md)를 사용하여 보안 그룹의 ID를 검색하고 여기에 규칙을 추가합니다.

**Example .ebextensions/https-instance-single.config**  

```
Resources:
  sslSecurityGroupIngress: 
    Type: AWS::EC2::SecurityGroupIngress
    Properties:
      GroupId: {"Fn::GetAtt" : ["AWSEBSecurityGroup", "GroupId"]}
      IpProtocol: tcp
      ToPort: 443
      FromPort: 443
      CidrIp: 0.0.0.0/0
```

로드 밸런싱된 환경에서 로드 밸런서가 [안전한 트래픽을 그대로 통과](https-tcp-passthrough.md)시키거나 종단 간 암호화를 위해 [암호 해독과 재암호화](configuring-https-endtoend.md)하도록 구성합니다.

# Node.js를 실행하는 EC2 인스턴스에서 HTTPS 종료
<a name="https-singleinstance-nodejs"></a>

다음 구성 파일 예제에서는 [기본 nginx 구성을 확장](nodejs-platform-proxy.md)하여 포트 443에서 수신 대기하고 퍼블릭 인증서와 프라이빗 키를 사용하여 SSL/TLS 연결을 종료합니다.

[확장 상태 보고](health-enhanced.md)를 위한 환경을 구성한 경우 액세스 로그를 생성하도록 nginx를 구성해야 합니다. 이렇게 하려면 `# For enhanced health...` 주석 아래 행 블록에서 앞의 `#` 문자를 제거하여 주석 처리를 해제합니다.

**Example .ebextensions/https-instance.config**  

```
files:
  /etc/nginx/conf.d/https.conf:
    mode: "000644"
    owner: root
    group: root
    content: |
      # HTTPS server

      server {
          listen       443;
          server_name  localhost;
          
          ssl                  on;
          ssl_certificate      /etc/pki/tls/certs/server.crt;
          ssl_certificate_key  /etc/pki/tls/certs/server.key;
          
          ssl_session_timeout  5m;
          
          ssl_protocols  TLSv1 TLSv1.1 TLSv1.2;
          ssl_prefer_server_ciphers   on;

          # For enhanced health reporting support, uncomment this block:

          #if ($time_iso8601 ~ "^(\d{4})-(\d{2})-(\d{2})T(\d{2})") {
          #    set $year $1;
          #    set $month $2;
          #    set $day $3;
          #    set $hour $4;
          #}
          #access_log /var/log/nginx/healthd/application.log.$year-$month-$day-$hour healthd;
          #access_log  /var/log/nginx/access.log  main;
          
          location / {
              proxy_pass  http://nodejs;
              proxy_set_header   Connection "";
              proxy_http_version 1.1;
              proxy_set_header        Host            $host;
              proxy_set_header        X-Real-IP       $remote_addr;
              proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
              proxy_set_header        X-Forwarded-Proto https;
          }
      }
      
  /etc/pki/tls/certs/server.crt:
    mode: "000400"
    owner: root
    group: root
    content: |
      -----BEGIN CERTIFICATE-----
      certificate file contents
      -----END CERTIFICATE-----
      
  /etc/pki/tls/certs/server.key:
    mode: "000400"
    owner: root
    group: root
    content: |
      -----BEGIN RSA PRIVATE KEY-----
      private key contents # See note below.
      -----END RSA PRIVATE KEY-----
```

`files` 키는 인스턴스에 다음 파일을 만듭니다.

`/etc/nginx/conf.d/https.conf`  
nginx 서버를 구성합니다. 이 파일은 nginx 서비스가 시작되면 로드됩니다.

`/etc/pki/tls/certs/server.crt`  
인스턴스에 인증서 파일을 만듭니다. *인증서 파일 내용*을 본인의 인증서 내용으로 바꿉니다.  
YAML은 일정한 들여쓰기를 사용합니다. 예제 구성 파일의 콘텐츠를 바꿀 때 들여쓰기 레벨을 일치시키고, 텍스트 편집기가 탭 문자 대신 공백을 사용해 들여쓰기를 하도록 합니다.
중간 인증서를 보유한 경우, 사이트 인증 후 `server.crt`에 포함시킵니다.  

```
      -----BEGIN CERTIFICATE-----
  certificate file contents
  -----END CERTIFICATE-----
  -----BEGIN CERTIFICATE-----
  first intermediate certificate
  -----END CERTIFICATE-----
  -----BEGIN CERTIFICATE-----
  second intermediate certificate
  -----END CERTIFICATE-----
```

`/etc/pki/tls/certs/server.key`  
인스턴스에 프라이빗 키 파일을 만듭니다. *프라이빗 키 내용*을 인증서 요청 또는 자체 서명된 인증서를 만들 때 사용한 프라이빗 키 내용으로 바꿉니다.

**참고**  
프라이빗 키를 포함한 구성 파일을 소스 제어에 커밋하지 마십시오. 구성을 테스트하고 작동 여부를 확인한 후 Amazon S3에 프라이빗 키를 저장하고 배포 중에 다운로드하도록 구성을 변경합니다. 지침은 [프라이빗 키를 Amazon S3에 안전하게 저장](https-storingprivatekeys.md) 섹션을 참조하세요.

단일 인스턴스 환경에서 포트 443의 트래픽을 허용하도록 인스턴스의 보안 그룹도 수정해야 합니다. 다음 구성 파일은 CloudFormation [함수](ebextensions-functions.md)를 사용하여 보안 그룹의 ID를 검색하고 여기에 규칙을 추가합니다.

**Example .ebextensions/https-instance-single.config**  

```
Resources:
  sslSecurityGroupIngress: 
    Type: AWS::EC2::SecurityGroupIngress
    Properties:
      GroupId: {"Fn::GetAtt" : ["AWSEBSecurityGroup", "GroupId"]}
      IpProtocol: tcp
      ToPort: 443
      FromPort: 443
      CidrIp: 0.0.0.0/0
```

로드 밸런싱된 환경에서 로드 밸런서가 [안전한 트래픽을 그대로 통과](https-tcp-passthrough.md)시키거나 종단 간 암호화를 위해 [암호 해독과 재암호화](configuring-https-endtoend.md)하도록 구성합니다.

# PHP를 실행하는 EC2 인스턴스에서 HTTPS 종료
<a name="https-singleinstance-php"></a>

PHP 컨테이너 유형의 경우 [구성 파일](ebextensions.md)을 사용하여 Apache HTTP Server가 HTTPS를 사용할 수 있게 합니다.

지침에 따라 인증서와 프라이빗 키 구성 요소를 바꿔 구성 파일에 다음 조각을 추가한 후, 이를 소스 번들의 `.ebextensions` 디렉터리에 저장합니다.

구성 파일은 다음 작업을 수행합니다.
+ `packages` 키는 yum을 사용하여 `mod24_ssl`을 설치합니다.
+ `files` 키는 인스턴스에 다음 파일을 만듭니다.  
`/etc/httpd/conf.d/ssl.conf`  
Apache 서버를 구성합니다. Apache 서비스가 시작되면 이 파일이 로드됩니다.  
`/etc/pki/tls/certs/server.crt`  
인스턴스에 인증서 파일을 만듭니다. *인증서 파일 내용*을 본인의 인증서 내용으로 바꿉니다.  
YAML은 일정한 들여쓰기를 사용합니다. 예제 구성 파일의 콘텐츠를 바꿀 때 들여쓰기 레벨을 일치시키고, 텍스트 편집기가 탭 문자 대신 공백을 사용해 들여쓰기를 하도록 합니다.
중간 인증서를 보유한 경우, 사이트 인증 후 `server.crt`에 포함시킵니다.  

  ```
        -----BEGIN CERTIFICATE-----
    certificate file contents
    -----END CERTIFICATE-----
    -----BEGIN CERTIFICATE-----
    first intermediate certificate
    -----END CERTIFICATE-----
    -----BEGIN CERTIFICATE-----
    second intermediate certificate
    -----END CERTIFICATE-----
  ```  
`/etc/pki/tls/certs/server.key`  
인스턴스에 프라이빗 키 파일을 만듭니다. *프라이빗 키 내용*을 인증서 요청 또는 자체 서명된 인증서를 만들 때 사용한 프라이빗 키 내용으로 바꿉니다.

**Example .ebextensions/https-instance.config**  

```
packages:
  yum:
    mod24_ssl : []

files:
  /etc/httpd/conf.d/ssl.conf:
    mode: "000644"
    owner: root
    group: root
    content: |
      LoadModule ssl_module modules/mod_ssl.so
      Listen 443
      <VirtualHost *:443>
        <Proxy *>
          Order deny,allow
          Allow from all
        </Proxy>

        SSLEngine             on
        SSLCertificateFile    "/etc/pki/tls/certs/server.crt"
        SSLCertificateKeyFile "/etc/pki/tls/certs/server.key"
        SSLCipherSuite        EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH
        SSLProtocol           All -SSLv2 -SSLv3
        SSLHonorCipherOrder   On
        SSLSessionTickets     Off
        
        Header always set Strict-Transport-Security "max-age=63072000; includeSubdomains; preload"
        Header always set X-Frame-Options DENY
        Header always set X-Content-Type-Options nosniff
        
        ProxyPass / http://localhost:80/ retry=0
        ProxyPassReverse / http://localhost:80/
        ProxyPreserveHost on
        RequestHeader set X-Forwarded-Proto "https" early
        
      </VirtualHost>
      
  /etc/pki/tls/certs/server.crt:
    mode: "000400"
    owner: root
    group: root
    content: |
      -----BEGIN CERTIFICATE-----
      certificate file contents
      -----END CERTIFICATE-----
      
  /etc/pki/tls/certs/server.key:
    mode: "000400"
    owner: root
    group: root
    content: |
      -----BEGIN RSA PRIVATE KEY-----
      private key contents # See note below.
      -----END RSA PRIVATE KEY-----
```

**참고**  
프라이빗 키를 포함한 구성 파일을 소스 제어에 커밋하지 마십시오. 구성을 테스트하고 작동 여부를 확인한 후 Amazon S3에 프라이빗 키를 저장하고 배포 중에 다운로드하도록 구성을 변경합니다. 지침은 [프라이빗 키를 Amazon S3에 안전하게 저장](https-storingprivatekeys.md) 섹션을 참조하세요.

단일 인스턴스 환경에서 포트 443의 트래픽을 허용하도록 인스턴스의 보안 그룹도 수정해야 합니다. 다음 구성 파일은 CloudFormation [함수](ebextensions-functions.md)를 사용하여 보안 그룹의 ID를 검색하고 여기에 규칙을 추가합니다.

**Example .ebextensions/https-instance-single.config**  

```
Resources:
  sslSecurityGroupIngress: 
    Type: AWS::EC2::SecurityGroupIngress
    Properties:
      GroupId: {"Fn::GetAtt" : ["AWSEBSecurityGroup", "GroupId"]}
      IpProtocol: tcp
      ToPort: 443
      FromPort: 443
      CidrIp: 0.0.0.0/0
```

로드 밸런싱된 환경에서 로드 밸런서가 [안전한 트래픽을 그대로 통과](https-tcp-passthrough.md)시키거나 종단 간 암호화를 위해 [암호 해독과 재암호화](configuring-https-endtoend.md)하도록 구성합니다.

# Python을 실행하는 EC2 인스턴스에서 HTTPS 종료
<a name="https-singleinstance-python"></a>

WSGI(Web Server Gateway Interface)가 있는 Apache HTTP Server를 사용하는 Python 컨테이너 유형의 경우, [구성 파일](ebextensions.md)을 사용하여 Apache HTTP Server가 HTTPS를 사용하도록 활성화합니다.

지침에 따라 인증서와 프라이빗 키 구성 요소를 바꿔 [구성 파일](ebextensions.md)에 다음 조각을 추가한 후, 이를 소스 번들의 `.ebextensions` 디렉터리에 저장합니다. 구성 파일은 다음 작업을 수행합니다.
+ `packages` 키는 yum을 사용하여 `mod_ssl`을 설치합니다.
+ `files` 키는 인스턴스에 다음 파일을 만듭니다.  
`/etc/httpd/conf.d/ssl.conf`  
Apache 서버를 구성합니다. 애플리케이션 이름이 `application.py`가 아닌 경우, `WSGIScriptAlias` 값에서 강조 표시된 텍스트를 애플리케이션의 로컬 경로로 바꿉니다. 예를 들어 django 애플리케이션은 `django/wsgi.py`에 있을 수 있습니다. 위치는 환경에 설정한 `WSGIPath` 옵션의 값과 일치해야 합니다.  
애플리케이션 요구 사항에 따라 **python-path** 파라미터에 다른 디렉터리를 추가해야 할 수도 있습니다.  
`/etc/pki/tls/certs/server.crt`  
인스턴스에 인증서 파일을 만듭니다. *인증서 파일 내용*을 본인의 인증서 내용으로 바꿉니다.  
YAML은 일정한 들여쓰기를 사용합니다. 예제 구성 파일의 콘텐츠를 바꿀 때 들여쓰기 레벨을 일치시키고, 텍스트 편집기가 탭 문자 대신 공백을 사용해 들여쓰기를 하도록 합니다.
중간 인증서를 보유한 경우, 사이트 인증 후 `server.crt`에 포함시킵니다.  

  ```
        -----BEGIN CERTIFICATE-----
    certificate file contents
    -----END CERTIFICATE-----
    -----BEGIN CERTIFICATE-----
    first intermediate certificate
    -----END CERTIFICATE-----
    -----BEGIN CERTIFICATE-----
    second intermediate certificate
    -----END CERTIFICATE-----
  ```  
`/etc/pki/tls/certs/server.key`  
인스턴스에 프라이빗 키 파일을 만듭니다. *프라이빗 키 내용*을 인증서 요청 또는 자체 서명된 인증서를 만들 때 사용한 프라이빗 키 내용으로 바꿉니다.
+ `container_commands` 키는 모든 것이 구성된 후 httpd 서비스를 중지하여 서비스에서 새 `https.conf` 파일과 인증서를 사용할 수 있도록 합니다.

**참고**  
이 예제는 [Python](create-deploy-python-container.md) 플랫폼을 사용하는 환경에서만 작동합니다.

**Example .ebextensions/https-instance.config**  

```
packages:
  yum:
    mod_ssl: []
    
files:
  /etc/httpd/conf.d/ssl.conf:
    mode: "000644"
    owner: root
    group: root
    content: |
      LoadModule wsgi_module modules/mod_wsgi.so
      WSGIPythonHome /var/app/venv/staging-LQM1lest
      WSGISocketPrefix run/wsgi
      WSGIRestrictEmbedded On
      Listen 443
      <VirtualHost *:443>
        SSLEngine on
        SSLCertificateFile "/etc/pki/tls/certs/server.crt"
        SSLCertificateKeyFile "/etc/pki/tls/certs/server.key"
        
        Alias /static/ /var/app/current/static/
        <Directory /var/app/current/static>
        Order allow,deny
        Allow from all
        </Directory>
        
        WSGIScriptAlias / /var/app/current/application.py
        
        <Directory /var/app/current>
        Require all granted
        </Directory>
        
        WSGIDaemonProcess wsgi-ssl processes=1 threads=15 display-name=%{GROUP} \
          python-path=/var/app/current \
          python-home=/var/app/venv/staging-LQM1lest \
          home=/var/app/current \
          user=webapp \
          group=webapp
        WSGIProcessGroup wsgi-ssl
        
      </VirtualHost>
      
  /etc/pki/tls/certs/server.crt:
    mode: "000400"
    owner: root
    group: root
    content: |
      -----BEGIN CERTIFICATE-----
      certificate file contents
      -----END CERTIFICATE-----
       
  /etc/pki/tls/certs/server.key:
    mode: "000400"
    owner: root
    group: root
    content: |
      -----BEGIN RSA PRIVATE KEY-----
      private key contents # See note below.
      -----END RSA PRIVATE KEY-----
      
container_commands:
  01killhttpd:
    command: "killall httpd"
  02waitforhttpddeath:
    command: "sleep 3"
```

**참고**  
프라이빗 키를 포함한 구성 파일을 소스 제어에 커밋하지 마십시오. 구성을 테스트하고 작동 여부를 확인한 후 Amazon S3에 프라이빗 키를 저장하고 배포 중에 다운로드하도록 구성을 변경합니다. 지침은 [프라이빗 키를 Amazon S3에 안전하게 저장](https-storingprivatekeys.md) 섹션을 참조하세요.

**Amazon Linux 2023 환경에 대한 참고 사항**  
Amazon Linux 2023에서는 `mod_wsgi`가 패키지 리포지토리에 포함되어 있지 않으므로 별도로 설치해야 합니다. 설치 지침은 PyPI의 [mod\$1wsgi](https://pypi.org/project/mod-wsgi/)를 참조하세요.

단일 인스턴스 환경에서 포트 443의 트래픽을 허용하도록 인스턴스의 보안 그룹도 수정해야 합니다. 다음 구성 파일은 CloudFormation [함수](ebextensions-functions.md)를 사용하여 보안 그룹의 ID를 검색하고 여기에 규칙을 추가합니다.

**Example .ebextensions/https-instance-single.config**  

```
Resources:
  sslSecurityGroupIngress: 
    Type: AWS::EC2::SecurityGroupIngress
    Properties:
      GroupId: {"Fn::GetAtt" : ["AWSEBSecurityGroup", "GroupId"]}
      IpProtocol: tcp
      ToPort: 443
      FromPort: 443
      CidrIp: 0.0.0.0/0
```

로드 밸런싱된 환경에서 로드 밸런서가 [안전한 트래픽을 그대로 통과](https-tcp-passthrough.md)시키거나 종단 간 암호화를 위해 [암호 해독과 재암호화](configuring-https-endtoend.md)하도록 구성합니다.

# Ruby를 실행하는 EC2 인스턴스에서 HTTPS 종료
<a name="https-singleinstance-ruby"></a>

Ruby 컨테이너 형식의 경우 HTTPS를 활성화하는 방법은 사용되는 애플리케이션 서버 유형에 따라 다릅니다.

**Topics**
+ [Puma를 사용하는 Ruby용 HTTPS 구성](#Puma)
+ [Passenger를 사용하는 Ruby용 HTTPS 구성](#Passenger)

## Puma를 사용하는 Ruby용 HTTPS 구성
<a name="Puma"></a>

Puma를 애플리케이션 서버로 사용하는 Ruby 컨테이너 형식의 경우 [구성 파일](ebextensions.md)을 사용하여 HTTPS를 활성화합니다.

지침에 따라 인증서와 프라이빗 키 구성 요소를 바꿔 구성 파일에 다음 조각을 추가한 후, 이를 소스 번들의 `.ebextensions` 디렉터리에 저장합니다. 구성 파일은 다음 작업을 수행합니다.
+ `files` 키는 인스턴스에 다음 파일을 만듭니다.  
`/etc/nginx/conf.d/https.conf`  
nginx 서버를 구성합니다. 이 파일은 nginx 서비스가 시작되면 로드됩니다.  
`/etc/pki/tls/certs/server.crt`  
인스턴스에 인증서 파일을 만듭니다. *인증서 파일 내용*을 본인의 인증서 내용으로 바꿉니다.  
YAML은 일정한 들여쓰기를 사용합니다. 예제 구성 파일의 콘텐츠를 바꿀 때 들여쓰기 레벨을 일치시키고, 텍스트 편집기가 탭 문자 대신 공백을 사용해 들여쓰기를 하도록 합니다.
중간 인증서를 보유한 경우, 사이트 인증 후 `server.crt`에 포함시킵니다.  

  ```
        -----BEGIN CERTIFICATE-----
    certificate file contents
    -----END CERTIFICATE-----
    -----BEGIN CERTIFICATE-----
    first intermediate certificate
    -----END CERTIFICATE-----
    -----BEGIN CERTIFICATE-----
    second intermediate certificate
    -----END CERTIFICATE-----
  ```  
`/etc/pki/tls/certs/server.key`  
인스턴스에 프라이빗 키 파일을 만듭니다. *프라이빗 키 내용*을 인증서 요청 또는 자체 서명된 인증서를 만들 때 사용한 프라이빗 키 내용으로 바꿉니다.

**Example .ebextensions/https-instance.config**  

```
files:
  /etc/nginx/conf.d/https.conf:
    content: |
      # HTTPS server

      server {
          listen       443;
          server_name  localhost;
          
          ssl                  on;
          ssl_certificate      /etc/pki/tls/certs/server.crt;
          ssl_certificate_key  /etc/pki/tls/certs/server.key;
          
          ssl_session_timeout  5m;
          
          ssl_protocols  TLSv1 TLSv1.1 TLSv1.2;
          ssl_prefer_server_ciphers   on;
          
          location / {
              proxy_pass  http://my_app;
              proxy_set_header        Host            $host;
              proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
              proxy_set_header        X-Forwarded-Proto https;
          }

          location /assets {
            alias /var/app/current/public/assets;
            gzip_static on;
            gzip on;
            expires max;
            add_header Cache-Control public;
          }

          location /public {
            alias /var/app/current/public;
            gzip_static on;
            gzip on;
            expires max;
            add_header Cache-Control public;
          }
      }

  /etc/pki/tls/certs/server.crt:
    content: |
      -----BEGIN CERTIFICATE-----
      certificate file contents
      -----END CERTIFICATE-----
      
  /etc/pki/tls/certs/server.key:
    content: |      
      -----BEGIN RSA PRIVATE KEY-----
      private key contents # See note below.
      -----END RSA PRIVATE KEY-----
```

**참고**  
프라이빗 키를 포함한 구성 파일을 소스 제어에 커밋하지 마십시오. 구성을 테스트하고 작동 여부를 확인한 후 Amazon S3에 프라이빗 키를 저장하고 배포 중에 다운로드하도록 구성을 변경합니다. 지침은 [프라이빗 키를 Amazon S3에 안전하게 저장](https-storingprivatekeys.md) 섹션을 참조하세요.

단일 인스턴스 환경에서 포트 443의 트래픽을 허용하도록 인스턴스의 보안 그룹도 수정해야 합니다. 다음 구성 파일은 CloudFormation [함수](ebextensions-functions.md)를 사용하여 보안 그룹의 ID를 검색하고 여기에 규칙을 추가합니다.

**Example .ebextensions/https-instance-single.config**  

```
Resources:
  sslSecurityGroupIngress: 
    Type: AWS::EC2::SecurityGroupIngress
    Properties:
      GroupId: {"Fn::GetAtt" : ["AWSEBSecurityGroup", "GroupId"]}
      IpProtocol: tcp
      ToPort: 443
      FromPort: 443
      CidrIp: 0.0.0.0/0
```

로드 밸런싱된 환경에서 로드 밸런서가 [안전한 트래픽을 그대로 통과](https-tcp-passthrough.md)시키거나 종단 간 암호화를 위해 [암호 해독과 재암호화](configuring-https-endtoend.md)하도록 구성합니다.

## Passenger를 사용하는 Ruby용 HTTPS 구성
<a name="Passenger"></a>

Passenger를 애플리케이션 서버로 사용하는 Ruby 컨테이너 형식의 경우 구성 파일과 JSON 파일을 모두 사용하여 HTTPS를 활성화합니다.

**Passenger를 사용하는 Ruby용 HTTPS를 구성하려면**

1. 지침에 따라 인증서와 프라이빗 키 구성 요소를 바꿔 구성 파일에 다음 조각을 추가한 후, 이를 소스 번들의 `.ebextensions` 디렉터리에 저장합니다. 구성 파일은 다음 작업을 수행합니다.
   + `files` 키는 인스턴스에 다음 파일을 만듭니다.  
`/etc/pki/tls/certs/server.crt`  
인스턴스에 인증서 파일을 만듭니다. *인증서 파일 내용*을 본인의 인증서 내용으로 바꿉니다.  
YAML은 일정한 들여쓰기를 사용합니다. 예제 구성 파일의 콘텐츠를 바꿀 때 들여쓰기 레벨을 일치시키고, 텍스트 편집기가 탭 문자 대신 공백을 사용해 들여쓰기를 하도록 합니다.
중간 인증서를 보유한 경우, 사이트 인증 후 `server.crt`에 포함시킵니다.  

     ```
           -----BEGIN CERTIFICATE-----
       certificate file contents
       -----END CERTIFICATE-----
       -----BEGIN CERTIFICATE-----
       first intermediate certificate
       -----END CERTIFICATE-----
       -----BEGIN CERTIFICATE-----
       second intermediate certificate
       -----END CERTIFICATE-----
     ```  
`/etc/pki/tls/certs/server.key`  
인스턴스에 프라이빗 키 파일을 만듭니다. *프라이빗 키 내용*을 인증서 요청 또는 자체 서명된 인증서를 만들 때 사용한 프라이빗 키 내용으로 바꿉니다.  
**Example Passenger를 사용하는 Ruby용 HTTPS를 구성하기 위한 .Ebextensions 조각**  

   ```
   files:
     /etc/pki/tls/certs/server.crt:
       content: |
         -----BEGIN CERTIFICATE-----
         certificate file contents
         -----END CERTIFICATE-----
         
     /etc/pki/tls/certs/server.key:
       content: |      
         -----BEGIN RSA PRIVATE KEY-----
         private key contents # See note below.
         -----END RSA PRIVATE KEY-----
   ```
**참고**  
프라이빗 키를 포함한 구성 파일을 소스 제어에 커밋하지 마십시오. 구성을 테스트하고 작동 여부를 확인한 후 Amazon S3에 프라이빗 키를 저장하고 배포 중에 다운로드하도록 구성을 변경합니다. 지침은 [프라이빗 키를 Amazon S3에 안전하게 저장](https-storingprivatekeys.md) 섹션을 참조하세요.

1. 텍스트 파일을 만들어 파일에 다음 JSON을 추가합니다. 이름이 `passenger-standalone.json`인 소스 번들의 루트 디렉터리에 이를 저장합니다. 이 JSON 파일은 HTTPS를 사용하도록 Passenger를 구성합니다.
**중요**  
이 JSON 파일에는 바이트 순서 표시(BOM)가 포함되어 있으면 안 됩니다. 포함되어 있으면 Passenger JSON 라이브러리가 파일을 올바르게 읽지 못하므로 Passenger 서비스가 시작되지 않습니다.  
**Example passenger-standalone.json**  

   ```
   {
     "ssl" : true,
     "ssl_port" : 443,
     "ssl_certificate" : "/etc/pki/tls/certs/server.crt",
     "ssl_certificate_key" : "/etc/pki/tls/certs/server.key"
   }
   ```

단일 인스턴스 환경에서 포트 443의 트래픽을 허용하도록 인스턴스의 보안 그룹도 수정해야 합니다. 다음 구성 파일은 CloudFormation [함수](ebextensions-functions.md)를 사용하여 보안 그룹의 ID를 검색하고 여기에 규칙을 추가합니다.

**Example .ebextensions/https-instance-single.config**  

```
Resources:
  sslSecurityGroupIngress: 
    Type: AWS::EC2::SecurityGroupIngress
    Properties:
      GroupId: {"Fn::GetAtt" : ["AWSEBSecurityGroup", "GroupId"]}
      IpProtocol: tcp
      ToPort: 443
      FromPort: 443
      CidrIp: 0.0.0.0/0
```

로드 밸런싱된 환경에서 로드 밸런서가 [안전한 트래픽을 그대로 통과](https-tcp-passthrough.md)시키거나 종단 간 암호화를 위해 [암호 해독과 재암호화](configuring-https-endtoend.md)하도록 구성합니다.

# Tomcat을 실행하는 EC2 인스턴스에서 HTTPS 종료
<a name="https-singleinstance-tomcat"></a>

Tomcat 컨테이너 형식의 경우, [구성 파일](ebextensions.md)을 사용하여 Apache HTTP Server가 Tomcat의 역방향 프록시 역할을 할 때 HTTPS를 사용하도록 합니다.

지침에 따라 인증서와 프라이빗 키 구성 요소를 바꿔 구성 파일에 다음 조각을 추가한 후, 이를 소스 번들의 `.ebextensions` 디렉터리에 저장합니다. 구성 파일은 다음 작업을 수행합니다.
+ `files` 키는 인스턴스에 다음 파일을 만듭니다.  
`/etc/pki/tls/certs/server.crt`  
인스턴스에 인증서 파일을 만듭니다. *인증서 파일 내용*을 본인의 인증서 내용으로 바꿉니다.  
YAML은 일정한 들여쓰기를 사용합니다. 예제 구성 파일의 콘텐츠를 바꿀 때 들여쓰기 레벨을 일치시키고, 텍스트 편집기가 탭 문자 대신 공백을 사용해 들여쓰기를 하도록 합니다.  
`/etc/pki/tls/certs/server.key`  
인스턴스에 프라이빗 키 파일을 만듭니다. *프라이빗 키 내용*을 인증서 요청 또는 자체 서명된 인증서를 만들 때 사용한 프라이빗 키 내용으로 바꿉니다.  
`/opt/elasticbeanstalk/hooks/appdeploy/post/99_start_httpd.sh`  
배포 후 후크 스크립트를 생성하여 httpd 서비스를 다시 시작합니다.

**Example .ebextensions/https-instance.config**  

```
files:
  /etc/pki/tls/certs/server.crt:
    mode: "000400"
    owner: root
    group: root
    content: |
      -----BEGIN CERTIFICATE-----
      certificate file contents
      -----END CERTIFICATE-----
      
  /etc/pki/tls/certs/server.key:
    mode: "000400"
    owner: root
    group: root
    content: |
      -----BEGIN RSA PRIVATE KEY-----
      private key contents # See note below.
      -----END RSA PRIVATE KEY-----

  /opt/elasticbeanstalk/hooks/appdeploy/post/99_start_httpd.sh:
    mode: "000755"
    owner: root
    group: root
    content: |
      #!/usr/bin/env bash
      sudo service httpd restart
```

또한 환경의 프록시 서버가 포트 443에서 수신 대기하도록 구성해야 합니다. 다음 Apache 2.4 구성은 포트 443에 리스너를 추가합니다. 자세한 내용은 [프록시 서버 구성](java-tomcat-proxy.md) 단원을 참조하십시오.

**Example .ebextensions/httpd/conf.d/ssl.conf**  

```
Listen 443
<VirtualHost *:443> 
  ServerName server-name
  SSLEngine on 
  SSLCertificateFile "/etc/pki/tls/certs/server.crt" 
  SSLCertificateKeyFile "/etc/pki/tls/certs/server.key" 

  <Proxy *> 
    Require all granted 
  </Proxy> 
  ProxyPass / http://localhost:8080/ retry=0 
  ProxyPassReverse / http://localhost:8080/ 
  ProxyPreserveHost on 

  ErrorLog /var/log/httpd/elasticbeanstalk-ssl-error_log 

</VirtualHost>
```

인증서 벤더는 모바일 클라이언트와의 호환성 향상을 위해 중간 인증서를 설치할 수 있습니다. SSL 구성 파일에 다음을 추가하여 중간 인증서 인증기관(CA) 번들로 Apache를 구성합니다([기본 Apache 구성 확장 및 재정의 — Amazon Linux AMI (AL1)](java-tomcat-proxy.md#java-tomcat-proxy-apache)에서 위치 참조).
+ `ssl.conf` 파일 내용에 체인 파일을 지정합니다.

  ```
  SSLCertificateKeyFile "/etc/pki/tls/certs/server.key"
  SSLCertificateChainFile "/etc/pki/tls/certs/gd_bundle.crt"
  SSLCipherSuite        EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH
  ```
+ `files` 키에 중간 인증서의 내용이 포함된 새 항목을 추가합니다.

  ```
  files:
    /etc/pki/tls/certs/gd_bundle.crt:
      mode: "000400"
      owner: root
      group: root
      content: |
        -----BEGIN CERTIFICATE-----
        First intermediate certificate
        -----END CERTIFICATE-----
        -----BEGIN CERTIFICATE-----
        Second intermediate certificate
        -----END CERTIFICATE-----
  ```

**참고**  
프라이빗 키를 포함한 구성 파일을 소스 제어에 커밋하지 마십시오. 구성을 테스트하고 작동 여부를 확인한 후 Amazon S3에 프라이빗 키를 저장하고 배포 중에 다운로드하도록 구성을 변경합니다. 지침은 [프라이빗 키를 Amazon S3에 안전하게 저장](https-storingprivatekeys.md) 섹션을 참조하세요.

단일 인스턴스 환경에서 포트 443의 트래픽을 허용하도록 인스턴스의 보안 그룹도 수정해야 합니다. 다음 구성 파일은 CloudFormation [함수](ebextensions-functions.md)를 사용하여 보안 그룹의 ID를 검색하고 여기에 규칙을 추가합니다.

**Example .ebextensions/https-instance-single.config**  

```
Resources:
  sslSecurityGroupIngress: 
    Type: AWS::EC2::SecurityGroupIngress
    Properties:
      GroupId: {"Fn::GetAtt" : ["AWSEBSecurityGroup", "GroupId"]}
      IpProtocol: tcp
      ToPort: 443
      FromPort: 443
      CidrIp: 0.0.0.0/0
```

로드 밸런싱된 환경에서 로드 밸런서가 [안전한 트래픽을 그대로 통과](https-tcp-passthrough.md)시키거나 종단 간 암호화를 위해 [암호 해독과 재암호화](configuring-https-endtoend.md)하도록 구성합니다.

# Linux의 .NET Core를 실행하는 Amazon EC2 인스턴스에서 HTTPS 종료
<a name="https-singleinstance-dotnet-linux"></a>

Linux의 .NET Core 컨테이너 유형의 경우 `.ebextensions`[ 구성 파일](ebextensions.md)과 HTTPS를 사용하도록 nginx 서버를 구성하는 nginx 구성 파일로 HTTPS를 활성화합니다.

지침에 따라 인증서와 프라이빗 키 자리 표시자를 바꿔 구성 파일에 다음 조각을 추가한 후, 이를 `.ebextensions` 디렉터리에 저장합니다. 구성 파일은 다음 작업을 수행합니다.
+ `files` 키는 인스턴스에 다음 파일을 만듭니다.  
`/etc/pki/tls/certs/server.crt`  
인스턴스에 인증서 파일을 만듭니다. *인증서 파일 내용*을 본인의 인증서 내용으로 바꿉니다.  
YAML은 일정한 들여쓰기를 사용합니다. 예제 구성 파일의 콘텐츠를 바꿀 때 들여쓰기 레벨을 일치시키고, 텍스트 편집기가 탭 문자 대신 공백을 사용해 들여쓰기를 하도록 합니다.
중간 인증서를 보유한 경우, 사이트 인증 후 `server.crt`에 포함시킵니다.  

  ```
        -----BEGIN CERTIFICATE-----
    certificate file contents
    -----END CERTIFICATE-----
    -----BEGIN CERTIFICATE-----
    first intermediate certificate
    -----END CERTIFICATE-----
    -----BEGIN CERTIFICATE-----
    second intermediate certificate
    -----END CERTIFICATE-----
  ```  
`/etc/pki/tls/certs/server.key`  
인스턴스에 프라이빗 키 파일을 만듭니다. *프라이빗 키 내용*을 인증서 요청 또는 자체 서명된 인증서를 만들 때 사용한 프라이빗 키 내용으로 바꿉니다.

**Example .ebextensions/https-instance.config**  

```
files:
  /etc/pki/tls/certs/server.crt:
    content: |
      -----BEGIN CERTIFICATE-----
      certificate file contents
      -----END CERTIFICATE-----
      
  /etc/pki/tls/certs/server.key:
    content: |      
      -----BEGIN RSA PRIVATE KEY-----
      private key contents # See note below.
      -----END RSA PRIVATE KEY-----
```

**참고**  
프라이빗 키를 포함한 구성 파일을 소스 제어에 커밋하지 마십시오. 구성을 테스트하고 작동 여부를 확인한 후 Amazon S3에 프라이빗 키를 저장하고 배포 중에 다운로드하도록 구성을 변경합니다. 지침은 [프라이빗 키를 Amazon S3에 안전하게 저장](https-storingprivatekeys.md) 섹션을 참조하세요.

소스 번들의 `.platform/nginx/conf.d/` 디렉터리에서 `.conf` 확장명을 사용하는 파일에 다음을 놓습니다(예: `.platform/nginx/conf.d/https.conf`). *app\$1port*를 애플리케이션이 수신 대기하는 포트 번호로 바꿉니다. 이 예제에서는 SSL을 사용하여 포트 443에서 수신 대기하도록 nginx 서버를 구성합니다. Linux의 .NET Core 플랫폼의 이러한 구성 파일에 대한 자세한 내용은 [프록시 서버 구성](dotnet-linux-platform-nginx.md) 단원을 참조하십시오.

**Example .platforms/nginx/conf.d/https.conf**  

```
# HTTPS server

server {
    listen       443 ssl;
    server_name  localhost;
    
    ssl_certificate      /etc/pki/tls/certs/server.crt;
    ssl_certificate_key  /etc/pki/tls/certs/server.key;
    
    ssl_session_timeout  5m;
    
    ssl_protocols  TLSv1 TLSv1.1 TLSv1.2;
    ssl_prefer_server_ciphers   on;
    
    location / {
        proxy_pass  http://localhost:app_port;
        proxy_set_header   Connection "";
        proxy_http_version 1.1;
        proxy_set_header        Host            $host;
        proxy_set_header        X-Real-IP       $remote_addr;
        proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header        X-Forwarded-Proto https;
    }
}
```

단일 인스턴스 환경에서 포트 443의 트래픽을 허용하도록 인스턴스의 보안 그룹도 수정해야 합니다. 다음 구성 파일은 CloudFormation [함수](ebextensions-functions.md)를 사용하여 보안 그룹의 ID를 검색하고 여기에 규칙을 추가합니다.

**Example .ebextensions/https-instance-single.config**  

```
Resources:
  sslSecurityGroupIngress: 
    Type: AWS::EC2::SecurityGroupIngress
    Properties:
      GroupId: {"Fn::GetAtt" : ["AWSEBSecurityGroup", "GroupId"]}
      IpProtocol: tcp
      ToPort: 443
      FromPort: 443
      CidrIp: 0.0.0.0/0
```

로드 밸런싱된 환경에서 로드 밸런서가 [안전한 트래픽을 그대로 통과](https-tcp-passthrough.md)시키거나 종단 간 암호화를 위해 [암호 해독과 재암호화](configuring-https-endtoend.md)하도록 구성합니다.

# .NET을 실행하는 Amazon EC2 인스턴스에서 HTTPS 종료
<a name="SSLNET.SingleInstance"></a>

다음 [구성 파일](ebextensions.md)은 다음 작업을 수행하는 Windows PowerShell 스크립트를 만들고 실행합니다.
+ 포트 443에 바인딩된 기존 HTTPS 인증서 확인
+ Amazon S3 버킷에서 [PFX 인증서](configuring-https-ssl.md) 가져오기
**참고**  
Amazon S3 버킷의 SSL 인증서에 액세스하려면 `aws-elasticbeanstalk-ec2-role`에 `AmazonS3ReadOnlyAccess` 정책을 추가합니다.
+ 암호를 가져옵니다 AWS Secrets Manager.
**참고**  
인증서 암호가 포함된 비밀에 대한 `secretsmanager:GetSecretValue` 작업을 허용하는 문을 `aws-elasticbeanstalk-ec2-role`에 추가합니다.
+ 인증서를 설치합니다.
+ 포트 443에 인증서를 바인딩합니다.
**참고**  
HTTP 엔드포인트(포트 80)를 제거하려면 예제의 **HTTP 바인딩 제거** 섹션 아래에서 `Remove-WebBinding` 명령을 추가합니다.

**Example .ebextensions/https-instance-dotnet.config**  

```
files:
  "C:\\certs\\install-cert.ps1":
    content: |
      import-module webadministration
      ## Settings - replace the following values with your own
      $bucket = "amzn-s3-demo-bucket"  ## S3 bucket name
      $certkey = "example.com.pfx"    ## S3 object key for your PFX certificate
      $secretname = "example_secret"  ## AWS Secrets Manager name for a secret that contains the certificate's password
      ##

      # Set variables
      $certfile = "C:\cert.pfx"
      $pwd = Get-SECSecretValue -SecretId $secretname | select -expand SecretString

      # Clean up existing binding
      if ( Get-WebBinding "Default Web Site" -Port 443 ) {
        Echo "Removing WebBinding"
        Remove-WebBinding -Name "Default Web Site" -BindingInformation *:443:
      }
      if ( Get-Item -path IIS:\SslBindings\0.0.0.0!443 ) {
        Echo "Deregistering WebBinding from IIS"
        Remove-Item -path IIS:\SslBindings\0.0.0.0!443
      }

      # Download certificate from S3
      Read-S3Object -BucketName $bucket -Key $certkey -File $certfile
      
      # Install certificate
      Echo "Installing cert..."
      $securepwd = ConvertTo-SecureString -String $pwd -Force -AsPlainText
      $cert = Import-PfxCertificate -FilePath $certfile cert:\localMachine\my -Password $securepwd
      
      # Create site binding
      Echo "Creating and registering WebBinding"
      New-WebBinding -Name "Default Web Site" -IP "*" -Port 443 -Protocol https
      New-Item -path IIS:\SslBindings\0.0.0.0!443 -value $cert -Force
      
      ## Remove the HTTP binding
      ## (optional) Uncomment the following line to unbind port 80
      # Remove-WebBinding -Name "Default Web Site" -BindingInformation *:80:
      ##
      
      # Update firewall
      netsh advfirewall firewall add rule name="Open port 443" protocol=TCP localport=443 action=allow dir=OUT

commands:
  00_install_ssl:
    command: powershell -NoProfile -ExecutionPolicy Bypass -file C:\\certs\\install-cert.ps1
```

단일 인스턴스 환경에서 포트 443의 트래픽을 허용하도록 인스턴스의 보안 그룹도 수정해야 합니다. 다음 구성 파일은 CloudFormation [함수](ebextensions-functions.md)를 사용하여 보안 그룹의 ID를 검색하고 여기에 규칙을 추가합니다.

**Example .ebextensions/https-instance-single.config**  

```
Resources:
  sslSecurityGroupIngress: 
    Type: AWS::EC2::SecurityGroupIngress
    Properties:
      GroupId: {"Fn::GetAtt" : ["AWSEBSecurityGroup", "GroupId"]}
      IpProtocol: tcp
      ToPort: 443
      FromPort: 443
      CidrIp: 0.0.0.0/0
```

로드 밸런싱된 환경에서 로드 밸런서가 [안전한 트래픽을 그대로 통과](https-tcp-passthrough.md)시키거나 종단 간 암호화를 위해 [암호 해독과 재암호화](configuring-https-endtoend.md)하도록 구성합니다.

# 로드 밸런싱된 Elastic Beanstalk 환경에서 종단 간 암호화 구성
<a name="configuring-https-endtoend"></a>

사용자의 애플리케이션에서는 로드 밸런서에서 보안 연결을 종료하고 백엔드에서 HTTP를 사용하면 충분할 수도 있습니다. 연결에 포함되지 않는 인스턴스는 동일한 계정에서 실행되더라도 AWS 리소스 간의 네트워크 트래픽을 수신할 수 없습니다.

하지만 엄격한 외부 규정을 준수해야 하는 애플리케이션을 개발 중인 경우 모든 네트워크 연결을 보호해야 할 수 있습니다. 이러한 요구 사항을 충족하도록 Elastic Beanstalk 콘솔이나 [구성 파일](ebextensions.md)을 사용하여 Elastic Beanstalk 환경의 로드 밸런서를 백엔드 인스턴스에 안전하게 연결할 수 있습니다. 다음 절차는 구성 파일에 중점을 둡니다.

먼저 [로드 밸런서에 보안 리스너를 추가합니다](configuring-https-elb.md)(아직 없는 경우).

또한 보안 포트를 수신하고 HTTPS 연결을 종료하도록 사용자 환경에서 인스턴스를 구성해야 합니다. 구성은 플랫폼에 따라 다릅니다. 자세한 내용은 [인스턴스에서 HTTPS 종료 구성](https-singleinstance.md) 섹션을 참조하세요. EC2 인스턴스에 대한 [자체 서명된 인증서](configuring-https-ssl.md)를 문제 없이 사용할 수 있습니다.

그런 다음 애플리케이션에서 사용되는 보안 포트에서 HTTPS를 사용하여 트래픽을 전달하도록 리스너를 구성합니다. 환경에서 사용되는 로드 밸런서 유형에 따라 다음 구성 파일 중 하나를 사용합니다.

**`.ebextensions/https-reencrypt-clb.config`**

이 구성 파일을 Classic Load Balancer와 함께 사용합니다. 로드 밸런스 구성 외에도, 구성 파일은 로드 밸런서에서 안전하게 연결할 수 있도록 하기 위해 포트 443 및 HTTPS를 사용하도록 기본 상태 확인을 변경합니다.

```
option_settings:
  aws:elb:listener:443:
    InstancePort: 443
    InstanceProtocol: HTTPS
  aws:elasticbeanstalk:application:
    Application Healthcheck URL: HTTPS:443/
```

**`.ebextensions/https-reencrypt-alb.config`**

이 구성 파일을 Application Load Balancer와 함께 사용합니다.

```
option_settings:
  aws:elbv2:listener:443:
    DefaultProcess: https
    ListenerEnabled: 'true'
    Protocol: HTTPS
  aws:elasticbeanstalk:environment:process:https:
    Port: '443'
    Protocol: HTTPS
```

**`.ebextensions/https-reencrypt-nlb.config`**

이 구성 파일을 Network Load Balancer와 함께 사용합니다.

```
option_settings:
  aws:elbv2:listener:443:
    DefaultProcess: https
    ListenerEnabled: 'true'
  aws:elasticbeanstalk:environment:process:https:
    Port: '443'
```

Application Load Balancer에는 특정 경로로 전송되는 트래픽을 위한 동일한 포트에 기본이 아닌 리스너가 있을 수 있기 때문에 `DefaultProcess` 옵션이라는 이름이 지정되었습니다. 자세한 내용은 [Application Load Balancer](environments-cfg-alb.md) 단원을 참조하세요. Network Load Balancer의 경우 이 옵션은 이 리스너의 대상 프로세스만 지원합니다.

이 예제에서는 프로세스가 보안(HTTPS) 트래픽을 수신하기 때문에 프로세스 이름을 `https`로 지정했습니다. Network Load Balancer는 TCP로만 작동하기 때문에 이 리스너는 TCP 프로토콜을 사용하여 트래픽을 대상 포트의 프로세스로 전송합니다. HTTP와 HTTPS 네트워크 트래픽은 TCP 최상위에서 구현되기 때문에 이렇게 해도 됩니다.

**참고**  
EB CLI 및 Elastic Beanstalk 콘솔에서 위 옵션의 권장 값을 적용합니다. 구성 파일을 사용해 동일하게 구성하고자 하는 경우 이러한 설정을 제거해야 합니다. 세부 정보는 [권장 값](command-options.md#configuration-options-recommendedvalues) 단원을 참조하십시오.

다음 작업에서는 로드 밸런서의 보안 그룹을 수정해 트래픽을 허용해야 합니다. 로드 밸런서의 보안 그룹은 환경을 시작하는 [Amazon Virtual Private Cloud](https://docs.aws.amazon.com/vpc/latest/userguide/)(Amazon VPC)에 따라 기본 VPC 또는 사용자 지정 VPC가 달라집니다. 기본 VPC에서는 모든 로드 밸런서에서 사용 가능한 기본 보안 그룹을 Elastic Load Balancing에서 제공합니다. 사용자가 생성한 Amazon VPC에서는 로드 밸런서에서 사용할 보안 그룹을 Elastic Beanstalk에서 생성합니다.

두 시나리오를 모두 지원하려면 보안 그룹을 생성하고 Elastic Beanstalk에 해당 보안 그룹을 사용하도록 지시할 수 있습니다. 다음 구성 파일에서는 보안 그룹을 생성하여 로드 밸런서에 연결합니다.

**`.ebextensions/https-lbsecuritygroup.config`**

```
option_settings:
  # Use the custom security group for the load balancer
  aws:elb:loadbalancer:
    SecurityGroups: '`{ "Ref" : "loadbalancersg" }`'
    ManagedSecurityGroup: '`{ "Ref" : "loadbalancersg" }`'

Resources:
  loadbalancersg:
    Type: AWS::EC2::SecurityGroup
    Properties:
      GroupDescription: load balancer security group
      VpcId: vpc-########
      SecurityGroupIngress:
        - IpProtocol: tcp
          FromPort: 443
          ToPort: 443
          CidrIp: 0.0.0.0/0
        - IpProtocol: tcp
          FromPort: 80
          ToPort: 80
          CidrIp: 0.0.0.0/0
      SecurityGroupEgress:
        - IpProtocol: tcp
          FromPort: 80
          ToPort: 80
          CidrIp: 0.0.0.0/0
```

강조 표시된 텍스트를 기본 또는 사용자 지정 VPC ID로 바꿉니다. 이전의 예제에는 HTTP 연결 허용을 위해 포트 80을 통한 송수신이 포함됩니다. 보안 연결만 허용하려면 해당 속성을 제거할 수 있습니다.

마지막으로 로드 밸런서의 보안 그룹과 인스턴스의 보안 그룹 간의 포트 443을 통한 통신을 허용하는 송수신 규칙을 추가합니다.

**`.ebextensions/https-backendsecurity.config`**

```
Resources:
  # Add 443-inbound to instance security group (AWSEBSecurityGroup)
  httpsFromLoadBalancerSG: 
    Type: AWS::EC2::SecurityGroupIngress
    Properties:
      GroupId: {"Fn::GetAtt" : ["AWSEBSecurityGroup", "GroupId"]}
      IpProtocol: tcp
      ToPort: 443
      FromPort: 443
      SourceSecurityGroupId: {"Fn::GetAtt" : ["loadbalancersg", "GroupId"]}
  # Add 443-outbound to load balancer security group (loadbalancersg)
  httpsToBackendInstances: 
    Type: AWS::EC2::SecurityGroupEgress
    Properties:
      GroupId: {"Fn::GetAtt" : ["loadbalancersg", "GroupId"]}
      IpProtocol: tcp
      ToPort: 443
      FromPort: 443
      DestinationSecurityGroupId: {"Fn::GetAtt" : ["AWSEBSecurityGroup", "GroupId"]}
```

이 작업을 보안 그룹 생성과 별도로 수행하여 순환 종속성을 생성하지 않고 원본 보안 그룹과 대상 보안 그룹을 제한할 수 있습니다.

이전의 작업이 모두 완료된 후에는 로드 밸런서가 HTTPS를 사용하여 백엔드 인스턴스에 안전히 연결됩니다. 로드 밸런서에서는 인스턴스의 인증서가 자체 서명된 인증서이든 신뢰할 수 있는 인증 기관에서 발급한 인증서이든 상관없이 제공된 인증서를 수락합니다.

이 동작은 특정 인증서만 신뢰하도록 규정하는 정책을 로드 밸런서에 추가하여 변경할 수 있습니다. 다음 구성 파일은 두 정책을 생성합니다. 한 정책은 퍼블릭 인증서를 지정하고 다른 정책은 로드 밸런서에 인스턴스 포트 443 연결에 대한 인증서만 신뢰하도록 규정합니다.

**`.ebextensions/https-backendauth.config`**

```
option_settings:
  # Backend Encryption Policy
  aws:elb:policies:backendencryption:
    PublicKeyPolicyNames: backendkey
    InstancePorts:  443
  # Public Key Policy
  aws:elb:policies:backendkey:
    PublicKey: |
      -----BEGIN CERTIFICATE-----
      ################################################################
      ################################################################
      ################################################################
      ################################################################
      ################################################
      -----END CERTIFICATE-----
```

강조 표시된 텍스트를 EC2 인스턴스의 퍼블릭 인증서 내용으로 대체합니다.

# TCP 패스스루를 위한 환경 로드 밸런서 구성
<a name="https-tcp-passthrough"></a>

 AWS Elastic Beanstalk 환경의 로드 밸런서가 HTTPS 트래픽을 복호화하지 않도록 하려면 백엔드 인스턴스에 요청을 있는 그대로 릴레이하도록 보안 리스너를 구성할 수 있습니다.

**중요**  
HTTPS 트래픽을 복호화하지 않고 릴레이하도록 로드 밸런서를 구성하면 단점이 생깁니다. 즉, 로드 밸런서에서 암호화된 요청을 확인할 수 없기 때문에 라우팅을 최적화하거나 대응 측정치를 보고할 수 없다는 것입니다.

먼저 [HTTPS를 종료하도록 환경의 EC2 인스턴스를 구성](https-singleinstance.md)합니다. 목록에 로드 밸런서를 추가하기 전에 단일 인스턴스 환경의 구성을 테스트하여 모두 작동하는지 확인합니다.

프로젝트에 [구성 파일](ebextensions.md)을 추가하여 TCP 패킷 그대로 백엔드 인스턴스의 포트 443에 전달하는 리스너를 포트 443에서 구성합니다.

**`.ebextensions/https-lb-passthrough.config`**

```
option_settings:
  aws:elb:listener:443:
    ListenerProtocol: TCP
    InstancePort: 443
    InstanceProtocol: TCP
```

또한 기본 [Amazon Virtual Private Cloud](https://docs.aws.amazon.com/vpc/latest/userguide/)(Amazon VPC)에서 인스턴스의 보안 그룹에 규칙을 추가하여 로드 밸런서로부터의 443 인바운드 트래픽을 허용해야 합니다.

**`.ebextensions/https-instance-securitygroup.config`**

```
Resources:
  443inboundfromloadbalancer:
    Type: AWS::EC2::SecurityGroupIngress
    Properties:
      GroupId: {"Fn::GetAtt" : ["AWSEBSecurityGroup", "GroupId"]}
      IpProtocol: tcp
      ToPort: 443
      FromPort: 443
      SourceSecurityGroupName: { "Fn::GetAtt": ["AWSEBLoadBalancer", "SourceSecurityGroup.GroupName"] }
```

사용자 지정 VPC에서는 Elastic Beanstalk가 보안 그룹 구성을 업데이트합니다.

# HTTP-HTTPS 리디렉션 구성
<a name="configuring-https-httpredirect"></a>

이 주제에서는 최종 사용자가 애플리케이션에 대한 HTTP 트래픽을 여전히 시작 중일 경우 이를 처리하는 방법을 설명합니다. 이 작업은 *HTTP-HTTPS 리디렉션*을 구성하여 실시합니다(*HTTPS 강제*라고도 지칭함).

리디렉션을 구성하려면 먼저 환경에서 HTTPS 트래픽을 처리하도록 구성합니다. 그런 다음 HTTP 트래픽을 HTTPS로 리디렉션합니다. 이 두 단계는 다음 하위 단원에서 설명합니다.

## HTTPS 트래픽을 처리하도록 환경 구성
<a name="configuring-https-httpredirect.https"></a>

환경의 로드 밸런싱 구성에 따라 다음 중 하나를 수행합니다.
+ **로드 밸런싱된 환경** – [HTTPS를 종료하도록 로드 밸런서를 구성](configuring-https-elb.md)합니다.
+ **단일 인스턴스 환경** – [인스턴스에서 HTTPS 연결을 종료하도록 애플리케이션을 구성](https-singleinstance.md)합니다. 이 구성은 환경의 플랫폼에 따라 달라집니다.

## HTTP 트래픽을 HTTPS로 리디렉션
<a name="configuring-https-httpredirect.redirect"></a>

애플리케이션의 HTTP 트래픽을 HTTPS로 리디렉션하려면 환경의 인스턴스에서 웹 서버를 구성하거나 환경의 Application Load Balancer를 구성할 수 있습니다.

**인스턴스 웹 서버 구성**  
이 방법은 모든 웹 서버 환경에서 작동합니다. HTTP 리디렉션 응답 상태로 HTTP 트래픽에 응답하도록 Amazon EC2 인스턴스에서 웹 서버를 구성합니다.

이 구성은 환경의 플랫폼에 따라 달라집니다. GitHub의 [https://github.com/awsdocs/elastic-beanstalk-samples/tree/master/configuration-files/aws-provided/security-configuration/https-redirect](https://github.com/awsdocs/elastic-beanstalk-samples/tree/master/configuration-files/aws-provided/security-configuration/https-redirect) 컬렉션에서 사용자 플랫폼의 폴더를 찾고 해당 폴더 내의 예제 구성 파일을 사용합니다.

환경에서 [Elastic Load Balancing 상태 확인](using-features.healthstatus.md#using-features.healthstatus.understanding)을 사용할 경우, 로드 밸런서에는 HTTP 200(OK) 응답으로 HTTP 상태 확인 메시지에 응답하기 위해 정상 인스턴스가 필요합니다. 따라서 사용자의 웹 서버가 해당 메시지를 HTTPS로 리디렉션하면 안 됩니다. [https://github.com/awsdocs/elastic-beanstalk-samples/tree/master/configuration-files/aws-provided/security-configuration/https-redirect](https://github.com/awsdocs/elastic-beanstalk-samples/tree/master/configuration-files/aws-provided/security-configuration/https-redirect)의 예제 구성 파일에서는 이 요구 사항을 정확히 처리합니다.

**로드 밸런서 구성**  
이 방법은 [Application Load Balancer](environments-cfg-alb.md)를 사용하는 로드 밸런싱된 환경에서 유효합니다. Application Load Balancer는 HTTP 트래픽이 수신될 때 리디렉션 응답을 보낼 수 있습니다. 이 경우 환경의 인스턴스에서 리디렉션을 구성할 필요가 없습니다.

GitHub에는 리디렉션을 위해 Application Load Balancer를 구성하는 방법을 보여주는 두 가지 예제 구성 파일이 있습니다.
+ [https://github.com/awsdocs/elastic-beanstalk-samples/blob/master/configuration-files/aws-provided/resource-configuration/alb-http-to-https-redirection-full.config](https://github.com/awsdocs/elastic-beanstalk-samples/blob/master/configuration-files/aws-provided/resource-configuration/alb-http-to-https-redirection-full.config) 구성 파일은 포트 443에 HTTPS 리스너를 생성하고 수신되는 HTTP 트래픽을 HTTPS로 리디렉션하도록 기본 포트 80 리스너를 수정합니다.
+ [https://github.com/awsdocs/elastic-beanstalk-samples/blob/master/configuration-files/aws-provided/resource-configuration/alb-http-to-https-redirection.config](https://github.com/awsdocs/elastic-beanstalk-samples/blob/master/configuration-files/aws-provided/resource-configuration/alb-http-to-https-redirection.config) 구성 파일은 443 리스너가 정의될 것으로 예상합니다. 이를 정의하기 위해 표준 Elastic Beanstalk 구성 네임스페이스 또는 Elastic Beanstalk 콘솔을 사용할 수 있습니다. 그런 다음 리디렉션을 위해 포트 80 리스너를 수정합니다.