

# Configurar o Amazon ECS para atuar como receptor de eventos do CloudWatch Events
<a name="ecs_cwet"></a>

Saiba como configurar uma função do Lambda simples que atua como receptor de eventos de tarefa e os grava em um fluxo de logs do CloudWatch Logs.

## Pré-requisito: configurar um cluster de teste
<a name="cwet_step_1"></a>

Caso você não tenha um cluster em execução para capturar eventos, siga as etapas em [Criar um cluster do Amazon ECS para workloads do Fargate](create-cluster-console-v2.md) para criar um. Ao final deste tutorial, você executará uma tarefa nesse cluster para testar se configurou a função Lambda corretamente. 

## Etapa 1: criar a função do Lambda
<a name="cwet_step_2"></a>

Neste procedimento, você criará uma função simples do Lambda para funcionar como um destino para mensagens da sequência de eventos do Amazon ECS. 

1. Abra o console do AWS Lambda em [https://console.aws.amazon.com/lambda/](https://console.aws.amazon.com/lambda/).

1. Escolha **Create function**. 

1. Na tela **Author from scratch**, faça o seguinte:

   1. Em **Name (Nome)**, insira um valor. 

   1. Para **Runtime**, escolha sua versão do Python, por exemplo, **Python 3.9**.

   1. Em **Role (Função)**, escolha **Create a new role with basic Lambda permissions (Criar uma nova função com permissões básicas do Lambda)**.

1. Escolha a opção **Criar função**.

1. Na seção **Function code**, edite o código de exemplo de acordo com o exemplo a seguir.

   ```
   import json
   
   def lambda_handler(event, context):
       if event["source"] != "aws.ecs":
          raise ValueError("Function only supports input from events with a source type of: aws.ecs")
          
       print('Here is the event:')
       print(json.dumps(event))
   ```

   Essa é uma função simples do Python 3.9 que imprime o evento enviado pelo Amazon ECS. Se tudo estiver configurado corretamente, no final deste tutorial, você verá que os detalhes do evento aparecerão no fluxo de log do CloudWatch Logs associado a essa função Lambda.

1. Escolha **Salvar**.

## Etapa 2: registrar uma regra de evento
<a name="cwet_step_3"></a>

 Em seguida, você cria uma regra de evento do CloudWatch Events que captura eventos de tarefa vindos dos clusters do Amazon ECS. Essa regra captura todos os eventos vindos de todos os clusters dentro da conta em que ela está definida. As próprias mensagens de tarefa contêm informações sobre a origem do evento, inclusive o cluster no qual reside, que você pode usar para filtrar e classificar eventos programaticamente. 

**nota**  
Quando você usa o Console de gerenciamento da AWS para criar uma regra de evento, o console adiciona automaticamente as permissões do IAM necessárias para conceder ao CloudWatch Events permissão para chamar a função Lambda. Caso esteja criando uma regra de evento usando a AWS CLI, você precisa conceder essa permissão explicitamente. Para obter mais informações, consulte [Eventos no Amazon EventBridge](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-events.html) e [Padrões de eventos do Amazon EventBridge](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-event-patterns.html) no *Guia do usuário do Amazon EventBridge*.

**Para encaminhar eventos para a função Lambda**

1. Abra o console do CloudWatch, em [https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/).

1. No painel de navegação, escolha **Events (Eventos)**, **Rules (Regras)**, **Create rule (Criar regra)**.

1. Em **Event Source**, escolha **ECS** como origem do evento. Por padrão, a regra se aplica a todos os eventos do Amazon ECS para todos os grupos do Amazon ECS. Como alternativa, você pode selecionar eventos específicos ou um grupo específico do Amazon ECS.

1. Em **Destinos**, escolha **Adicionar destino**, para **Tipo de destino**, escolha **Função do Lambda** e, em seguida, selecione sua função do Lambda.

1. Escolha **Configure details (Configurar detalhes)**.

1. Em **Rule definition**, digite um nome e uma descrição para a regra e escolha **Create rule**.

## Etapa 3: criar uma definição de tarefa
<a name="cwet_step_task-def"></a>

Crie uma definição de tarefa.

1. Abra o console em [https://console.aws.amazon.com/ecs/v2](https://console.aws.amazon.com/ecs/v2).

1. No painel de navegação, selecione **Definições de tarefas**.

1. Escolha **Create new Task Definition** (Criar nova definição de tarefa), **Create new revision with JSON** (Criar nova revisão com JSON).

1. Copie e cole o exemplo de definição de tarefa a seguir na caixa e escolha **Save (Salvar)**.

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

1. Escolha **Criar**.

## Etapa 4: testar a regra
<a name="cwet_step_4"></a>

 Por fim, você cria uma regra de evento do CloudWatch Events que captura eventos de tarefa vindos dos clusters do Amazon ECS. Essa regra captura todos os eventos vindos de todos os clusters dentro da conta em que ela está definida. As próprias mensagens de tarefa contêm informações sobre a origem do evento, inclusive o cluster no qual reside, que você pode usar para filtrar e classificar eventos programaticamente. 

**Como testar sua regra**

1. Abra o console em [https://console.aws.amazon.com/ecs/v2](https://console.aws.amazon.com/ecs/v2).

1. Escolha **Task definitions** (Definições de tarefa).

1. Escolha **console-sample-app-static** e, em seguida, escolha **Deploy** (Implantar), **Run new task** (Executar nova tarefa).

1. Em **Cluster**, escolha default (padrão) e, em seguida, escolha **Deploy** (Implantar).

1. Abra o console CloudWatch em [https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/).

1. No painel de navegação, escolha **Logs** e selecione o grupo de logs para sua função do Lambda (por exemplo, **/aws/lambda/***my-function*).

1. Selecione um fluxo de log para visualizar os dados do evento. 