

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

# 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)