Exemplos de definições de tarefa do Amazon ECS - Amazon Elastic Container Service

Exemplos de definições de tarefa do Amazon ECS

É possível copiar os exemplos e trechos para começar a criar suas próprias definições de tarefa.

É possível copiar os exemplos e, em seguida, colá-los quando usar a opção Configurar via JSON no console. Certifique-se de personalizar os exemplos, como usar o ID da sua conta. É possível incluir os trechos no JSON de definição de tarefa. Para obter mais informações, consulte Criar uma definição de tarefa do Amazon ECS usando o console e Parâmetros de definição de tarefa do Amazon ECS.

Para obter mais exemplos de definição de tarefa, consulte Exemplos de definição de tarefa da AWS no GitHub.

Webserver

Veja a seguir um exemplo de definição de tarefa usando o tipo de inicialização de contêineres de Linux do Fargate que configura um servidor da Web:

{ "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" ] }

Veja a seguir um exemplo de definição de tarefa usando o tipo de inicialização de contêineres de Windows do Fargate que configura um servidor da Web:

{ "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"] }

Driver de log do splunk

O trecho a seguir demonstra como usar o driver de log splunk em uma definição de tarefa que envia os logs para um serviço remoto. O parâmetro de token do Splunk é especificado como uma opção secreta, pois ele pode ser tratado como dados confidenciais. Para ter mais informações, consulte Transferência de dados confidenciais para um contêiner do Amazon ECS.

"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" }],

Driver de log do fluentd

O trecho a seguir demonstra como usar o driver de log fluentd em uma definição de tarefa que envia os logs para um serviço remoto. O valor fluentd-address é especificado como uma opção secreta, pois ele pode ser tratado como dados confidenciais. Para ter mais informações, consulte Transferência de dados confidenciais para um contêiner do Amazon ECS.

"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 }] }],

Driver de log do gelf

O trecho a seguir demonstra como usar o driver de log gelf em uma definição de tarefa que envia os logs para um host remoto executando o Logstash que leva logs Gelf como uma entrada. Para ter mais informações, consulte 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 } ] }],

Workloads em instâncias externas

Ao registrar uma definição de tarefa do Amazon ECS, use o parâmetro requiresCompatibilities e especifique EXTERNAL, que valida se a definição da tarefa é compatível para usar na execução de workloads do Amazon ECS nas instâncias externas. Se você usar o console para registrar uma definição de tarefa, deverá usar o editor JSON. Para ter mais informações, consulte Criar uma definição de tarefa do Amazon ECS usando o console.

Importante

Se as tarefas exigirem uma função do IAM de execução de tarefa, verifique se ela está especificada na definição de tarefa.

Ao implantar a workload, use o tipo de inicialização EXTERNAL quando criar o serviço ou quando executar a tarefa autônoma.

Veja a seguir um exemplo de definição de tarefa.

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" }

Perfil do IAM para definição de imagem e tarefa do Amazon ECR

O trecho a seguir usa uma imagem do Amazon ECR denominada aws-nodejs-sample com a tag v1 do registro 123456789012.dkr.ecr.us-west-2.amazonaws.com. O contêiner dessa tarefa herda permissões do IAM da função arn:aws:iam::123456789012:role/AmazonECSTaskS3BucketRole. Para ter mais informações, consulte Perfil do IAM para tarefas do Amazon ECS.

{ "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" }

Ponto de entrada com comando

O trecho a seguir demonstra a sintaxe de um contêiner do Docker que usa um ponto de entrada e um argumento de comando. Este contêiner executa ping no google.com quatro vezes e, em seguida, sai.

{ "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" }

Dependência de contêiner

Este trecho demonstra a sintaxe para uma definição de tarefa com vários contêineres em que a dependência de contêiner é especificada. Na definição de tarefa a seguir, o contêiner envoy deve alcançar um status íntegro, determinado pelos parâmetros de verificação de integridade de contêiner necessários, antes que o contêiner app seja iniciado. Para ter mais informações, consulte Dependência de contêiner.

{ "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" }

Definições de tarefa de exemplo do Windows

Veja a seguir um exemplo de definição de tarefa para ajudar você nos conceitos básicos dos contêineres do Windows no Amazon ECS.

exemplo Exemplo de aplicação de console do Amazon ECS para Windows

A definição de tarefa a seguir é o exemplo de aplicação de console do Amazon ECS produzida no assistente da primeira execução para o Amazon ECS. Ela foi convertida para usar a imagem de contêiner do 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" }