AWS SAM + LocalStack
En artículos 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 código) Link, en esta ocasión 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 configuración para ejecutarlo localmente. Es una copia del templete.yaml
pero con la configuración para el LocalStack.
El punto más importante es la configuración 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 configuración es util en el código 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 código a continuación. Link
# main/src/clients/dbClient.js
const 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 guía 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.dev6
LocalStack build date: 2024-09-03
LocalStack build git hash: daa45717
Ready.
Instalamos samlocal
En un paso anterior para simplificar separamos los archivos de configuración 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 página de administración 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:
Subscribe to my newsletter
Read articles from Oscar Cortes Bracho directly inside your inbox. Subscribe to the newsletter, and don't miss out.
Written by
Oscar Cortes Bracho
Oscar Cortes Bracho
Cloud Software Engineer