Configurar o Amazon ECS para atuar como receptor de eventos do CloudWatch Events
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
Caso você não tenha um cluster em execução para capturar eventos, siga as etapas em Criação de um cluster do Amazon ECS para o tipo de inicialização do Fargate 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
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.
Abra o console do AWS Lambda em https://console.aws.amazon.com/lambda/
. -
Escolha Create function.
-
Na tela Author from scratch, faça o seguinte:
-
Em Name (Nome), insira um valor.
-
Para Runtime, escolha sua versão do Python, por exemplo, Python 3.9.
-
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).
-
-
Escolha a opção Criar função.
-
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.
-
Escolha Salvar.
Etapa 2: registrar uma regra de evento
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 AWS Management Console 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 e Padrões de eventos do Amazon EventBridge no Guia do usuário do Amazon EventBridge.
Para encaminhar eventos para a função Lambda
Abra o console do CloudWatch em https://console.aws.amazon.com/cloudwatch/
. -
No painel de navegação, escolha Events (Eventos), Rules (Regras), Create rule (Criar regra).
-
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.
-
Em Targets (Destinos), escolha Add target (Adicionar destino), em Target type (Tipo de destino), escolha Lambda function (Função Lambda) e, em seguida, selecione a função Lambda.
-
Escolha Configure details (Configurar detalhes).
-
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
Crie uma definição de tarefa.
Abra o console em https://console.aws.amazon.com/ecs/v2
. -
No painel de navegação, selecione Definições de tarefas.
-
Escolha Create new Task Definition (Criar nova definição de tarefa), Create new revision with JSON (Criar nova revisão com JSON).
-
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" ] } -
Escolha Criar.
Etapa 4: testar a regra
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
Abra o console em https://console.aws.amazon.com/ecs/v2
. -
Escolha Task definitions (Definições de tarefa).
-
Escolha console-sample-app-static e, em seguida, escolha Deploy (Implantar), Run new task (Executar nova tarefa).
-
Em Cluster, escolha default (padrão) e, em seguida, escolha Deploy (Implantar).
Abra o console do CloudWatch em https://console.aws.amazon.com/cloudwatch/
. -
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
). -
Selecione um fluxo de log para visualizar os dados do evento.