AWS CloudFormation
사용 설명서 (API 버전 2010-05-15)

AWS::ECS::TaskDefinition

AWS::ECS::TaskDefinition 리소스는 Amazon Elastic Container Service(Amazon ECS) 작업의 컨테이너 및 볼륨 정의를 설명합니다. 사용할 도커 이미지, 필요한 리소스 그리고 Amazon ECS 서비스 또는 작업을 통해 작업 정의 시작과 관련된 기타 구성을 지정할 수 있습니다.

구문

AWS CloudFormation 템플릿에서 이 개체를 선언하려면 다음 구문을 사용합니다.

JSON

{ "Type" : "AWS::ECS::TaskDefinition", "Properties" : { "ContainerDefinitions" : [ ContainerDefinition, ... ], "Cpu" : String, "ExecutionRoleArn" : String, "Family" : String, "Memory" : String, "NetworkMode" : String, "PlacementConstraints" : [ TaskDefinitionPlacementConstraint, ... ], "ProxyConfiguration" : ProxyConfiguration, "RequiresCompatibilities" : [ String, ... ], "Tags" : [ Tag, ... ], "TaskRoleArn" : String, "Volumes" : [ Volume, ... ] } }

Properties

ContainerDefinitions

작업을 구성하는 여러 컨테이너를 설명하는 컨테이너 정의(JSON 형식) 목록입니다. 컨테이너 정의 파라미터와 기본값에 대한 자세한 내용은 Amazon Elastic Container Service 개발자 안내서Amazon ECS 작업 정의를 참조하십시오.

Required: 아니요

Type: ContainerDefinition 목록

Update requires: Replacement

Cpu

작업에서 사용할 cpu 단위의 개수. EC2 시작 유형을 사용할 경우, 이 필드는 선택 사항이며 아무 값이나 사용할 수 있습니다. Fargate 시작 유형을 사용하는 경우 이 필드는 필수 사항이며 다음 값 중 하나를 사용해야 합니다. 이를 통해 memory 파라미터에 유효한 값의 범위가 결정됩니다.

  • 256(.25 vCPU) - 사용 가능한 memory 값: 512(0.5GB), 1024(1GB), 2048(2GB)

  • 512(.5 vCPU) - 사용 가능한 memory 값: 1024(1GB), 2048(2GB), 3072(3GB), 4096(4GB)

  • 1024(1 vCPU) - 사용 가능한 memory 값: 2048(2GB), 3072(3GB), 4096(4GB), 5120(5GB), 6144(6GB), 7168(7GB), 8192(8 GB)

  • 2048(2 vCPU) - 사용 가능한 memory 값: 4096(4GB)-16384(16GB), 증분 간격 1024(1GB)

  • 4096(4 vCPU) - 사용 가능한 memory 값: 8192(8GB)-30720(30GB), 증분 간격 1024(1GB)

Required: 아니요

Type: 문자열

Update requires: Replacement

ExecutionRoleArn

이 작업의 컨테이너가 맡을 수 있는 작업 실행의 Amazon 리소스 이름(ARN). 이 작업의 모든 컨테이너에는 이 역할에 지정된 권한이 부여됩니다.

Required: 아니요

Type: 문자열

Update requires: Replacement

Family

작업 정의가 등록된 패밀리의 이름입니다. 패밀리는 작업 정의의 여러 버전을 그룹화합니다. Amazon ECS에서는 패밀리에 등록한 첫 번째 작업 정의에 개정 번호 1을 부여합니다. Amazon ECS에서는 추가한 각 작업 정의에 개정 번호를 순차적으로 부여합니다.

참고

작업 정의를 업데이트하는 경우 개정 번호를 사용하려면 이 속성을 지정합니다. 값을 지정하지 않으면 작업 정의를 업데이트할 때마다 AWS CloudFormation에서 새 작업 정의를 생성합니다.

Required: 아니요

Type: 문자열

Update requires: Replacement

Memory

