태스크 정의 예제 - Amazon Elastic Container Service

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

태스크 정의 예제

예제와 스니펫을 복사하여 자신만의 작업 정의를 만들 수 있습니다.

예제를 복사한 다음 클래식 콘솔에서 JSON을 통한 구성 옵션을 사용할 때 붙여넣을 수 있습니다. 계정 ID 사용과 같은 예제를 사용자 지정해야 합니다. 이 코드 조각을 작업 정의 JSON에 포함할 수 있습니다. 자세한 내용은 콘솔을 사용하여 작업 정의 생성태스크 정의 파라미터 섹션을 참조하세요.

더 많은 작업 정의 예제는 의 AWS 샘플 작업 정의를 참조하십시오. GitHub

웹 서버

다음은 웹 서버를 설정하는 Fargate 시작 유형에서 Linux 컨테이너를 사용하는 태스크 정의의 예입니다.

{ "containerDefinitions": [ { "command": [ "/bin/sh -c \"echo '<html> <head> <title>Amazon ECS Sample App</title> <style>body {margin-top: 40px; background-color: #333;} </style> </head><body> <div style=color:white;text-align:center> <h1>Amazon ECS Sample App</h1> <h2>Congratulations!</h2> <p>Your application is now running on a container in Amazon ECS.</p> </div></body></html>' > /usr/local/apache2/htdocs/index.html && httpd-foreground\"" ], "entryPoint": [ "sh", "-c" ], "essential": true, "image": "httpd:2.4", "logConfiguration": { "logDriver": "awslogs", "options": { "awslogs-group" : "/ecs/fargate-task-definition", "awslogs-region": "us-east-1", "awslogs-stream-prefix": "ecs" } }, "name": "sample-fargate-app", "portMappings": [ { "containerPort": 80, "hostPort": 80, "protocol": "tcp" } ] } ], "cpu": "256", "executionRoleArn": "arn:aws:iam::012345678910:role/ecsTaskExecutionRole", "family": "fargate-task-definition", "memory": "512", "networkMode": "awsvpc", "runtimePlatform": { "operatingSystemFamily": "LINUX" }, "requiresCompatibilities": [ "FARGATE" ] }

다음은 웹 서버를 설정하는 Fargate 시작 유형에서 Windows 컨테이너를 사용하는 태스크 정의의 예입니다.

{ "containerDefinitions": [ { "command": ["New-Item -Path C:\\inetpub\\wwwroot\\index.html -Type file -Value '<html> <head> <title>Amazon ECS Sample App</title> <style>body {margin-top: 40px; background-color: #333;} </style> </head><body> <div style=color:white;text-align:center> <h1>Amazon ECS Sample App</h1> <h2>Congratulations!</h2> <p>Your application is now running on a container in Amazon ECS.</p>'; C:\\ServiceMonitor.exe w3svc"], "entryPoint": [ "powershell", "-Command" ], "essential": true, "cpu": 2048, "memory": 4096, "image": "mcr.microsoft.com/windows/servercore/iis:windowsservercore-ltsc2019", "name": "sample_windows_app", "portMappings": [ { "hostPort": 80, "containerPort": 80, "protocol": "tcp" } ] } ], "memory": "4096", "cpu": "2048", "networkMode": "awsvpc", "family": "windows-simple-iis-2019-core", "executionRoleArn": "arn:aws:iam::012345678910:role/ecsTaskExecutionRole", "runtimePlatform": {"operatingSystemFamily": "WINDOWS_SERVER_2019_CORE"}, "requiresCompatibilities": ["FARGATE"] }

splunk로그 드라이버

다음 코드 조각에서는 로그를 원격 서비스로 보내는 작업 정의에서 splunk 로그 드라이버를 사용하는 방법을 보여줍니다. Splunk 토큰 파라미터는 민감한 데이터로 취급될 수 있으므로 암호 옵션으로 지정됩니다. 자세한 설명은 민감한 데이터를 컨테이너에 전달 섹션을 참조하세요.

