

# Exemplos de definições de tarefa do Amazon ECS
<a name="example_task_definitions"></a>

É 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](create-task-definition.md) e [Parâmetros de definição de tarefa do Amazon ECS para o Fargate](task_definition_parameters.md).

Para obter mais exemplos de definição de tarefa, consulte [Exemplos de definição de tarefa da AWS](https://github.com/aws-samples/aws-containers-task-definitions) no GitHub.

**Topics**
+ [

## Webserver
](#example_task_definition-webserver)
+ [

## Driver de log do `splunk`
](#example_task_definition-splunk)
+ [

## Driver de log do `fluentd`
](#example_task_definition-fluentd)
+ [

## Driver de log do `gelf`
](#example_task_definition-gelf)
+ [

## Workloads em instâncias externas
](#ecs-anywhere-runtask)
+ [

## Perfil do IAM para definição de imagem e tarefa do Amazon ECR
](#example_task_definition-iam)
+ [

## Ponto de entrada com comando
](#example_task_definition-ping)
+ [

## Dependência de contêiner
](#example_task_definition-containerdependency)
+ [

## Volumes nas definições de tarefa
](#volume_sample_task_defs)
+ [

## Definições de tarefa de exemplo do Windows
](#windows_sample_task_defs)

## Webserver
<a name="example_task_definition-webserver"></a>

Veja a seguir um exemplo de definição de tarefa usando os contêineres do Linux no Fargate que configura um servidor 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": "public.ecr.aws/docker/library/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 os contêineres do Windows no Fargate que configura um servidor 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`
<a name="example_task_definition-splunk"></a>

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 obter mais informações, consulte [Transferência de dados confidenciais para um contêiner do Amazon ECS](specifying-sensitive-data.md).

```
"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`
<a name="example_task_definition-fluentd"></a>

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 obter mais informações, consulte [Transferência de dados confidenciais para um contêiner do Amazon ECS](specifying-sensitive-data.md).

```
"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`
<a name="example_task_definition-gelf"></a>

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 obter mais informações, consulte [logConfiguration](task_definition_parameters.md#ContainerDefinition-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
<a name="ecs-anywhere-runtask"></a>

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 obter mais informações, consulte [Criar uma definição de tarefa do Amazon ECS usando o console](create-task-definition.md).

**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
<a name="example_task_definition-iam"></a>

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 obter mais informações, consulte [Perfil do IAM para tarefas do Amazon ECS](task-iam-roles.md).

```
{
    "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
<a name="example_task_definition-ping"></a>

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 `example.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
<a name="example_task_definition-containerdependency"></a>

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 obter mais informações, consulte [Dependência de contêiner](task_definition_parameters.md#container_definition_dependson).

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

## Volumes nas definições de tarefa
<a name="volume_sample_task_defs"></a>

Use as informações a seguir para entender como especificar volumes em tarefas.
+ Para obter informações sobre como configurar um volume do Amazon EBS, consulte [Especificar a configuração de volumes do Amazon EBS na implantação do Amazon ECS](configure-ebs-volume.md).
+ Para obter informações sobre como configurar um volume do Amazon EFS, consulte [Configurar os sistemas de arquivos do Amazon EFS para o Amazon ECS usando o console](tutorial-efs-volumes.md).
+ Para obter informações sobre como configurar um volume do FSx para Windows File Server, consulte [Saiba como configurar sistemas de arquivos do FSx para Windows File Server para o Amazon ECS](tutorial-wfsx-volumes.md).
+ Para obter informações sobre como configurar um volume do Docker, consulte [Exemplos de volume do Docker para o Amazon ECS](docker-volume-examples.md).
+ Para obter mais informações sobre como configurar uma montagem de associação, consulte [Exemplos de montagem de associação para o Amazon ECS](bind-mount-examples.md).

## Definições de tarefa de exemplo do Windows
<a name="windows_sample_task_defs"></a>

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.

**Example 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"
}
```