Skip to content

PabloAndresArg/examples-localstack-python

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

16 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

🚀 examples-localstack-python

1754202473402

Prerrequisitos

Asegúrate de tener instaladas las siguientes herramientas:

  • AWS CLI
    Requerido para interactuar con servicios de AWS desde la línea de comandos.

  • Docker
    Necesario para ejecutar contenedores localmente.

🐳 Instalación LocalStack mediante Docker

docker pull localstack/localstack
docker run -d --name localstackdev -p 4566:4566 -p 4571:4571 -v localstack-data:/var/lib/localstack -v /var/run/docker.sock:/var/run/docker.sock  localstack/localstack

⚡ Desplegar y conectar Lambda con SQS en LocalStack

🟢 0. Activar el ambiente virtual porque usaremos awslocal
cd lambda
python3 -m venv .venv
# Windows
source .venv/scripts/activate
# MAC/LINUX
source .venv/bin/activate
pip3 install awscli-local
📦 1. Empaquetar la función Lambda
# MAC
zip lambda_function.zip handler.py
# windows click derecho y buscar la opcion para comprimir en zip
📝 2. Crear la función Lambda en LocalStack
awslocal lambda create-function \
  --function-name my-lambda \
  --runtime python3.11 \
  --handler handler.lambda_handler \
  --role arn:aws:iam::000000000000:role/lambda-role \
  --zip-file fileb://lambda_function.zip

awslocal lambda list-functions
🗄️ 3. Crear la tabla donde almacenaremos los mensajes
awslocal dynamodb create-table \
    --table-name MyTableDynamo \
    --attribute-definitions AttributeName=id,AttributeType=S \
    --key-schema AttributeName=id,KeyType=HASH \
    --provisioned-throughput ReadCapacityUnits=5,WriteCapacityUnits=5
📬 4. Crear una cola para enviar y escuchar mensajes
awslocal sqs create-queue --queue-name queue-for-example-lambda
awslocal sqs list-queues
🔑 5. Dar permiso a la Lambda para SQS y DynamoDB
awslocal lambda add-permission \
  --function-name my-lambda  \
  --statement-id sqs-access \
  --action "lambda:*" \
  --principal "*" \
  --source-arn arn:aws:sqs:us-east-1:000000000000:queue-for-example-lambda


awslocal lambda add-permission \
  --function-name my-lambda \
  --statement-id dynamodb-access \
  --action "dynamodb:*" \
  --principal "*" \
  --source-arn arn:aws:dynamodb:us-east-1:000000000000:table/MyTableDynamo
🔗 6. Conectar la SQS con la Lambda para que cada mensaje que llegue se procese por la Lambda
awslocal lambda create-event-source-mapping \
  --function-name my-lambda \
  --event-source-arn arn:aws:sqs:us-east-1:000000000000:queue-for-example-lambda
✉️ 7. Enviar un mensaje de prueba a la SQS
awslocal sqs send-message \
  --queue-url http://localhost:4566/000000000000/queue-for-example-lambda \
  --message-body "{ 'msg': 'mensaje 1'}"

awslocal sqs send-message \
  --queue-url http://localhost:4566/000000000000/queue-for-example-lambda \
  --message-body "{ 'msg': 'mensaje 2'}"

awslocal sqs send-message \
  --queue-url http://localhost:4566/000000000000/queue-for-example-lambda \
  --message-body "{ 'message': 'mensaje 3'}"

awslocal sqs send-message \
  --queue-url http://localhost:4566/000000000000/queue-for-example-lambda \
  --message-body "{ 'message': 'mensaje 4'}"

🌐 Levantar API

🗂️ Crear el S3 de reporte
awslocal s3 mb s3://my-bucket

⚠️ ABRIR OTRA TERMINAL

🐍 Crea un entorno virtual de Python, que es un espacio aislado para trabajar en proyectos.

cd fast-api
python3 -m venv .venv
# Windows
source .venv/scripts/activate
# MAC/LINUX
source .venv/bin/activate

📦 Instalación de librerías:

pip3 install -r requirements.txt

🚦 Comandos para levantar el API:

uvicorn main:app --host 0.0.0.0 --port 8000 --reload

🔔 Llamar al endpoint POST /s3/export para generar un documento en el S3

🧩 Puedes usar la extensión de EchoApi: 1754197421445

INTEGRACIÓN CON TERRAFORM

ingresamos a la carpeta de terraform:

cd terraform

creamos la infra:

terraform init
terraform apply -auto-approve

probamos la infra:

cd ..
cd lambda
source .venv/bin/activate
awslocal sqs send-message \
  --queue-url http://localhost:4566/000000000000/queue-for-example-lambda \
  --message-body "{ 'msg': 'mensaje con infra de terraform'}"

About

examples localstack

Resources

Stars

2 stars

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors