Neste tutorial, você usará o console para criar uma função do Lambda e configurar um acionador para um bucket do Amazon Simple Storage Service (Amazon S3). Toda vez que você adiciona um objeto ao bucket do Amazon S3, sua função é executada e envia o tipo de objeto ao Amazon CloudWatch Logs.

Este tutorial demonstra como:
-
Crie um bucket do Amazon S3.
-
Crie uma função do Lambda que retorne o tipo de objeto de um bucket do Amazon S3.
-
Configure um acionador do Lambda que invoque a função quando forem carregados objetos para o bucket.
-
Teste sua função, primeiro com um evento fictício e depois usando o acionador.
Ao concluir essas etapas, você aprenderá a configurar uma função do Lambda a ser executada sempre que forem adicionados ou excluídos objetos de um bucket do Amazon S3. Você pode concluir este tutorial usando somente o AWS Management Console.
Criar um bucket do Amazon S3

Como criar um bucket do Amazon S3
-
Abra o console do Amazon S3
e selecione a página Buckets de uso geral. -
Selecione a Região da AWS mais próxima de sua localização geográfica. É possível alterar a região usando a lista suspensa na parte superior da tela. Mais adiante no tutorial, você deverá criar sua função do Lambda na mesma região.
-
Escolha Criar bucket.
-
Em General configuration (Configuração geral), faça o seguinte:
-
Em Tipo de bucket, certifique-se de que Uso geral esteja selecionado.
-
Em Nome do bucket, insira um nome global exclusivo que atenda às regras de nomenclatura de buckets do Amazon S3. Os nomes dos buckets podem conter apenas letras minúsculas, números, pontos (.) e hifens (-).
-
-
Deixe todas as outras opções com seus valores padrão e escolha Criar bucket.
Carregar um objeto de teste em um bucket

Para carregar um objeto de teste
-
Abra a página Buckets
do console do Amazon S3 e escolha o bucket que você criou durante a etapa anterior. -
Escolha Carregar.
-
Escolha Adicionar arquivos e selecione o objeto que deseja de carregar. Você pode selecionar qualquer arquivo (por exemplo,
HappyFace.jpg
). -
Selecione Abrir e Carregar.
Posteriormente no tutorial, você testará a função do Lambda usando esse objeto.
Criação de uma política de permissões

Crie uma política de permissões que permita ao Lambda obter objetos de um bucket do Amazon S3 e gravar no Amazon CloudWatch Logs.
Para criar a política
-
Abra a página Policies
(Políticas) do console do IAM. -
Escolha Criar política.
-
Escolha a guia JSON e cole a política personalizada a seguir no editor JSON.
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "logs:PutLogEvents", "logs:CreateLogGroup", "logs:CreateLogStream" ], "Resource": "arn:aws:logs:*:*:*" }, { "Effect": "Allow", "Action": [ "s3:GetObject" ], "Resource": "arn:aws:s3:::*/*" } ] }
-
Escolha Próximo: etiquetas.
-
Selecione Próximo: revisar.
-
No campo Política de revisão, em Nome da política, insira
s3-trigger-tutorial
. -
Escolha Criar política.
Criar uma função de execução

Um perfil de execução é um perfil do AWS Identity and Access Management (IAM) que concede a uma função do Lambda permissão para acessar recursos e Serviços da AWS. Nesta etapa, crie um perfil de execução usando a política de permissões que criou na etapa anterior.
Para criar uma função de execução e vincular a política de permissões personalizada
-
Abra a página Funções
no console do IAM. -
Selecione Criar perfil.
-
Para o tipo de entidade confiável, escolha Serviço da AWS e, em seguida, para o caso de uso, selecione Lambda.
-
Escolha Próximo.
-
Na caixa de pesquisa de política, insira
s3-trigger-tutorial
. -
Nos resultados da pesquisa, selecione a política que você criou (
s3-trigger-tutorial
) e, depois, escolha Next (Avançar). -
Em Role details (Detalhes do perfil), para Role name (Nome do perfil), insira
lambda-s3-trigger-role
e, em seguida, escolha Create role (Criar perfil).
Criar a função do Lambda

Crie uma função do Lambda no console usando o runtime do Python 3.12.
Para criar a função do Lambda
-
Abra a página Funções
do console do Lambda. -
Verifique se você está trabalhando na mesma Região da AWS em que criou o bucket do Amazon S3. Você pode alterar sua região usando a lista suspensa na parte superior da tela.
-
Escolha a opção Criar função.
-
Escolher Criar do zero
-
Em Basic information (Informações básicas), faça o seguinte:
-
Em Nome da função, inserir
s3-trigger-tutorial
-
Em Runtime, selecione Python 3.12.
-
Em Architecture (Arquitetura), escolha x86_64.
-
-
Na guia Alterar função de execução padrão, faça o seguinte:
-
Expanda a guia e escolha Usar uma função existente.
-
Selecione a
lambda-s3-trigger-role
que você criou anteriormente.
-
-
Escolha Criar função.
Implantar o código da função

Este tutorial usa o runtime do Python 3.12, mas também fornecemos exemplos de arquivos de código para outros runtimes. Você pode selecionar a guia na caixa a seguir para ver o código do runtime do seu interesse.
A função do Lambda vai recuperar o nome da chave do objeto carregado e o nome do bucket do parâmetro event
que receberá do Amazon S3. Em seguida, a função usará o método get_object
Para implantar o código da função
-
Escolha a guia Python na caixa a seguir e copie o código.
- SDK para .NET
-
nota
Há mais no GitHub. Encontre o exemplo completo e saiba como configurar e executar no repositório dos Exemplos sem servidor
. Consumir um evento do S3 com o Lambda usando .NET.
// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. // SPDX-License-Identifier: Apache-2.0 using System.Threading.Tasks; using Amazon.Lambda.Core; using Amazon.S3; using System; using Amazon.Lambda.S3Events; using System.Web; // Assembly attribute to enable the Lambda function's JSON input to be converted into a .NET class. [assembly: LambdaSerializer(typeof(Amazon.Lambda.Serialization.SystemTextJson.DefaultLambdaJsonSerializer))] namespace S3Integration { public class Function { private static AmazonS3Client _s3Client; public Function() : this(null) { } internal Function(AmazonS3Client s3Client) { _s3Client = s3Client ?? new AmazonS3Client(); } public async Task<string> Handler(S3Event evt, ILambdaContext context) { try { if (evt.Records.Count <= 0) { context.Logger.LogLine("Empty S3 Event received"); return string.Empty; } var bucket = evt.Records[0].S3.Bucket.Name; var key = HttpUtility.UrlDecode(evt.Records[0].S3.Object.Key); context.Logger.LogLine($"Request is for {bucket} and {key}"); var objectResult = await _s3Client.GetObjectAsync(bucket, key); context.Logger.LogLine($"Returning {objectResult.Key}"); return objectResult.Key; } catch (Exception e) { context.Logger.LogLine($"Error processing request - {e.Message}"); return string.Empty; } } } }
-
No painel de Origem do código no console do Lambda, cole o código no editor de código, substituindo o código criado pelo Lambda.
-
Na seção DEPLOY, escolha Implantar para atualizar o código da função:
Criar o acionador do Amazon S3

Para criar o acionador do Amazon S3
-
No painel Visão geral da função, escolha Adicionar gatilho.
-
Selecione S3.
-
Em Bucket, selecione o bucket que você criou anteriormente no tutorial.
-
Em Tipos de eventos, garanta que a opção Todos os eventos de criação de objetos esteja selecionada.
-
Em Invocação recursiva, marque a caixa de seleção para confirmar que não é recomendável usar o mesmo bucket do Amazon S3 para entrada e saída.
-
Escolha Adicionar.
nota
Quando você cria um acionador do Amazon S3 para uma função do Lambda usando o console do Lambda, o Amazon S3 configura uma notificação de evento no bucket que você especificar. Antes de configurar essa notificação de evento, o Amazon S3 executa uma série de verificações para confirmar que o destino do evento existe e tem as políticas do IAM necessárias. O Amazon S3 também executa esses testes em qualquer outra notificação de evento configurada para esse bucket.
Por causa dessa verificação, se o bucket tiver destinos de eventos previamente configurados para recursos que não existem mais ou para recursos que não têm as políticas de permissões necessárias, o Amazon S3 não poderá criar a nova notificação de evento. Você verá a seguinte mensagem de erro indicando que não foi possível criar seu acionador:
An error occurred when creating the trigger: Unable to validate the following destination configurations.
Você poderá ver esse erro se tiver configurado anteriormente um acionador para outra função do Lambda usando o mesmo bucket e, desde então, tiver excluído a função ou modificado suas políticas de permissões.
Testar sua função do Lambda com um evento fictício

Para testar a função do Lambda com um evento fictício
-
Na página de console do Lambda da sua função, escolha a guia Testar.
-
Em Nome do evento, insira
MyTestEvent
. -
Em Evento JSON, cole o seguinte evento de teste. Não se esqueça de substituir estes valores:
-
Substitua
us-east-1
pela região em que você criou o bucket do Amazon S3. -
Substitua ambas as instâncias de
amzn-s3-demo-bucket
pelo nome do seu próprio bucket do Amazon S3. -
Substitua
test%2FKey
pelo nome do objeto de teste que você carregou anteriormente para o bucket (por exemplo,HappyFace.jpg
).
{ "Records": [ { "eventVersion": "2.0", "eventSource": "aws:s3", "awsRegion": "
us-east-1
", "eventTime": "1970-01-01T00:00:00.000Z", "eventName": "ObjectCreated:Put", "userIdentity": { "principalId": "EXAMPLE" }, "requestParameters": { "sourceIPAddress": "127.0.0.1" }, "responseElements": { "x-amz-request-id": "EXAMPLE123456789", "x-amz-id-2": "EXAMPLE123/5678abcdefghijklambdaisawesome/mnopqrstuvwxyzABCDEFGH" }, "s3": { "s3SchemaVersion": "1.0", "configurationId": "testConfigRule", "bucket": { "name": "amzn-s3-demo-bucket
", "ownerIdentity": { "principalId": "EXAMPLE" }, "arn": "arn:aws:s3:::amzn-s3-demo-bucket
" }, "object": { "key": "test%2Fkey
", "size": 1024, "eTag": "0123456789abcdef0123456789abcdef", "sequencer": "0A1B2C3D4E5F678901" } } } ] } -
-
Escolha Salvar.
-
Escolha Test (Testar).
-
Se a função for executada com êxito, você verá uma saída semelhante à seguinte na guia Resultados da execução.
Response "image/jpeg" Function Logs START RequestId: 12b3cae7-5f4e-415e-93e6-416b8f8b66e6 Version: $LATEST 2021-02-18T21:40:59.280Z 12b3cae7-5f4e-415e-93e6-416b8f8b66e6 INFO INPUT BUCKET AND KEY: { Bucket: 'amzn-s3-demo-bucket', Key: 'HappyFace.jpg' } 2021-02-18T21:41:00.215Z 12b3cae7-5f4e-415e-93e6-416b8f8b66e6 INFO CONTENT TYPE: image/jpeg END RequestId: 12b3cae7-5f4e-415e-93e6-416b8f8b66e6 REPORT RequestId: 12b3cae7-5f4e-415e-93e6-416b8f8b66e6 Duration: 976.25 ms Billed Duration: 977 ms Memory Size: 128 MB Max Memory Used: 90 MB Init Duration: 430.47 ms Request ID 12b3cae7-5f4e-415e-93e6-416b8f8b66e6
Testar a função do Lambda com o acionador do Amazon S3

Para testar a função com o gatilho configurado, carregue um objeto para o bucket do Amazon S3 usando o console. Para verificar se a função do Lambda foi executada conforme planejado, use o CloudWatch Logs para visualizar a saída da sua função.
Para carregar um objeto para o bucket do Amazon S3
-
Abra a página Buckets
do console do Amazon S3 e escolha o bucket que você criou anteriormente. -
Escolha Carregar.
-
Escolha Adicionar arquivos e use o seletor de arquivos para escolher um objeto que você deseje carregar. Esse objeto pode ser qualquer arquivo que você escolher.
-
Selecione Abrir e Carregar.
Para verificar a invocação da função usando o CloudWatch Logs
-
Abra o console do CloudWatch
. -
Verifique se você está trabalhando na mesma Região da AWS em que criou a função do Lambda. Você pode alterar sua região usando a lista suspensa na parte superior da tela.
-
Escolha Logs e depois escolha Grupos de logs.
-
Escolha o nome do grupo de logs para sua função (
/aws/lambda/s3-trigger-tutorial
). -
Em Fluxos de logs, escolha o fluxo de logs mais recente.
-
Se sua função tiver sido invocada corretamente em resposta ao gatilho do Amazon S3, você verá uma saída semelhante à seguinte. O
CONTENT TYPE
que você vê depende do tipo de arquivo que você carregou no bucket.2022-05-09T23:17:28.702Z 0cae7f5a-b0af-4c73-8563-a3430333cc10 INFO CONTENT TYPE:
image/jpeg
Limpe os recursos
Agora você pode excluir os recursos criados para este tutorial, a menos que queira mantê-los. Excluindo os recursos da AWS que você não está mais usando, você evita cobranças desnecessárias em sua Conta da AWS.
Como excluir a função do Lambda
-
Abra a página Functions
(Funções) no console do Lambda. -
Selecione a função que você criou.
-
Selecione Ações, Excluir.
-
Digite
confirm
no campo de entrada de texto e escolha Delete (Excluir).
Para excluir a função de execução
-
Abra a página Roles
(Funções) no console do IAM. -
Selecione a função de execução que você criou.
-
Escolha Excluir.
-
Insira o nome do perfil no campo de entrada de texto e escolha Delete (Excluir).
Para excluir o bucket do S3
-
Abra o console Amazon S3
. -
Selecione o bucket que você criou.
-
Escolha Excluir.
-
Insira o nome do bucket no campo de entrada de texto.
-
Escolha Excluir bucket.
Próximas etapas
No Tutorial: Usar um acionador do Amazon S3 para criar imagens em miniatura, o gatilho do Amazon S3 invoca uma função para criar uma imagem em miniatura para cada arquivo de imagem que é carregado para um bucket. Este tutorial requer um nível moderado de conhecimento de domínios da AWS e do Lambda. Ele demonstra como criar recursos usando a AWS Command Line Interface (AWS CLI) e como criar um arquivo .zip de pacote de implantação de arquivamento para a sua função e suas dependências.