AWS SAM + LocalStack
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://aws.amazon.com/es/serverless/sam/
Artículo original: AWS SAM + LocalStack