

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

# AppSpec 'resources' 섹션(Amazon ECS 및 AWS Lambda 배포만 해당)
<a name="reference-appspec-file-structure-resources"></a>

 AppSpec 파일의 `'resources'` 섹션 내용은 해당 배포의 컴퓨팅 플랫폼에 따라 다릅니다. Amazon ECS 배포의 `'resources'` 섹션에는 Amazon ECS 작업 정의, 업데이트된 Amazon ECS 작업 세트로 트래픽을 라우팅하기 위한 포트 및 컨테이너, 기타 선택적 정보가 포함되어 있습니다. AWS Lambda 배포 `'resources'` 섹션에는 Lambda 함수의 이름, 별칭, 현재 버전 및 대상 버전이 포함되어 있습니다.

**Topics**
+ [AWS Lambda 배포를 위한 AppSpec 'resources' 섹션](#reference-appspec-file-structure-resources-lambda)
+ [Amazon ECS 배포를 위한 AppSpec 'resources' 섹션](#reference-appspec-file-structure-resources-ecs)

## AWS Lambda 배포를 위한 AppSpec 'resources' 섹션
<a name="reference-appspec-file-structure-resources-lambda"></a>

`'resources'` 섹션은 배포할 Lambda 함수를 지정하며 다음과 같은 구조를 갖습니다.

YAML:

```
resources:
  - {{name-of-function-to-deploy}}:
      type: "AWS::Lambda::Function"
      properties:
        name: {{name-of-lambda-function-to-deploy}}
        alias: {{alias-of-lambda-function-to-deploy}}
        currentversion: {{version-of-the-lambda-function-traffic-currently-points-to}}
        targetversion: {{version-of-the-lambda-function-to-shift-traffic-to}}
```

JSON:

```
"resources": [
    {
        "{{name-of-function-to-deploy}}" {
            "type": "AWS::Lambda::Function",
            "properties": {
                "name": "{{name-of-lambda-function-to-deploy}}",
                "alias": "{{alias-of-lambda-function-to-deploy}}",
                "currentversion": "{{version-of-the-lambda-function-traffic-currently-points-to}}",
                "targetversion": "{{version-of-the-lambda-function-to-shift-traffic-to}}"
            }
        }
    }
]
```

각 속성은 문자열로 지정됩니다.
+ `name` - 필수. 배포할 Lambda 함수의 이름입니다.
+ `alias` - 필수. Lambda 함수에 대한 별칭 이름입니다.
+ `currentversion` - 필수. 현재 가리키는 Lambda 함수 트래픽의 버전입니다. 값은 유효한 양의 정수여야 합니다.
+ `targetversion` - 필수. 전환되는 Lambda 함수 트래픽의 버전입니다. 값은 유효한 양의 정수여야 합니다.

## Amazon ECS 배포를 위한 AppSpec 'resources' 섹션
<a name="reference-appspec-file-structure-resources-ecs"></a>

 `'resources'` 섹션은 배포할 Amazon ECS 서비스를 지정하며 다음과 같은 구조를 갖습니다.

YAML:

```
Resources:
  - TargetService:
      Type: AWS::ECS::Service
      Properties:
        TaskDefinition: "{{task-definition-arn}}"
        LoadBalancerInfo: 
          ContainerName: "{{ecs-container-name}}" 
          ContainerPort: "{{ecs-application-port}}"
# Optional properties
        PlatformVersion: "{{ecs-service-platform-version}}"
        NetworkConfiguration:
          AwsvpcConfiguration:
            Subnets: ["{{ecs-subnet-1}}","{{ecs-subnet-n}}"] 
            SecurityGroups: ["{{ecs-security-group-1}}","{{ecs-security-group-n}}"] 
            AssignPublicIp: "{{ENABLED | DISABLED}}"
        CapacityProviderStrategy:
          - Base: {{integer}}
            CapacityProvider: "{{capacityProviderA}}"
            Weight: {{integer}}
          - Base: {{integer}}
            CapacityProvider: "{{capacityProviderB}}"
            Weight: {{integer}}
```

JSON:

```
"Resources": [
    {
        "TargetService": {
            "Type": "AWS::ECS::Service",
            "Properties": {
                "TaskDefinition": "{{task-definition-arn}}",
                "LoadBalancerInfo": {
                    "ContainerName": "{{ecs-container-name}}",
                    "ContainerPort": "{{ecs-application-port}}"
                },
                "PlatformVersion": "{{ecs-service-platform-version}}",
                "NetworkConfiguration": {
                    "AwsvpcConfiguration": {
                        "Subnets": [
                            "{{ecs-subnet-1}}",
                            "{{ecs-subnet-n}}"
                        ],
                        "SecurityGroups": [
                            "{{ecs-security-group-1}}",
                            "{{ecs-security-group-n}}"
                        ],
                        "AssignPublicIp": "{{ENABLED | DISABLED}}"
                    }
                },
                "CapacityProviderStrategy": [
                    {
                        "Base": {{integer}},
                        "CapacityProvider": "{{capacityProviderA}}",
                        "Weight": {{integer}}
                    },
                    {
                        "Base": {{integer}},
                        "CapacityProvider": "{{capacityProviderB}}",
                        "Weight": {{integer}}
                    }
                ]
            }
        }
    }
]
```

각 속성은 숫자인 `ContainerPort`을(를) 제외하고 문자열로 지정됩니다.
+ `TaskDefinition` - 필수. 배포할 Amazon ECS 서비스의 작업 정의입니다. 작업 정의의 ARN으로 지정됩니다. ARN 형식은 `arn:aws:ecs:{{aws-region}}:{{account-id}}:task-definition/{{task-definition-family}}:{{task-definition-revision}}`입니다. 자세한 내용은 [Amazon 리소스 이름(ARNs) 및 AWS 서비스 네임스페이스를 참조하세요](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html).
**참고**  
ARN의 `:{{task-definition-revision}}` 부분은 선택 사항입니다. 생략할 경우 Amazon ECS는 작업 정의의 최신 ACTIVE 개정 버전을 사용합니다.
+ `ContainerName` - 필수. Amazon ECS 애플리케이션이 포함된 Amazon ECS 컨테이너의 이름입니다. Amazon ECS 작업 정의에 지정된 컨테이너여야 합니다.
+ `ContainerPort` - 필수. 트래픽이 라우팅되는 컨테이너의 포트입니다.
+ `PlatformVersion`: 선택 사항입니다. 배포된 Amazon ECS 서비스의 Fargate 작업의 플랫폼 버전입니다. 자세한 내용은 [AWS Fargate 플랫폼 버전](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/platform_versions.html)을 참조하세요. 지정하지 않으면 기본적으로 `LATEST`이(가) 사용됩니다.
+  `NetworkConfiguration`: 선택 사항입니다. `AwsvpcConfiguration`에서 다음을 지정할 수 있습니다. 자세한 내용은 *Amazon ECS Container Service API 참조*의 [AwsVpcConfiguration](https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_AwsVpcConfiguration.html)을 참조하세요.
  + `Subnets`: 선택 사항입니다. Amazon ECS 서비스의 쉼표로 구분된 하나 이상의 서브넷 목록.
  + `SecurityGroups`: 선택 사항입니다. Amazon Elastic Container Service의 쉼표로 구분된 하나 이상의 보안 그룹 목록.
  + `AssignPublicIp`: 선택 사항입니다. Amazon ECS 서비스의 탄력적 네트워크 인터페이스가 퍼블릭 IP 주소를 수신하는지 여부를 지정하는 문자열. 유효 값은 `ENABLED` 및 `DISABLED`입니다.
**참고**  
 `NetworkConfiguration` 아래의 설정을 모두 지정하거나 아무 것도 지정하지 않아야 합니다. 예를 들어, `Subnets`를 지정하려는 경우 `SecurityGroups` 및 `AssignPublicIp`도 지정해야 합니다. 아무 것도 지정하지 않는 경우 CodeDeploy는 현재 네트워크 Amazon ECS 설정을 사용합니다.
+ `CapacityProviderStrategy`: 선택 사항입니다. 배포에 사용할 Amazon ECS 용량 공급자 목록입니다. 자세한 내용은 *Amazon Elastic Container Service 개발자 안내서*의 [Amazon ECS 용량 공급자](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/cluster-capacity-providers.html)를 참조하세요. 각 용량 공급자에 대해 다음 설정을 지정할 수 있습니다. 이러한 설정에 대한 자세한 내용은 *AWS CloudFormation 사용 설명서*의 [AWS::ECS::ServiceCapacityProviderStrategyItem](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-service-capacityproviderstrategyitem.html)을 참조하세요.
  + `Base`: 선택 사항입니다. 최소한 기준 값은 지정된 용량 공급자에서 실행할 태스크 수를 지정합니다. 용량 공급자 전략에서 하나의 용량 공급자만 기준을 정의할 수 있습니다. 값을 지정하지 않으면 기본값 0이 사용됩니다.
  + `CapacityProvider`: 선택 사항입니다. 용량 공급자의 짧은 이름입니다. 예: *capacityProviderA*
  + `Weight`: 선택 사항입니다.

    *가중치* 값은 지정된 용량 공급자를 사용해야 하는 시작된 총 작업 수의 상대 백분율을 지정합니다. `base` 값이 정의되어 있다면 이 값이 만족된 다음 `weight` 값을 고려합니다.

    `weight` 값을 지정하지 않으면 `0`의 기본값이 사용됩니다. 용량 공급자 전략 내에서 여러 용량 공급자가 지정된 경우 하나 이상의 용량 공급자가 0보다 큰 가중치 값을 가져야 하며 가중치가 `0`인 모든 용량 공급자는 태스크를 배치하는 데 사용되지 않습니다. 가중치가 모두 `0`인 전략에 여러 용량 공급자를 지정하면 용량 공급자 전략을 사용하는 모든 `RunTask` 또는 `CreateService` 작업이 실패합니다.

     예를 들면 둘 다 `1`의 가중치를 갖는 경우 `base`가 충족되면 작업이 두 용량 공급자에 균등하게 분할되는 두 개의 용량 공급자를 포함하는 전략을 정의하는 가중치를 사용하는 시나리오입니다. 동일한 논리를 사용하여 *capacityProviderA*에 `1`의 가중치를 지정하고 *capacityProviderB*에 `4`의 가중치를 지정하면 *capacityProviderA*를 사용하여 실행되는 모든 태스크에 대해 네 가지 태스크에서 *capacityProviderB*를 사용합니다.