LocalStack: AWS local para pruebas con Docker

  • AWS
AWS - Docker - LocalStack

LocalStack es un test/mocking framework para el desarrollo de aplicaciones en la nube que combina kinesalite/dynalite y moto, ElasticMQ y otros.

Por el momento, el proyecto se centra principalmente en desarrollar el stack de AWS. LocalStack puedes ejecutarlo en su entorno local sin siquiera tener una cuenta de AWS y comenzar a probar localmente.

En esta publicación, aprenderá a:

  • Crear un perfil de AWS con la CLI de AWS.
  • Ejecutar LocalStack en un contenedor Docker.
  • Acceder a la interfaz de usuario del panel de LocalStack.
  • Ejecutar algunos comandos AWS CLI con LocalStack.

Servicios de LocalStack

LocalStack viene en dos sabores: una edición básica gratuita y de código abierto, y una Pro Edition con funciones y soporte ampliados.

Como puede ver, el primero es gratuito y puede ejecutarlo en su máquina local y también el segundo, sin embargo, debe pagar una suscripción mensual y establecer una clave en su instalación para usarlo.

Identifiquemos qué servicios proporciona LocalStack en cada edición.

Base Edition (Community Edition)Pro Edition
API Gateway at http://localhost:4567
Kinesis at http://localhost:4568
DynamoDB at http://localhost:4569
DynamoDB Streams at http://localhost:4570
S3 at http://localhost:4572
Firehose at http://localhost:4573
Lambda at http://localhost:4574
SNS at http://localhost:4575
SQS at http://localhost:4576
Redshift at http://localhost:4577
Elasticsearch Service at http://localhost:4578
SES at http://localhost:4579
Route53 at http://localhost:4580
CloudFormation at http://localhost:4581
CloudWatch at http://localhost:4582
SSM at http://localhost:4583
SecretsManager at http://localhost:4584
StepFunctions at http://localhost:4585
CloudWatch Logs at http://localhost:4586
EventBridge (CloudWatch Events) at http://localhost:4587
STS at http://localhost:4592
IAM at http://localhost:4593
EC2 at http://localhost:4597
KMS at http://localhost:4599
API Gateway V2 (WebSockets support)
AppSync
Athena
CloudFront
CloudTrail
Cognito
ECS/EKS
ElastiCache
EMR
IoT
Lambda Layers
RDS
XRay
Interactive UIs to manage resources
Test report dashboards

Para ver más información sobre cómo crear una cuenta en https://app.localstack.cloud/ (no se requiere tarjeta de crédito), en el sitio web, por ejemplo, encontrará información sobre cómo configurarla cuando use Pro Edition. Puede acceder a https://localstack-community.slack.com/ si lo desea.

Prerrequisitos

Es posible instalar LocalStack usando Docker o Python, sin embargo, la forma recomendada de instalación es usando Docker. Este tutorial asume que LocalStack se instalará en una máquina con Windows:

  • Windows 10 Pro, Enterprise o Educational (Build 15063 o superior).
  • Hyper-V y característica Windows Containers habilitada.

Puesta en marcha

Crear un perfil de AWS

  1. Primero, descargaremos AWS CLI desde aquí.
  2. A continuación, deberíamos crear un perfil AWS Profile, hágalo en una terminal PowerShell. Establezca region en us-east-1 (esto es importante cuando se utilizan algunos servicios como SQS o SNS).
aws configure --profile stack-profile

Luego, cree el perfil, será similar (ruta de acceso del archivo C:\Users\yourUserName\.aws\credentials) a:

[stack-profile]
aws_access_key_id = temp
aws_secret_access_key = temp
region=us-east-1

Preparando el contenedor LocalStack

  1. Comience a configurar Docker, para ello, lo descargamos e instalamos desde aquí.
  2. Después de instalarlo, verifique la instalación de Docker con el siguiente comando (use Powershell).
docker --version
  1. Una vez que Docker se esté ejecutando, extraiga la imagen LocalStack. El tamaño de la imagen es de casi 500 mb y la descompresión es de alrededor de 1 gb.
docker pull localstack/localstack:0.11.0

Para evitar problemas cuando el contenedor se inicia, la mejor opción es crear una carpeta con la siguiente estructura:

Tree view
  1. Cree docker-compose.yml, este tendrá la configuración para crear el contenedor utilizando una imagen LocalStack y también los servicios para comenzar (línea 13) y la asignación de puertos entre el contenedor y el host (líneas 8 y 7). Las líneas 27 y 28 tienen la ruta para guardar información para usar cuando se reinicia el contenedor y así mantener su estado. Para obtener una definición detallada completa del entorno, consulte la documentación oficial aquí.
version: '2.1'

services:
  localstack-container:
    container_name: "localstack-container"
    privileged: true
    image: localstack/localstack:0.11.0
    ports:
      - "4566-4599:4566-4599"
      - "8081:8081"
    # https://github.com/localstack/localstack#configurations
    environment:
      - SERVICES=s3,sqs
      - DEBUG=1
      - DATA_DIR=/tmp/localstack/data
      - PORT_WEB_UI=8081
        # LAMBDA_EXECUTOR: Method to use for executing Lambda functions. Possible values are:
        #   local: run Lambda functions in a temporary directory on the local machine
        #   docker: run each function invocation in a separate Docker container
        #   docker-reuse: create one Docker container per function and reuse it across invocations
      - LAMBDA_EXECUTOR=docker-reuse
      - KINESIS_ERROR_PROBABILITY=${KINESIS_ERROR_PROBABILITY- }
      - DOCKER_HOST=unix:///var/run/docker.sock
      - DEFAULT_REGION=us-east-1
      - START_WEB=1
    volumes:
      - "./tmp/localstack:/tmp/localstack"
      - "./tmp/localstack/run/docker.sock:/var/run/docker.sock"
  1. Luego, ejecute el contenedor LocalStack, para ello ubiquese en donde está el archivo docker-compose.yml y luego ejecute.
docker-compose up
  1. Detenga el contenedor LocalStack cuando no lo use.
docker-compose down

Interactuando con LocalStack

La Community Editio de LocalStack proporciona una interfaz de usuario web simple, y puede consultarla en http://localhost:8081/. Si todo está correcto, verá algunos como este.

This image has an empty alt attribute; its file name is localhost8081-1024x234.png

En esta página, verá más información cuando comience a interactuar con algunos servicios, por ejemplo, S3, SQS, etc.

Después de esto, es posible comenzar a probar su aplicación utilizando LocalStack o AWS CLI para interactuar con algunos servicios.

Asegúrese de especificar el endpoint y el perfil de acuerdo con cada servicio que utilice.

Testing LocalStack y S3

Lo más notable es la posiblidad de interactuar con LocalStack usando AWS CLI, aquí hay algunos comandos para ello.

Crear un bucket

aws --profile stack-profile --endpoint-url=http://localhost:4572 s3 mb s3://yourbucket

Para listar el bucket creado recientemente

aws --profile stack-profile --endpoint-url=http://localhost:4572 s3 ls

Listar archivos en un bucket (puede usar el navegador http://localhost:4572/yourbucket también)

aws --profile stack-profile --endpoint-url=http://localhost:4572 s3 ls yourbucket

Conclusiones

Como resultado de todos estos pasos, ya puedes a empezar a ejecutar una prueba de integración de una API web que carga y descarga archivos utilizando los servicios S3 o enviar y leer mensajes de una cola y mucho mas. En esta entrada encontrarás cómo ejecutar LocalStack usando DotNet en lugar de un archivo Docker Compose.

Recursos adicionales

Ver o descargar código de muestra para esta publicación.


Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *