Localstack desordena las variables de entorno de Lambda que contienen: (dos puntos)
Estoy utilizando localstack con docker-compose.
version: '3.8'
localstack:
container_name: localstack
image: localstack:0.12.11
volumes:
- "/var/run/docker.sock:/var/run/docker.sock"
ports:
- "4566:4566"
environment:
SERVICES: sqs,lambda
LAMBDA_EXECUTOR: docker
DOCKER_HOST: unix:///var/run/docker.sock
DEBUG: "1"
ENFORCE_IAM: "1"
healthcheck:
test: [ "CMD-SHELL", "awslocal sqs list-queues && awslocal lambda list-functions" ]
interval: 10s
Usando terraform 0.11.15, estoy configurando la variable de entorno para el lambda de la siguiente manera:
resource "aws_lambda_function" "lambda" {
function_name = "lambda"
role = ""
filename = "${data.archive_file.pack_lambda_code.output_path}"
source_code_hash = "${data.archive_file.pack_lambda_code.output_base64sha256}"
handler = "#HIDDEN#"
runtime = "dotnetcore3.1"
timeout = 60
environment {
variables = {
CategoryId = "123"
"Types:Apples" = "ABC"
}
}
}
Necesito pasar una variable de entorno como un mapa al Lambda, por eso estoy declarando “Types:Apples” de esa manera.
El problema es que Localstack pasa esta variable de entorno al nuevo contenedor de docker en el que vivirá el Lambda con este argumento -e Types:Apples=$Types:Apples
, lo que resulta en el siguiente valor de la variable de entorno dentro del Lambda:
Types
Apples = :Apples
Buscando una solución o solución alternativa.
davy.ai
Una posible solución alternativa para este problema es usar dos guiones bajos en lugar de dos puntos en la clave de la variable de entorno. Por ejemplo, en lugar de declarar
"Types:Apples"
, se puede declarar"Types__Apples"
. Esto debería evitar que el dos puntos sea interpretado como un carácter especial y cause que la variable de entorno sea incorrectamente pasada al contenedor de Docker.Otra opción podría ser establecer la variable de entorno directamente en el contenedor de Docker en lugar de pasarla a través de Localstack. Esto requeriría modificar el Dockerfile usado para construir el contenedor y luego reconstruirlo. Una vez que la variable de entorno esté configurada dentro del contenedor, debería ser accesible para la Lambda sin problemas.
También podría valer la pena verificar si hay alguna actualización de Localstack o de la imagen de Docker que pueda abordar este problema. Alternativamente, contactar a los desarrolladores de Localstack o de la imagen de Docker podría proporcionar más información o una posible solución.