Tutorial: Usar um acionador do Amazon S3 para invocar uma função do Lambda
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.
Pré-requisitos
Se você ainda não tem Conta da AWS, siga as etapas a seguir para criar um.
Para se cadastrar em uma Conta da AWS
Abra https://portal.aws.amazon.com/billing/signup
. Siga as instruções online.
Parte do procedimento de inscrição envolve receber uma chamada telefônica e inserir um código de verificação no teclado do telefone.
Quando você se cadastra em uma Conta da AWS, um Usuário raiz da conta da AWS é criado. O usuário raiz tem acesso a todos os Serviços da AWS e atributos na conta. Como prática recomendada de segurança, atribua o acesso administrativo a um usuário e use somente o usuário-raiz para executar tarefas que exigem acesso de usuário-raiz.
A AWS envia um e-mail de confirmação depois que o processo de cadastramento é concluído. A qualquer momento, é possível visualizar as atividades da conta atual e gerenciar sua conta acessando https://aws.amazon.com/
Depois de se cadastrar em uma Conta da AWS, proteja seu Usuário raiz da conta da AWS, habilite o AWS IAM Identity Center e crie um usuário administrativo para não usar o usuário raiz em tarefas cotidianas.
Proteger seu Usuário raiz da conta da AWS
-
Faça login no AWS Management Console
como o proprietário da conta ao escolher a opção Usuário raiz e inserir o endereço de e-mail da Conta da AWS. Na próxima página, insira sua senha. Para obter ajuda ao fazer login usando o usuário raiz, consulte Fazer login como usuário raiz no Guia do usuário do Início de Sessão da AWS.
-
Habilite a autenticação multifator (MFA) para o usuário raiz.
Para obter instruções, consulte Habilitar um dispositivo MFA virtual para o usuário raiz de sua conta da Conta da AWS (console) no Guia do usuário do IAM.
Criar um usuário com acesso administrativo
-
Habilitar o IAM Identity Center.
Para obter instruções, consulte Habilitar AWS IAM Identity Center no Guia do usuário do AWS IAM Identity Center.
-
No Centro de Identidade do IAM, conceda o acesso administrativo para um usuário.
Para obter um tutorial sobre como usar o Diretório do Centro de Identidade do IAM como fonte de identidade, consulte Configurar o acesso dos usuários com o Diretório do Centro de Identidade do IAM padrão no Guia do usuário do AWS IAM Identity Center.
Iniciar sessão como o usuário com acesso administrativo
-
Para fazer login com seu usuário do Centro de Identidade do IAM, use o URL de login que foi enviado ao seu endereço de e-mail quando você criou o usuário do Centro do Usuário do IAM.
Para obter ajuda com o login utilizando um usuário do Centro de Identidade do IAM, consulte Fazer login no portal de acesso da AWS, no Guia do usuário do Início de Sessão da AWS.
Atribuir acesso a usuários adicionais
-
No Centro de Identidade do IAM, crie um conjunto de permissões que siga as práticas recomendadas de aplicação de permissões com privilégio mínimo.
Para obter instruções, consulte Create a permission set no Guia do usuário do AWS IAM Identity Center.
-
Atribua usuários a um grupo e, em seguida, atribua o acesso de autenticação única ao grupo.
Para obter instruções, consulte Add groups no Guia do usuário do AWS IAM Identity Center.
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. -
Selecione Criar bucket.
-
Em General configuration (Configuração geral), faça o seguinte:
-
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 (-).
-
Em AWS Region (Região da AWS), escolha uma região. Mais adiante no tutorial, você deverá criar sua função do Lambda na mesma região.
-
-
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 Next: Review (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 serviços e recursos 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 Roles
(Funções) no console do IAM. -
Selecione Criar função.
-
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.
-
No painel Código-fonte no console do Lambda, cole o código no arquivo lambda_function.py.
-
Escolha Implantar.
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.
-
Escolha Ações, Excluir.
-
Digite
delete
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.