작업에서 사용하는 메모리의 양(MiB). EC2 시작 유형을 사용하는 경우 이 필드는 선택 사항이며 어떤 값도 사용 가능합니다. Fargate 시작 유형을 사용하는 경우 이 필드는 필수 사항이며 다음 값 중 하나를 사용해야 합니다. 이를 통해 cpu 파라미터에 유효한 값의 범위가 결정됩니다.

  • 512(0.5GB), 1024(1GB), 2048(2GB) - 사용 가능한 cpu 값: 256(.25 vCPU)

  • 1024(1GB), 2048(2GB), 3072(3GB), 4096(4GB) - 사용 가능한 cpu 값: 512(.5 vCPU)

  • 2048(2GB), 3072(3GB), 4096(4GB), 5120(5GB), 6144(6GB), 7168(7GB), 8192(8GB) - 사용 가능한 cpu 값: 1024(1 vCPU)

  • 4096(4GB)-16384(16GB), 증분 간격 1024(1GB) - 사용 가능한 cpu 값: 2048(2 vCPU)

  • 8192(8GB)-30720(30GB), 증분 간격 1024(1GB) - 사용 가능한 cpu 값: 4096(4 vCPU)

Required: 아니요

Type: 문자열

Update requires: Replacement

NetworkMode

작업의 컨테이너에 사용할 도커 네트워킹 모드. 유효한 값은 none, bridge, awsvpchost입니다. 기본 Docker 네트워크 모드는 bridge입니다. Fargate 시작 유형을 사용하는 경우 awsvpc 네트워크 모드가 필수입니다. EC2 시작 유형을 사용하는 경우 어떤 네트워크 모드도 사용 가능합니다. 네트워크 모드가 none으로 설정될 경우 컨테이너 정의에서 포트 매핑을 지정할 수 없고 작업의 컨테이너가 외부 네트워크와 연결되지 않습니다. hostawsvpc 네트워크 모드는 컨테이너에 최상의 네트워킹 성능을 제공하는데, 이는 bridge 모드가 제공하는 가상화 네트워크 스택 대신에 EC2 네트워크 스택을 사용하기 때문입니다.

hostawsvpc 네트워크 모드에서는 노출된 컨테이너 포트가 해당 호스트 포트(host 네트워크 모드의 경우) 또는 연결된 탄력적 네트워크 인터페이스 포트(awsvpc 네트워크 모드의 경우)에 직접 매핑되므로 동적 호스트 포트 매핑을 활용할 수 없습니다.

네트워크 모드가 awsvpc인 경우 해당 작업에 탄력적 네트워크 인터페이스가 할당되므로 서비스를 생성하거나 작업 정의로 작업을 실행하려면 NetworkConfiguration 값을 지정해야 합니다. 자세한 내용은 Amazon Elastic Container Service 개발자 안내서작업 네트워킹 단원을 참조하십시오.

참고

현재 Amazon ECS 최적화 AMI, 기타 Amazon Linux ecs-init 패키지 버전 또는 AWS Fargate 인프라만 awsvpc 네트워크 모드를 지원합니다.

네트워크 모드가 host인 경우 포트 매핑을 사용할 때 단일 컨테이너 인스턴스에서 동일 작업에 대해 다중 인스턴스화를 실행할 수 없습니다.

Windows용 도커는 Linux용 도커와 다른 네트워크 모드를 사용합니다. 작업 정의를 Windows 컨테이너에 등록할 때는 네트워크 모드를 지정해서는 안 됩니다. 콘솔을 사용하여 Windows 컨테이너에 작업 정의를 등록하려면 <default> 네트워크 모드 객체를 선택해야 합니다.

자세한 내용은 Docker 실행 참조네트워크 설정을 참조하십시오.

Required: 아니요

Type: 문자열

허용된 값: awsvpc | bridge | host | none

Update requires: Replacement

PlacementConstraints

작업에 사용할 배치 제약 객체의 배열입니다. 해당 작업에 Fargate 시작 유형을 사용하는 경우 이 필드가 유효하지 않습니다.

Required: 아니요

Type: TaskDefinitionPlacementConstraint 목록

Update requires: Replacement

ProxyConfiguration

ProxyConfiguration 속성은 App Mesh 프록시에 대한 구성 세부 정보를 지정합니다.

프록시 구성을 사용하려면 Amazon ECS 컨테이너 인스턴스에 컨테이너 에이전트 버전 1.26.0 이상과 ecs-init 패키지의 버전 1.26.0-1 이상이 필요합니다. 컨테이너 인스턴스가 Amazon ECS 최적화 AMI 버전 20190301 이상에서 시작된 경우 필요한 버전의 컨테이너 에이전트 및 ecs-init가 포함되어 있습니다. 자세한 내용은 Amazon Elastic Container Service 개발자 안내서Amazon ECS 최적화 Linux AMI 단원을 참조하십시오.

