Coder Social home page Coder Social logo

lambda-integration's Introduction

Lambda Integration

Caio Souza GitHub language count Repository size


Índice

  1. Instalar o AWS CLI e LocalStack CLI
  2. Configurar o Docker Compose
  3. Estrutura de Diretórios
  4. Criar o Código da Lambda
  5. Criar o Script de Configuração do LocalStack
  6. Iniciar o Docker Compose e Configurar o LocalStack
  7. Comandos Úteis para Interagir com a Lambda
  8. Código para Invocar a Lambda com Node.js
  9. Instalar Dependências
  10. Executar o Código
  11. Verificar a Resposta
  12. Referências

1. Instalar o AWS CLI e LocalStack CLI

AWS CLI:

Siga as instruções para instalar o AWS CLI: AWS CLI Installation

LocalStack CLI:

pip install localstack

2. Configurar o Docker Compose

Crie um arquivo docker-compose.yml na raiz do seu projeto:

version: '3.7'

services:
  localstack:
    container_name: "${LOCALSTACK_DOCKER_NAME:-localstack-container}"
    image: localstack/localstack:latest
    ports:
      - "127.0.0.1:4566:4566"            # LocalStack Gateway
      - "127.0.0.1:4510-4559:4510-4559"  # external services port range
    environment:
      - DEBUG=${DEBUG:-0}
      - SERVICES=lambda,logs
      - LAMBDA_REMOTE_DOCKER=false
      - REQUESTS_CA_BUNDLE=/etc/ssl/certs/ca-certificates.crt
    volumes:
      - "${LOCALSTACK_VOLUME_DIR:-./volume}:/var/lib/localstack"
      - "/var/run/docker.sock:/var/run/docker.sock"

3. Estrutura de Diretórios

Certifique-se de ter a seguinte estrutura de diretórios e arquivos:

seu-projeto
├── docker-compose.yml
└── localstack
    ├── setup-localstack.sh
    └── lambdas
        └── example-lambda
            └── index.js

4. Criar o Código da Lambda

Arquivo: localstack/lambdas/example-lambda/index.js

exports.handler = async (event) => {
    let body = JSON.parse(event.body);
    const product = body.num1 * body.num2;
    const response = {
        statusCode: 200,
        body: "The product of " + body.num1 + " and " + body.num2 + " is " + product,
    };
    return response;
};

5. Criar o Script de Configuração do LocalStack

Arquivo: localstack/setup-localstack.sh

#!/bin/bash

# Parar execução em caso de erro
set -e

# Detalhes das lambdas
LAMBDAS=(
  "example-lambda,index.handler,nodejs18.x,arn:aws:iam::000000000000:role/lambda-role"
  # Adicione mais lambdas aqui se necessário
)

# Caminho para o diretório das lambdas
LAMBDA_DIR="localstack/lambdas"

# Esperar o LocalStack estar pronto
until awslocal lambda list-functions
do
  echo "Waiting for LocalStack Lambda..."
  sleep 3
done

