Usando a função Lambda com Amazon S3

O serviço Amazon S3 é usado para armazenamento de arquivos, onde você pode carregar ou remover arquivos. Podemos acionar o AWS Lambda no S3 quando houver uploads de arquivo em buckets S3. O AWS Lambda tem uma função de manipulador que atua como um ponto de partida para a função AWS Lambda. O manipulador tem os detalhes dos eventos. Neste capítulo, vamos ver como usar o AWS S3 para acionar a função AWS Lambda quando carregamos arquivos no bucket S3.

Etapas para usar a função AWS Lambda com Amazon S3

Para começar a usar o AWS Lambda com Amazon S3, precisamos do seguinte -

  • Criar Bucket S3
  • Crie uma função que tenha permissão para trabalhar com s3 e lambda
  • Crie a função lambda e adicione s3 como o gatilho.

Exemplo

Vamos ver essas etapas com a ajuda de um exemplo que mostra a interação básica entre o Amazon S3 e o AWS Lambda.

  • O usuário fará o upload de um arquivo no bucket do Amazon S3

  • Assim que o arquivo for carregado, ele acionará a função AWS Lambda em segundo plano, que exibirá uma saída na forma de uma mensagem do console informando que o arquivo foi carregado.

  • O usuário poderá ver a mensagem nos logs do Cloudwatch assim que o arquivo for carregado.

O diagrama de blocos que explica o fluxo do exemplo é mostrado aqui -

Criando Bucket S3

Vamos começar criando um bucket s3 no console AWS usando as etapas fornecidas abaixo -

Passo 1

Vá para os serviços da Amazon e clique em S3 na seção de armazenamento, conforme destacado na imagem abaixo -

Passo 2

Clique em armazenamento S3 e Create bucket que irá armazenar os arquivos carregados.

etapa 3

Depois de clicar Create bucket botão, você pode ver uma tela como a seguir -

Passo 4

Insira os detalhes Bucket name, Select the Region e clique Createbotão no lado esquerdo inferior. Assim, criamos um intervalo com o nome:workingwithlambdaands3.

Etapa 5

Agora, clique no nome do intervalo e ele solicitará que você carregue os arquivos conforme mostrado abaixo -

Portanto, concluímos a criação do bucket no S3.

Crie uma função que funcione com S3 e Lambda

Para criar uma função que funcione com S3 e Lambda, siga as etapas fornecidas abaixo -

Passo 1

Vá para os serviços da AWS e selecione IAM conforme mostrado abaixo -

Passo 2

Agora clique IAM -> Roles como mostrado abaixo -

etapa 3

Agora clique Create rolee escolha os serviços que usarão essa função. Selecione Lambda e clique emPermission botão.

Passo 4

Adicione a permissão abaixo e clique Review.

Etapa 5

Observe que escolhemos as seguintes permissões -

Observe que as políticas que selecionamos são AmazonS3FullAccess, AWSLambdaFullAccess e CloudWatchFullAccess.

Etapa 6

Agora, insira o nome da função, a descrição da função e clique Create Role botão na parte inferior.

Assim, nossa função chamada lambdawiths3service é criado.

Criar função Lambda e adicionar acionador S3

Nesta seção, vamos ver como criar uma função Lambda e adicionar um gatilho S3 a ela. Para isso, você terá que seguir as etapas abaixo -

Passo 1

Acesse AWS Services e selecione Lambda conforme mostrado abaixo -

Passo 2

Clique Lambda e siga o processo para adicionar Name. Escolha oRuntime, Roleetc. e criar a função. A função Lambda que criamos é mostrada na imagem abaixo -

etapa 3

Agora vamos adicionar o gatilho S3.

Passo 4

Escolha o acionador acima e adicione os detalhes conforme mostrado abaixo -

Etapa 5

Selecione o intervalo criado na lista suspensa de intervalos. O tipo de evento tem os seguintes detalhes -

Selecione Object Created (All), pois precisamos do acionador AWS Lambda quando o arquivo é carregado, removido, etc.

Etapa 6

Você pode adicionar prefixo e padrão de arquivo que são usados ​​para filtrar os arquivos adicionados. Por exemplo, para acionar lambda apenas para imagens .jpg. Vamos mantê-lo em branco por enquanto, pois precisamos acionar o Lambda para todos os arquivos carregados. CliqueAdd botão para adicionar o gatilho.

Etapa 7

Você pode encontrar a exibição do acionador para a função Lambda conforme mostrado abaixo -

Vamos adicionar os detalhes da função lambda do aws. Aqui, usaremos o editor online para adicionar nosso código e usar nodejs como o ambiente de execução.

Etapa 8

Para acionar o S3 com AWS Lambda, teremos que usar o evento S3 no código conforme mostrado abaixo -

exports.handler = function(event, context, callback) {
   console.log("Incoming Event: ", event);
   const bucket = event.Records[0].s3.bucket.name;
   const filename = decodeURIComponent(event.Records[0].s3.object.key.replace(/\+/g, ' '));
   const message = `File is uploaded in - ${bucket} -> ${filename}`;
   console.log(message);
   callback(null, message);
};

Observe que o parâmetro de evento contém os detalhes do S3event. Consolamos o nome do intervalo e o nome do arquivo que serão registrados quando você carregar a imagem no S3bucket.

Etapa 9

Agora, vamos salvar as alterações e testar a função lambda com S3upload. A seguir estão os detalhes do código adicionados no AWS Lambda -

Etapa 10

Agora, vamos adicionar a função, memória e tempo limite.

Etapa 11

Agora, salve a função Lambda. Abra o S3 dos serviços da Amazon e abra o intervalo que criamos anteriormente, a saberworkingwithlambdaands3.

Faça upload da imagem conforme mostrado abaixo -

Etapa 12

Clique Upload botão para adicionar arquivos como mostrado -

Etapa 13

Clique Add filespara adicionar arquivos. Você também pode arrastar e soltar os arquivos. Agora cliqueUpload botão.

Portanto, carregamos uma imagem em nosso balde S3.

Etapa 14

Para ver os detalhes do gatilho, vá para o serviço AWS e selecione CloudWatch. Abra os logs da função Lambda e use o seguinte código -

exports.handler = function(event, context, callback) {
   console.log("Incoming Event: ", event);
   const bucket = event.Records[0].s3.bucket.name;
   const filename = decodeURIComponent(event.Records[0].s3.object.key.replace(/\+/g, ' '));
   const message = `File is uploaded in - ${bucket} -> ${filename}`;
   console.log(message);
   callback(null, message);
};

A saída que você pode observar no Cloudwatch é como mostrado -

A função AWS Lambda é acionada quando o arquivo é carregado no intervalo S3 e os detalhes são registrados no Cloudwatch, conforme mostrado abaixo -