

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

# AppSpec '리소스' 섹션(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*를 사용합니다.