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 -