"containerDefinitions": [{ "logConfiguration": { "logDriver": "splunk", "options": { "splunk-url": "https://cloud.splunk.com:8080", "tag": "tag_name", }, "secretOptions": [{ "name": "splunk-token", "valueFrom": "arn:aws:secretsmanager:region:aws_account_id:secret:splunk-token-KnrBkD" }],

fluentd로그 드라이버

다음 코드 조각에서는 로그를 원격 서비스로 보내는 작업 정의에서 fluentd 로그 드라이버를 사용하는 방법을 보여줍니다. fluentd-address 값은 민감한 데이터로 취급될 수 있으므로 암호 옵션으로 지정됩니다. 자세한 설명은 민감한 데이터를 컨테이너에 전달 섹션을 참조하세요.

"containerDefinitions": [{ "logConfiguration": { "logDriver": "fluentd", "options": { "tag": "fluentd demo" }, "secretOptions": [{ "name": "fluentd-address", "valueFrom": "arn:aws:secretsmanager:region:aws_account_id:secret:fluentd-address-KnrBkD" }] }, "entryPoint": [], "portMappings": [{ "hostPort": 80, "protocol": "tcp", "containerPort": 80 }, { "hostPort": 24224, "protocol": "tcp", "containerPort": 24224 }] }],

gelf로그 드라이버

다음 코드 조각에서는 Gelf 로그를 입력으로 사용해 Logstash를 실행 중인 원격 호스트로 로그를 보내는 작업 정의에서 gelf 로그 드라이버를 사용하는 방법을 보여줍니다. 자세한 설명은 logConfiguration 섹션을 참조하세요.

"containerDefinitions": [{ "logConfiguration": { "logDriver": "gelf", "options": { "gelf-address": "udp://logstash-service-address:5000", "tag": "gelf task demo" } }, "entryPoint": [], "portMappings": [{ "hostPort": 5000, "protocol": "udp", "containerPort": 5000 }, { "hostPort": 5000, "protocol": "tcp", "containerPort": 5000 } ] }],

외부 인스턴스의 워크로드

Amazon ECS 태스크 정의를 등록할 때는 requiresCompatibilities 파라미터를 사용하고 태스크 정의가 호환되는지 확인하는 EXTERNAL을 지정하여 외부 인스턴스에서 Amazon ECS 워크로드를 실행할 때 사용합니다. 콘솔을 사용하여 작업 정의를 등록하는 경우 JSON 편집기를 사용해야 합니다. 자세한 설명은 콘솔을 사용하여 작업 정의 생성 섹션을 참조하세요.

중요

태스크에 태스크 실행 IAM 역할이 필요한 경우 해당 역할이 태스크 정의에 지정되어 있는지 확인합니다.

워크로드를 배포할 때 서비스를 생성하거나 독립 실행형 태스크를 실행하는 경우 EXTERNAL 시작 유형을 사용합니다.

다음은 예제 태스크 정의입니다.

Linux
{ "requiresCompatibilities": [ "EXTERNAL" ], "containerDefinitions": [{ "name": "nginx", "image": "public.ecr.aws/nginx/nginx:latest", "memory": 256, "cpu": 256, "essential": true, "portMappings": [{ "containerPort": 80, "hostPort": 8080, "protocol": "tcp" }] }], "networkMode": "bridge", "family": "nginx" }
Windows
{ "requiresCompatibilities": [ "EXTERNAL" ], "containerDefinitions": [{ "name": "windows-container", "image": "mcr.microsoft.com/windows/servercore/iis:windowsservercore-ltsc2019", "memory": 256, "cpu": 512, "essential": true, "portMappings": [{ "containerPort": 80, "hostPort": 8080, "protocol": "tcp" }] }], "networkMode": "bridge", "family": "windows-container" }

Amazon ECR 이미지 및 작업 정의 IAM 역할

다음 코드 조각에서는 123456789012.dkr.ecr.us-west-2.amazonaws.com 레지스트리의 v1 태그를 포함하는 aws-nodejs-sample이라는 Amazon ECR 이미지를 사용합니다. 이 태스크의 컨테이너는 IAM 역할로부터 arn:aws:iam::123456789012:role/AmazonECSTaskS3BucketRole 권한을 상속합니다. 자세한 설명은 태스크 IAM 역할 섹션을 참조하세요.

{ "containerDefinitions": [ { "name": "sample-app", "image": "123456789012.dkr.ecr.us-west-2.amazonaws.com/aws-nodejs-sample:v1", "memory": 200, "cpu": 10, "essential": true } ], "family": "example_task_3", "taskRoleArn": "arn:aws:iam::123456789012:role/AmazonECSTaskS3BucketRole" }

명령이 있는 진입점

다음 코드 조각에서는 진입점과 명령 인수를 사용하는 Docker 컨테이너용 구문을 보여줍니다. 이 컨테이너는 google.com을 네 번 ping한 후 종료합니다.

{ "containerDefinitions": [ { "memory": 32, "essential": true, "entryPoint": ["ping"], "name": "alpine_ping", "readonlyRootFilesystem": true, "image": "alpine:3.4", "command": [ "-c", "4", "example.com" ], "cpu": 16 } ], "family": "example_task_2" }

컨테이너 종속성

이 코드 조각에서는 컨테이너 종속성이 지정된 여러 컨테이너가 있는 작업 정의의 구문을 보여줍니다. 다음 태스크 정의에서 envoy 컨테이너를 시작하기 전에 app 컨테이너가 필요한 컨테이너 상태 확인 파라미터에 의해 정상 상태에 도달해야 합니다. 자세한 정보는 컨테이너 종속성을 참조하세요.

{ "family": "appmesh-gateway", "runtimePlatform": { "operatingSystemFamily": "LINUX" }, "proxyConfiguration":{ "type": "APPMESH", "containerName": "envoy", "properties": [ { "name": "IgnoredUID", "value": "1337" }, { "name": "ProxyIngressPort", "value": "15000" }, { "name": "ProxyEgressPort", "value": "15001" }, { "name": "AppPorts", "value": "9080" }, { "name": "EgressIgnoredIPs", "value": "169.254.170.2,169.254.169.254" } ] }, "containerDefinitions": [ { "name": "app", "image": "application_image", "portMappings": [ { "containerPort": 9080, "hostPort": 9080, "protocol": "tcp" } ], "essential": true, "dependsOn": [ { "containerName": "envoy", "condition": "HEALTHY" } ] }, { "name": "envoy", "image": "840364872350.dkr.ecr.region-code.amazonaws.com/aws-appmesh-envoy:v1.15.1.0-prod", "essential": true, "environment": [ { "name": "APPMESH_VIRTUAL_NODE_NAME", "value": "mesh/meshName/virtualNode/virtualNodeName" }, { "name": "ENVOY_LOG_LEVEL", "value": "info" } ], "healthCheck": { "command": [ "CMD-SHELL", "echo hello" ], "interval": 5, "timeout": 2, "retries": 3 } } ], "executionRoleArn": "arn:aws:iam::123456789012:role/ecsTaskExecutionRole", "networkMode": "awsvpc" }

Windows 샘플 태스크 정의

Amazon ECS에서 Windows 컨테이너를 시작하는 데 도움을 줄 샘플 태스크 정의는 아래와 같습니다.

예 Windows용 Amazon ECS 콘솔 샘플 애플리케이션

다음 태스크 정의는 Amazon ECS 처음 실행 마법사에서 생성되는 Amazon ECS 콘솔 샘플 애플리케이션으로서 microsoft/iis Windows 컨테이너 이미지를 사용하도록 이식되었습니다.

{ "family": "windows-simple-iis", "containerDefinitions": [ { "name": "windows_sample_app", "image": "mcr.microsoft.com/windows/servercore/iis", "cpu": 1024, "entryPoint":["powershell", "-Command"], "command":["New-Item -Path C:\\inetpub\\wwwroot\\index.html -Type file -Value '<html> <head> <title>Amazon ECS Sample App</title> <style>body {margin-top: 40px; background-color: #333;} </style> </head><body> <div style=color:white;text-align:center> <h1>Amazon ECS Sample App</h1> <h2>Congratulations!</h2> <p>Your application is now running on a container in Amazon ECS.</p>'; C:\\ServiceMonitor.exe w3svc"], "portMappings": [ { "protocol": "tcp", "containerPort": 80 } ], "memory": 1024, "essential": true } ], "networkMode": "awsvpc", "memory": "1024", "cpu": "1024" }