Required: 아니요

Type: ProxyConfiguration

Update requires: Replacement

RequiresCompatibilities

작업에서 필요한 시작 유형. 값을 지정하지 않은 경우 기본값은 EC2입니다. 유효한 값에는 EC2FARGATE이 있습니다.

Required: 아니요

Type: String 목록

Update requires: Replacement

Tags

작업 정의를 분류하고 구성하는 데 도움이 되도록 작업 정의에 적용하는 메타데이터입니다. 각 태그는 사용자가 정의하는 키와 선택적 값으로 구성됩니다.

태그에 적용되는 기본 제한은 다음과 같습니다.

  • 리소스 당 최대 태그 수 - 50개

  • 각 리소스에 대해 각 태그 키는 고유하며 하나의 값만 가질 수 있습니다.

  • 최대 키 길이 - UTF-8의 유니코드 문자 128자

  • 최대 값 길이 - UTF-8의 유니코드 문자 256자

  • 태깅 스키마를 여러 서비스와 리소스에서 사용하는 경우 다른 서비스 또한 허용되는 문자에 대한 제한이 있을 수 있음을 유의하십시오. 일반적으로 허용되는 문자는 UTF-8로 표현할 수 있는 문자, 숫자 및 공백과 특수 문자 + - = . _ : / @.

  • 태그 키와 값은 대/소문자를 구분합니다.

  • AWS 사용을 위해 예약된 키 또는 값에는 aws:, AWS: 또는 이러한 접두사의 어떤 대문자 또는 소문자 조합도 사용하지 마십시오. 이 접두사가 지정된 태그 키나 값은 편집하거나 삭제할 수 없습니다. 이 접두사가 지정된 태그는 리소스당 태그 수 제한에 포함되지 않습니다.

Required: 아니요

Type: Tag 목록

Maximum: 50

Update requires: No interruption

TaskRoleArn

사용자 대신 AWS API를 호출하는 작업 권한을 컨테이너에 부여하는 AWS Identity and Access Management(IAM) 역할의 짧은 이름 또는 전체 Amazon 리소스 이름(ARN)입니다. 자세한 내용은 Amazon Elastic Container Service 개발자 안내서Amazon ECS 작업 역할 단원을 참조하십시오.

Windows에서 작업을 위한 IAM 역할을 사용하려면 Amazon ECS 최적화 Windows AMI를 시작할 때 -EnableTaskIAMRole 옵션을 설정해야 합니다. 이 기능을 활용하려면 컨테이너가 일부 구성 코드도 실행해야 합니다. 자세한 내용은 Amazon Elastic Container Service 개발자 안내서에서 작업에 대한 Windows IAM 역할 단원을 참조하십시오.

Required: 아니요

Type: 문자열

Update requires: Replacement

Volumes

작업에 대한 볼륨 정의의 목록입니다.

작업에서 Fargate 시작 유형을 사용하는 경우 hostsourcePath 파라미터는 지원되지 않습니다.

볼륨 정의 파라미터와 기본값에 대한 자세한 내용은 Amazon Elastic Container Service 개발자 안내서Amazon ECS 작업 정의를 참조하십시오.

Required: 아니요

Type: 볼륨 목록

Update requires: Replacement

반환 값

Ref

이 리소스의 논리적 ID를 내장 Ref 함수에 전달하면 Ref가 반환됩니다. - Amazon 리소스 이름(ARN)

다음 예에서 Ref 함수는 MyTaskDefinition 작업 정의의 ARN(예: arn:aws:ecs:us-west-2:123456789012:task-definition/TaskDefinitionFamily:1)을 반환합니다.

{ "Ref": "MyTaskDefinition" }

For more information about using the Ref function, see Ref.

예제

Amazon ECS 작업 정의 생성

다음 예에서는 컨테이너 정의 2개와 볼륨 정의 1개가 포함된 Amazon ECS 작업 정의를 정의합니다.

JSON

