No universo de soluções serverless da AWS, uma das combinações mais utilizadas é a integração entre o Amazon S3 e o AWS Lambda para processamento de notificações de eventos. Neste tutorial, você vai aprender como configurar um Cloud Formation template e criar uma infraestrutura para processar notificações JSON armazenadas em um bucket S3. O sistema consiste em uma função Lambda que é acionada quando arquivos são criados no bucket S3, processa o conteúdo JSON e envia para um endpoint web service configurado.
Recursos AWS Criados
- Função Lambda: Processa as notificações JSON
- IAM Role: Permissões necessárias para a função Lambda
- Lambda Permission: Permite que o S3 invoque a função Lambda
Pré-requisitos
- AWS CLI instalado e configurado
- Nome do Bucket S3 onde as notificações estão sendo enviadas
- Permissões necessárias para criar recursos via CloudFormation
Implementando a solução #
Obtenção do template #
Baixe o arquivo de template por meio da seguinte URL:
https://notification-processor-cloudformation-template.s3.us-east-1.amazonaws.com/stack.yaml
Personalização do Template #
Antes do deploy, é necessário ajustar o arquivo stack.yaml para que o processamento esteja compatível com o formato do seu payload JSON. A forma mais simples de modificar o payload é por meio da função preparePayload(notificationData). Nessa função, você pode analisar o objeto recebido e estruturá-lo conforme suas necessidades antes de enviá-lo ao endpoint.
Exemplo: #
// Javascript
function preparePayload(notificationData) {
// Exemplo: Adicionar campo adicional
return {
…
notificationData,
environment: "production",
processedAt: new Date().toISOString()
};
}
Por padrão, o JSON completo obtido do bucket é enviado como payload para o endpoint especificado. O código padrão não realiza autenticação, mas você pode adaptá-lo para incluir esse
processo, se necessário.
Deploy do CloudFormation #
Referência: https://awscli.amazonaws.com/v2/documentation/api/latest/reference/cloudformation/deploy.html
aws cloudformation deploy\
--stack - name notification - processor\
--template - file stack.yaml\
--parameter - overrides\
S3BucketName = \
WebServiceEndpoint = \
--capabilities CAPABILITY_IAM
Configuração do S3 Event Notification #
Após o deploy do CloudFormation, é necessário configurar o Bucket S3 para acionar a função Lambda:
Obter o ARN da função Lambda #
LAMBDA_ARN = $(aws cloudformation describe - stacks\
--stack - name notification - processor\
--query 'Stacks[0].Outputs[?OutputKey==LambdaFunctionARN].OutputValue'\
--output text)
Configurar a notificação do bucket S3 #
aws s3api put - bucket - notification - configuration\
--bucket\
--notification - configuration '{
"LambdaFunctionConfigurations": [{
"LambdaFunctionArn": "'$LAMBDA_ARN'",
"Events": ["s3:ObjectCreated:*"],
"Filter": {
"Key": {
"FilterRules": [{
"Name": "suffix",
"Value": ".json"
}]
}
}
}]
}'