# Criar funções Lambda no LocalStack
for LAMBDA_INFO in "${LAMBDAS[@]}"; do
  IFS=',' read -r LAMBDA_NAME HANDLER RUNTIME ROLE <<< "$LAMBDA_INFO"

  ZIP_NAME="$LAMBDA_DIR/$LAMBDA_NAME.zip"
  LAMBDA_CODE_DIR="$LAMBDA_DIR/$LAMBDA_NAME"

  # Verificar se o diretório da lambda existe
  if [ -d "$LAMBDA_CODE_DIR" ]; then
    # Navegar até o diretório da lambda
    cd $LAMBDA_CODE_DIR

    # Criar o ZIP no diretório pai
    echo "Creating ZIP for $LAMBDA_NAME"
    zip -r "../$LAMBDA_NAME.zip" ./*

    # Voltar ao diretório raiz do projeto
    cd ../../../

    # Verificar se o grupo de logs existe
    if ! awslocal logs describe-log-groups --log-group-name-prefix "/aws/lambda/$LAMBDA_NAME" | grep -q "/aws/lambda/$LAMBDA_NAME"; then
      # Criar grupo de logs
      awslocal logs create-log-group --log-group-name /aws/lambda/$LAMBDA_NAME
    else
      echo "Log group /aws/lambda/$LAMBDA_NAME already exists. Skipping creation."
    fi

    # Criar função Lambda no LocalStack
    echo "Creating Lambda function $LAMBDA_NAME"
    if awslocal lambda create-function \
      --function-name $LAMBDA_NAME \
      --runtime $RUNTIME \
      --role $ROLE \
      --handler $HANDLER \
      --zip-file fileb://$ZIP_NAME; then
      echo "Lambda function '$LAMBDA_NAME' created and configured successfully in LocalStack."
    else
      echo "Lambda function '$LAMBDA_NAME' already exists. If you want to recreate it, delete the function first."
    fi
  else
    echo "Directory $LAMBDA_CODE_DIR does not exist. Skipping..."
  fi
done

Dê permissão de execução ao script:

chmod +x localstack/setup-localstack.sh

6. Iniciar o Docker Compose e Configurar o LocalStack

Inicie os serviços:

docker-compose up -d

Execute o script de configuração (a partir da raiz do projeto):

./localstack/setup-localstack.sh

7. Comandos Úteis para Interagir com a Lambda

Consultar Lambda:

awslocal lambda invoke --function-name example-lambda --cli-binary-format raw-in-base64-out --payload '{"body": "{\"num1\": 3, \"num2\": 4}"}' response.json

Criar Lambda:

awslocal lambda create-function \
    --function-name example-lambda \
    --runtime nodejs18.x \
    --role arn:aws:iam::000000000000:role/lambda-role \
    --handler index.handler \
    --zip-file fileb://localstack/lambdas/example-lambda.zip

Listar Lambdas:

awslocal lambda list-functions

Listar Lambda Específica:

awslocal lambda get-function --function-name example-lambda

Aguardar até que o Status seja Ativo:

awslocal lambda wait function-active-v2 --function-name example-lambda

Deletar Lambda Específica:

awslocal lambda delete-function --function-name example-lambda

Verificar Logs da Lambda:

awslocal logs tail /aws/lambda/example-lambda

Verificar Logs do Container LocalStack:

docker logs localstack-container

Criar Grupo de Logs:

awslocal logs create-log-group --log-group-name /aws/lambda/example-lambda

Verificar Logs em um Grupo de Logs:

awslocal logs describe-log-streams --log-group-name /aws/lambda/example-lambda

Lambda Logs Stream:

awslocal logs get-log-events --log-group-name /aws/lambda/example-lambda --log-stream-name <LOG_STREAM_NAME>

Substitua <LOG_STREAM_NAME> pelo nome do stream de logs retornado pelo comando anterior.


8. Código para Invocar a Lambda com Node.js

Arquivo: index.js

import { InvokeCommand, LambdaClient, LogType } from "@aws-sdk/client-lambda";

// Função para invocar a Lambda
const invoke = async (funcName, payload) => {
  const client = new LambdaClient({ endpoint: 'http://localhost:4566' });
  const command = new InvokeCommand({
    FunctionName: funcName,
    Payload: JSON.stringify(payload),
    LogType: LogType.Tail,
  });

  const { Payload, LogResult } = await client.send(command);

  const result = Buffer.from(Payload).toString();
  const logs = Buffer.from(LogResult, "base64").toString();

  console.log("Result:", result);
  console.log("Logs:", logs);
  
  return { logs, result };
};

// Nome da função Lambda e payload
const funcName = 'example-lambda';
const payload = { body

: JSON.stringify({ num1: 3, num2: 4 }) };

// Invocar a função Lambda
invoke(funcName, payload).catch((error) => {
  console.error("Error invoking Lambda function:", error.message);
});

9. Instalar Dependências

Certifique-se de que as dependências necessárias estão instaladas:

npm install @aws-sdk/client-lambda

10. Executar o Código

Execute o script para invocar a Lambda:

node index.js

11. Verificar a Resposta

Verifique a saída no terminal para ver o resultado da invocação da função Lambda.


12. Referências


Desenvolvido por Caio Souza Entre em contato ;D

lambda-integration's People

Contributors

caiuzu avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.