AWS SAM + LocalStack

4 min de lectura Ver original en Hashnode
Compartir:

En artculos anteriores he comentado sobre Mimic, un laboratorio de pruebas que he desarrollado con un stack serverless. Actualmente continuo trabajando en mimic y realizando distintas pruebas de herramientas de IaC (Infraestructura como cdigo) Link, en esta ocasin desplegaremos el stack en localstack utilizando AWS Sam como herramienta de IaC.

Configurando AWS sam

Para realizar las pruebas, suelo separar l .yaml para el local y para el del Cloud. El archivo template-local.yaml Link contiene la configuracin para ejecutarlo localmente. Es una copia del templete.yaml pero con la configuracin para el LocalStack.

El punto ms importante es la configuracin local de la DynamoDB:

Globals: Function: Runtime: nodejs18.x Timeout: 40 MemorySize: 256 Environment: Variables: DYNAMO_DB_USE_LOCAL: true DYNAMO_DB_REGION: us-east-1 DYNAMO_DB_END_POINT: https://localhost.localstack.cloud:4566 MIMIC_TABLE: mimic-sam

Esta configuracin es util en el cdigo del cliente de la base de datos. Si la variable DYNAMO_DB_USE_LOCAL est configurado en TRUE, eL cliente de la base de datos tomar la URL del localstack para realizar las consultas a la base y las inserciones como se ve en el cdigo a continuacin. Link

# main/src/clients/dbClient.jsconst getDynamoClient = () =>{ const dynamoLocal = (process.env.DYNAMO_DB_USE_LOCAL == 'True') if (dynamoLocal == true) { return new DynamoDBClient({ region: process.env.DYNAMO_DB_REGION, endpoint: process.env.DYNAMO_DB_END_POINT, }); } //if (client ){ return client} return new DynamoDBClient({ region: process.env.DYNAMO_DB_REGION });}

Levantar LocalStack

Como explique en la entrada de gua de inicio , levantamos el localstack y verificamos que est corriendo correctamente:

 __ _______ __ __ / / ____ _________ _/ / ___// /_____ ______/ /__ / / / __ \/ ___/ __ `/ /\__ \/ __/ __ `/ ___/ //_/ / /___/ /_/ / /__/ /_/ / /___/ / /_/ /_/ / /__/ ,< /_____/\____/\___/\__,_/_//____/\__/\__,_/\___/_/|_| 💻 LocalStack CLI 3.7.0 👤 Profile: default[11:16:12] starting LocalStack in Docker mode 🐳 localstack.py:503 container image not found on host bootstrap.py:1272[11:17:02] download complete bootstrap.py:1276 LocalStack Runtime Log (press CTRL-C to quit) LocalStack version: 3.7.2.dev6LocalStack build date: 2024-09-03LocalStack build git hash: daa45717Ready.

Instalamos samlocal

En un paso anterior para simplificar separamos los archivos de configuracin para los ambientes local y Cloud, ahora instalamos samlocal. samlocal es un wrapper al comando Sam, que permite gestionar de forma independiente el despliegue en ambos ambientes. Link:

pip install aws-sam-cli-local

Con AWS sam , Podemos inicializar u proyecto o desplegar, mantiene las mismas funciones que el sam cli original. En este caso especificamos el archivo al que queremos que utilice como base para el despliegue, que es el archivo que separamos del templarte base y lo configuramos para un despliegue local.

samlocal deploy -t template-local.yaml

El proceso de despliegue se realiza de manera similar a como se realizara en el Cloud.

# Ultimas salidas del despliege local con SAM en localstack... rmissionStage CREATE_IN_PROGRESS AWS::ApiGateway::Stage kSixApiStage - CREATE_COMPLETE AWS::ApiGateway::Stage kSixApiStage - CREATE_COMPLETE AWS::CloudFormation::Stack sam-app - -----------------------------------------------------------------------------------------------------------------------------Successfully created/updated stack - sam-app in us-east-1

Una vez desplegado accediendo a la pgina de administracin de localstack podemos ver los servicios que se desplegaron.

Probando el Stack

Como pruebas verificamos un recurso que hemos insertado en la DynamoDB:

Primero guardamos algunos registros en la base:

curl -X POST \ 'http://zggxllsgd6.execute-api.localhost.localstack.cloud:4566/tlj77ngaiv/mimic' \ --header 'Accept: */*' \ --header 'User-Agent: Thunder Client (https://www.thunderclient.com)' \ --header 'Content-Type: application/json' \ --data-raw '{"name":"Terraform", "age":30, "car":null, "region":"eu-central-1"}'

Verificamos que se guarden los datos

Conclusiones:

Se despleg de manera correcta el stack de referencia mimic en localstack

Se pueden navegar los recursos sin inconveniente accediendo a las lambdas, el API gateway, y los recursos de la DynamoDB

Es importante configurar el archivo .yaml para el despliegue local.

Es interesante seguir probando distintas herramientas de IaC.

Referencias:

https://www.localstack.cloud/

https://aws.amazon.com/es/serverless/sam/


Artículo original: AWS SAM + LocalStack