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

태스크 정의 예제

이 섹션에서는 자체 태스크 정의를 생성할 때 사용할 수 있는 몇 가지 태스크 정의 예제를 제공합니다. 자세한 내용은 태스크 정의 파라미터태스크 정의 생성하기 섹션을 참조하세요.

태스크 정의에 대한 추가 예제는 GitHub의 AWS 샘플 태스크 정의를 참조하세요.

예: Webserver

다음은 웹 서버를 설정하는 Fargate 시작 유형을 사용하는 예제 태스크 정의입니다.

{ "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", "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 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", "google.com" ], "cpu": 16 } ], "family": "example_task_2" }

예: 컨테이너 종속성

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

{ "family": "appmesh-gateway", "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" }