Estoy implementando un nodo AWS Lambda con Serverless . Debido a los requisitos internos de la institución en la que se ejecutará este código, necesito aprobar certificados adicionales. La única solución que he podido encontrar es pasar NODE_EXTRA_CA_CERTS como argumento CLI. Usar variables ambientales típicas (definidas, por ejemplo, en dotenv ) no funciona porque para ese punto en Node ya se han configurado los certificados.
Mis certificados adicionales están en MyCerts.pem en la raíz del proyecto, y la función de Lambda que intento ejecutar se llama function1 . Ejecutar Lambda localmente con NODE_EXTRA_CA_CERTS=./MyCerts.pem npx serverless invoke local -f function1 -l funciona correctamente. Sin embargo, una vez que implemento en AWS usando npx serverless deploy -v , no puedo encontrar una manera de incluir correctamente estos certificados adicionales, incluso invocando desde la CLI usando NODE_EXTRA_CA_CERTS=./MyCerts.pem npx serverless invoke -f function1 -l .
He intentado todo lo que puedo pensar y estoy perdido. ¿Alguien puede ayudar?
Creo que esto definitivamente debería ser posible en AWS Lambda.
Hay un ejemplo en dev.to [1] que es similar a su caso de uso. Sin embargo, están usando .NET Core y AWS SAM, pero debería ser fácil migrar la solución a serverless y Node.js.
Básicamente, necesitas dos pasos:
[1] https://dev.to/leading-edje/aws-lambda-layer-for-private-certificates-465j
[2] https://www.serverless.com/plugins/serverless-layers
[3] https://www.serverless.com/blog/publish-aws-lambda-layers-serverless-framework
[4] https://www.sinservidor.com/blog/sinservidor-v1.2.0
Como ejemplo vamos a establecer dos variables de entorno en una funcion
aws lambda update-function-configuration --function-name NODE_EXTRA_CA_CERTS \
--environment "Variables={BUCKET=my-bucket,KEY=file.txt}"
Para obtener la configuración actual se usa
aws lambda get-function-configuration --function-name my-function
Aqui vemos si nuestra variable NODE_EXTRA_CA_CERTS fue seteada
También me encontré con este problema y, tomando las entradas de Martin Loper, había establecido la variable de entorno NODE_EXTRA_CA_CERTS con el prefijo /var/task/ y luego la ruta dentro de mi base de código lambda donde se encuentra realmente el certificado. por ejemplo, me gustaría /var/task/certs/myCustomCA.pem si tuviera una carpeta de certs en mi lambda con myCustomCA.pem .