Tutorial: Usar um acionador do Amazon S3 para invocar uma função do Lambda - AWS Lambda

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.

Diagrama mostrando o fluxo de dados entre um bucket do Amazon S3, uma função do Lambda e o Amazon CloudWatch Logs

Este tutorial demonstra como:

  1. Crie um bucket do Amazon S3.

  2. Crie uma função do Lambda que retorne o tipo de objeto de um bucket do Amazon S3.

  3. Configure um acionador do Lambda que invoque a função quando forem carregados objetos para o bucket.

  4. 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 uma.

Para cadastrar-se em uma Conta da AWS
  1. Abra https://portal.aws.amazon.com/billing/signup.

  2. Siga as instruções on-line.

    Parte do procedimento de inscrição envolve receber uma chamada telefônica e digitar 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 recursos 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.

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/ e selecionando Minha conta.

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.

Proteja seu Usuário raiz da conta da AWS
  1. Faça login no AWS Management Console como o proprietário da conta ao selecionar a opção Root user (Usuário raiz) e inserir o endereço de e-mail da Conta da AWS. Na próxima página, digite sua senha.

    Para obter ajuda ao fazer login usando o usuário raiz, consulte Signing in as the root user (Fazer login como usuário raiz) no Guia do usuárioInício de Sessão da AWS.

  2. Ative a autenticação multifator (MFA) para seu usuário raiz.

    Para obter instruções, consulte Habilitar um dispositivo MFA virtual para o usuário raiz (console)Conta da AWS no Guia do Usuário do IAM.

Criar um usuário com acesso administrativo
  1. 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.

  2. 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 IAM Identity Center, use a URL de login enviada ao seu endereço de e-mail quando você criou o usuário IAM Identity Center user.

    Para obter ajuda com o login utilizando um usuário do IAM Identity Center, consulte Fazendo login no portal de acesso da AWS, no Guia do UsuárioInício de Sessão da AWS.

Atribuir acesso a usuários adicionais
  1. 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.

  2. 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

Diagrama do fluxo de trabalho do tutorial mostrando que você está na etapa de bucket do Amazon S3 criando o bucket
Como criar um bucket do Amazon S3
  1. Abra o console do Amazon S3 e selecione a página Buckets.

  2. Selecione Criar bucket.

  3. Em General configuration (Configuração geral), faça o seguinte:

    1. 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 (-).

    2. 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.

  4. Deixe todas as outras opções com seus valores padrão e escolha Criar bucket.

Carregar um objeto de teste em um bucket

Diagrama do fluxo de trabalho do tutorial mostrando que você está na etapa de bucket do Amazon S3 carregando um objeto de teste
Para carregar um objeto de teste
  1. Abra a página Buckets do console do Amazon S3 e escolha o bucket que você criou durante a etapa anterior.

  2. Escolha Carregar.

  3. Escolha Adicionar arquivos e selecione o objeto que deseja de carregar. Você pode selecionar qualquer arquivo (por exemplo, HappyFace.jpg).

  4. 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

Diagrama de fluxo de trabalho do tutorial mostrando que você está na etapa da função do Lambda criando a 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
  1. Abra a página Policies (Políticas) do console do IAM.

  2. Escolha Criar política.

  3. 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:::*/*" } ] }
  4. Escolha Próximo: etiquetas.

  5. Selecione Next: Review (Próximo: revisar).

  6. No campo Política de revisão, em Nome da política, insira s3-trigger-tutorial.

  7. Escolha Criar política.

Criar uma função de execução

Diagrama de fluxo de trabalho do tutorial mostrando que você está na etapa da função do Lambda criando a 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
  1. Abra a página Roles (Funções) no console do IAM.

  2. Selecione Criar função.

  3. Para o tipo de entidade confiável, escolha Serviço da AWS e, em seguida, para o caso de uso, selecione Lambda.

  4. Escolha Próximo.

  5. Na caixa de pesquisa de política, insira s3-trigger-tutorial.

  6. Nos resultados da pesquisa, selecione a política que você criou (s3-trigger-tutorial) e, depois, escolha Next (Avançar).

  7. 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

Diagrama do fluxo de trabalho do tutorial mostrando que você está na etapa da função do Lambda criando a função

Crie uma função do Lambda no console usando o runtime do Python 3.12.

Para criar a função do Lambda
  1. Abra a página Funções do console do Lambda.

  2. 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.

    Imagem mostrando o menu suspenso de regiões no console do Lambda
  3. Escolha a opção Criar função.

  4. Escolher Criar do zero

  5. Em Basic information (Informações básicas), faça o seguinte:

    1. Em Nome da função, inserir s3-trigger-tutorial

    2. Em Runtime, selecione Python 3.12.

    3. Em Architecture (Arquitetura), escolha x86_64.

  6. Na guia Alterar função de execução padrão, faça o seguinte:

    1. Expanda a guia e escolha Usar uma função existente.

    2. Selecione a lambda-s3-trigger-role que você criou anteriormente.

  7. Escolha Criar função.

Implantar o código da função

Diagrama do fluxo de trabalho do tutorial mostrando que você está na etapa da função do Lambda implantando o código

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 do AWS SDK for Python (Boto3) para recuperar os metadados do objeto, incluindo o tipo de conteúdo (tipo MIME) do objeto carregado.

Para implantar o código da função
  1. Escolha a guia Python na caixa a seguir e copie o código.

    .NET
    AWS SDK for .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; } } } }
    Go
    SDK para Go V2
    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 Go.

    // Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. // SPDX-License-Identifier: Apache-2.0 package main import ( "context" "log" "github.com/aws/aws-lambda-go/events" "github.com/aws/aws-lambda-go/lambda" "github.com/aws/aws-sdk-go-v2/config" "github.com/aws/aws-sdk-go-v2/service/s3" ) func handler(ctx context.Context, s3Event events.S3Event) error { sdkConfig, err := config.LoadDefaultConfig(ctx) if err != nil { log.Printf("failed to load default config: %s", err) return err } s3Client := s3.NewFromConfig(sdkConfig) for _, record := range s3Event.Records { bucket := record.S3.Bucket.Name key := record.S3.Object.URLDecodedKey headOutput, err := s3Client.HeadObject(ctx, &s3.HeadObjectInput{ Bucket: &bucket, Key: &key, }) if err != nil { log.Printf("error getting head of object %s/%s: %s", bucket, key, err) return err } log.Printf("successfully retrieved %s/%s of type %s", bucket, key, *headOutput.ContentType) } return nil } func main() { lambda.Start(handler) }
    Java
    SDK para Java 2.x
    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 Java.

    // Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. // SPDX-License-Identifier: Apache-2.0 package example; import software.amazon.awssdk.services.s3.model.HeadObjectRequest; import software.amazon.awssdk.services.s3.model.HeadObjectResponse; import software.amazon.awssdk.services.s3.S3Client; import com.amazonaws.services.lambda.runtime.Context; import com.amazonaws.services.lambda.runtime.RequestHandler; import com.amazonaws.services.lambda.runtime.events.S3Event; import com.amazonaws.services.lambda.runtime.events.models.s3.S3EventNotification.S3EventNotificationRecord; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class Handler implements RequestHandler<S3Event, String> { private static final Logger logger = LoggerFactory.getLogger(Handler.class); @Override public String handleRequest(S3Event s3event, Context context) { try { S3EventNotificationRecord record = s3event.getRecords().get(0); String srcBucket = record.getS3().getBucket().getName(); String srcKey = record.getS3().getObject().getUrlDecodedKey(); S3Client s3Client = S3Client.builder().build(); HeadObjectResponse headObject = getHeadObject(s3Client, srcBucket, srcKey); logger.info("Successfully retrieved " + srcBucket + "/" + srcKey + " of type " + headObject.contentType()); return "Ok"; } catch (Exception e) { throw new RuntimeException(e); } } private HeadObjectResponse getHeadObject(S3Client s3Client, String bucket, String key) { HeadObjectRequest headObjectRequest = HeadObjectRequest.builder() .bucket(bucket) .key(key) .build(); return s3Client.headObject(headObjectRequest); } }
    JavaScript
    SDK para JavaScript (v3)
    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 JavaScript.

    // Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. // SPDX-License-Identifier: Apache-2.0 import { S3Client, HeadObjectCommand } from "@aws-sdk/client-s3"; const client = new S3Client(); exports.handler = async (event, context) => { // Get the object from the event and show its content type const bucket = event.Records[0].s3.bucket.name; const key = decodeURIComponent(event.Records[0].s3.object.key.replace(/\+/g, ' ')); try { const { ContentType } = await client.send(new HeadObjectCommand({ Bucket: bucket, Key: key, })); console.log('CONTENT TYPE:', ContentType); return ContentType; } catch (err) { console.log(err); const message = `Error getting object ${key} from bucket ${bucket}. Make sure they exist and your bucket is in the same region as this function.`; console.log(message); throw new Error(message); } };

    Consumir um evento do S3 com o Lambda usando TypeScript.

    // Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. // SPDX-License-Identifier: Apache-2.0 import { S3Event } from 'aws-lambda'; import { S3Client, HeadObjectCommand } from '@aws-sdk/client-s3'; const s3 = new S3Client({ region: process.env.AWS_REGION }); export const handler = async (event: S3Event): Promise<string | undefined> => { // Get the object from the event and show its content type const bucket = event.Records[0].s3.bucket.name; const key = decodeURIComponent(event.Records[0].s3.object.key.replace(/\+/g, ' ')); const params = { Bucket: bucket, Key: key, }; try { const { ContentType } = await s3.send(new HeadObjectCommand(params)); console.log('CONTENT TYPE:', ContentType); return ContentType; } catch (err) { console.log(err); const message = `Error getting object ${key} from bucket ${bucket}. Make sure they exist and your bucket is in the same region as this function.`; console.log(message); throw new Error(message); } };
    PHP
    SDK para PHP
    nota

    Há mais no GitHub. Encontre o exemplo completo e saiba como configurar e executar no repositório dos Exemplos sem servidor.

    Como consumir um evento do S3 com o Lambda usando PHP.

    // Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. // SPDX-License-Identifier: Apache-2.0 <?php use Bref\Context\Context; use Bref\Event\S3\S3Event; use Bref\Event\S3\S3Handler; use Bref\Logger\StderrLogger; require __DIR__ . '/vendor/autoload.php'; class Handler extends S3Handler { private StderrLogger $logger; public function __construct(StderrLogger $logger) { $this->logger = $logger; } public function handleS3(S3Event $event, Context $context) : void { $this->logger->info("Processing S3 records"); // Get the object from the event and show its content type $records = $event->getRecords(); foreach ($records as $record) { $bucket = $record->getBucket()->getName(); $key = urldecode($record->getObject()->getKey()); try { $fileSize = urldecode($record->getObject()->getSize()); echo "File Size: " . $fileSize . "\n"; // TODO: Implement your custom processing logic here } catch (Exception $e) { echo $e->getMessage() . "\n"; echo 'Error getting object ' . $key . ' from bucket ' . $bucket . '. Make sure they exist and your bucket is in the same region as this function.' . "\n"; throw $e; } } } } $logger = new StderrLogger(); return new Handler($logger);
    Python
    SDK para Python (Boto3).
    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 Python.

    # Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. # SPDX-License-Identifier: Apache-2.0 import json import urllib.parse import boto3 print('Loading function') s3 = boto3.client('s3') def lambda_handler(event, context): #print("Received event: " + json.dumps(event, indent=2)) # Get the object from the event and show its content type bucket = event['Records'][0]['s3']['bucket']['name'] key = urllib.parse.unquote_plus(event['Records'][0]['s3']['object']['key'], encoding='utf-8') try: response = s3.get_object(Bucket=bucket, Key=key) print("CONTENT TYPE: " + response['ContentType']) return response['ContentType'] except Exception as e: print(e) print('Error getting object {} from bucket {}. Make sure they exist and your bucket is in the same region as this function.'.format(key, bucket)) raise e
    Ruby
    SDK para Ruby
    nota

    Há mais no GitHub. Encontre o exemplo completo e saiba como configurar e executar no repositório dos Exemplos sem servidor.

    Como consumir um evento do S3 com o Lambda usando Ruby.

    require 'json' require 'uri' require 'aws-sdk' puts 'Loading function' def lambda_handler(event:, context:) s3 = Aws::S3::Client.new(region: 'region') # Your AWS region # puts "Received event: #{JSON.dump(event)}" # Get the object from the event and show its content type bucket = event['Records'][0]['s3']['bucket']['name'] key = URI.decode_www_form_component(event['Records'][0]['s3']['object']['key'], Encoding::UTF_8) begin response = s3.get_object(bucket: bucket, key: key) puts "CONTENT TYPE: #{response.content_type}" return response.content_type rescue StandardError => e puts e.message puts "Error getting object #{key} from bucket #{bucket}. Make sure they exist and your bucket is in the same region as this function." raise e end end
    Rust
    SDK para Rust
    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 Rust.

    // Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. // SPDX-License-Identifier: Apache-2.0 use aws_lambda_events::event::s3::S3Event; use aws_sdk_s3::{Client}; use lambda_runtime::{run, service_fn, Error, LambdaEvent}; /// Main function #[tokio::main] async fn main() -> Result<(), Error> { tracing_subscriber::fmt() .with_max_level(tracing::Level::INFO) .with_target(false) .without_time() .init(); // Initialize the AWS SDK for Rust let config = aws_config::load_from_env().await; let s3_client = Client::new(&config); let res = run(service_fn(|request: LambdaEvent<S3Event>| { function_handler(&s3_client, request) })).await; res } async fn function_handler( s3_client: &Client, evt: LambdaEvent<S3Event> ) -> Result<(), Error> { tracing::info!(records = ?evt.payload.records.len(), "Received request from SQS"); if evt.payload.records.len() == 0 { tracing::info!("Empty S3 event received"); } let bucket = evt.payload.records[0].s3.bucket.name.as_ref().expect("Bucket name to exist"); let key = evt.payload.records[0].s3.object.key.as_ref().expect("Object key to exist"); tracing::info!("Request is for {} and object {}", bucket, key); let s3_get_object_result = s3_client .get_object() .bucket(bucket) .key(key) .send() .await; match s3_get_object_result { Ok(_) => tracing::info!("S3 Get Object success, the s3GetObjectResult contains a 'body' property of type ByteStream"), Err(_) => tracing::info!("Failure with S3 Get Object request") } Ok(()) }
  2. No painel Código-fonte no console do Lambda, cole o código no arquivo lambda_function.py.

    Editor de código do console do Lambda.
  3. Escolha Implantar.

Criar o acionador do Amazon S3

Diagrama do fluxo de trabalho do tutorial mostrando que você está na etapa de acionador do S3 criando o acionador
Para criar o acionador do Amazon S3
  1. No painel Visão geral da função, escolha Adicionar gatilho.

    Seção de visão geral da função do console do Lambda.
  2. Selecione S3.

  3. Em Bucket, selecione o bucket que você criou anteriormente no tutorial.

  4. Em Tipos de eventos, garanta que a opção Todos os eventos de criação de objetos esteja selecionada.

  5. 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.

  6. 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

Diagrama do fluxo de trabalho do tutorial mostrando que você está na etapa de teste fazendo testes com um evento fictício
Para testar a função do Lambda com um evento fictício
  1. Na página de console do Lambda da sua função, escolha a guia Testar.

    Guia Teste do console do Lambda.
  2. Em Nome do evento, insira MyTestEvent.

  3. 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 DOC-EXAMPLE-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": "DOC-EXAMPLE-BUCKET", "ownerIdentity": { "principalId": "EXAMPLE" }, "arn": "arn:aws:s3:::DOC-EXAMPLE-BUCKET" }, "object": { "key": "test%2Fkey", "size": 1024, "eTag": "0123456789abcdef0123456789abcdef", "sequencer": "0A1B2C3D4E5F678901" } } } ] }
  4. Escolha Salvar.

  5. Escolha Test (Testar).

  6. 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: 'DOC-EXAMPLE-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

Diagrama do fluxo de trabalho do tutorial mostrando que você está na etapa de teste fazendo testes com o acionador do 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
  1. Abra a página Buckets do console do Amazon S3 e escolha o bucket que você criou anteriormente.

  2. Escolha Carregar.

  3. 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.

  4. Selecione Abrir e Carregar.

Para verificar a invocação da função usando o CloudWatch Logs
  1. Abra o console do CloudWatch.

  2. 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.

    Imagem mostrando o menu suspenso de regiões no console do Lambda
  3. Escolha Logs e depois escolha Grupos de logs.

  4. Escolha o nome do grupo de logs para sua função (/aws/lambda/s3-trigger-tutorial).

  5. Em Fluxos de logs, escolha o fluxo de logs mais recente.

  6. 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
  1. Abra a página Functions (Funções) no console do Lambda.

  2. Selecione a função que você criou.

  3. Escolha Ações, Excluir.

  4. Digite delete no campo de entrada de texto e escolha Delete (Excluir).

Para excluir a função de execução
  1. Abra a página Roles (Funções) no console do IAM.

  2. Selecione a função de execução que você criou.

  3. Escolha Excluir.

  4. Insira o nome do perfil no campo de entrada de texto e escolha Delete (Excluir).

Para excluir o bucket do S3
  1. Abra o console Amazon S3.

  2. Selecione o bucket que você criou.

  3. Escolha Excluir.

  4. Insira o nome do bucket no campo de entrada de texto.

  5. 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.