"taskdefinition": { "Type": "AWS::ECS::TaskDefinition", "Properties" : { "ContainerDefinitions" : [ { "Name": {"Ref": "AppName"}, "MountPoints": [ { "SourceVolume": "my-vol", "ContainerPath": "/var/www/my-vol" } ], "Image":"amazon/amazon-ecs-sample", "Cpu": "10", "PortMappings":[ { "ContainerPort": {"Ref":"AppContainerPort"}, "HostPort": {"Ref":"AppHostPort"} } ], "EntryPoint": [ "/usr/sbin/apache2", "-D", "FOREGROUND" ], "Memory":"500", "Essential": "true" }, { "Name": "busybox", "Image": "busybox", "Cpu": "10", "EntryPoint": [ "sh", "-c" ], "Memory": "500", "Command": [ "/bin/sh -c \"while true; do /bin/date > /var/www/my-vol/date; sleep 1; done\"" ], "Essential" : "false", "VolumesFrom": [ { "SourceContainer": {"Ref":"AppName"} } ] }], "Volumes": [ { "Host": { "SourcePath": "/var/lib/docker/vfs/dir/" }, "Name": "my-vol" }] } }

YAML

taskdefinition: Type: AWS::ECS::TaskDefinition Properties: ContainerDefinitions: - Name: Ref: "AppName" MountPoints: - SourceVolume: "my-vol" ContainerPath: "/var/www/my-vol" Image: "amazon/amazon-ecs-sample" Cpu: "10" PortMappings: - ContainerPort: Ref: "AppContainerPort" HostPort: Ref: "AppHostPort" EntryPoint: - "/usr/sbin/apache2" - "-D" - "FOREGROUND" Memory: "500" Essential: "true" - Name: "busybox" Image: "busybox" Cpu: "10" EntryPoint: - "sh" - "-c" Memory: "500" Command: - "/bin/sh -c \"while true; do /bin/date > /var/www/my-vol/date; sleep 1; done\"" Essential: "false" VolumesFrom: - SourceContainer: Ref: "AppName" Volumes: - Host: SourcePath: "/var/lib/docker/vfs/dir/" Name: "my-vol"

Amazon ECS 작업 정의 생성

다음 예에서는 필수 호환성으로 EC2 및 FARGATE를 지정하는 Amazon ECS 작업 정의를 정의합니다.

JSON

{ "AWSTemplateFormatVersion": "2010-09-09", "Resources": { "taskdefinition": { "Type": "AWS::ECS::TaskDefinition", "Properties": { "RequiresCompatibilities": [ "EC2", "FARGATE" ], "ContainerDefinitions": [ { "Name": "my-app", "MountPoints": [ { "SourceVolume": "my-vol", "ContainerPath": "/var/www/my-vol" } ], "Image": "amazon/amazon-ecs-sample", "Cpu": "10", "EntryPoint": [ "/usr/sbin/apache2", "-D", "FOREGROUND" ], "Memory": "500", "Essential": "true" }, { "Name": "busybox", "Image": "busybox", "Cpu": "10", "EntryPoint": [ "sh", "-c" ], "Memory": "500", "Command": [ "/bin/sh -c \"while true; do /bin/date > /var/www/my-vol/date; sleep 1; done\"" ], "Essential": "false", "VolumesFrom": [ { "SourceContainer": "my-app" } ] } ], "Volumes": [ { "Host": { "SourcePath": "/var/lib/docker/vfs/dir/" }, "Name": "my-vol" } ] } } } }

YAML

AWSTemplateFormatVersion: 2010-09-09 Resources: taskdefinition: Type: AWS::ECS::TaskDefinition Properties: RequiresCompatibilities: - "EC2" - "FARGATE" ContainerDefinitions: - Name: "my-app" MountPoints: - SourceVolume: "my-vol" ContainerPath: "/var/www/my-vol" Image: "amazon/amazon-ecs-sample" Cpu: "10" EntryPoint: - "/usr/sbin/apache2" - "-D" - "FOREGROUND" Memory: "500" Essential: "true" - Name: "busybox" Image: "busybox" Cpu: "10" EntryPoint: - "sh" - "-c" Memory: "500" Command: - "/bin/sh -c \"while true; do /bin/date > /var/www/my-vol/date; sleep 1; done\"" Essential: "false" VolumesFrom: - SourceContainer: "my-app" Volumes: - Host: SourcePath: "/var/lib/docker/vfs/dir/" Name: "my-vol"

이 페이지에서: