Estoy escribiendo una aplicación con la que quiero que se ejecute como una de AWS Lambda función, pero también se adhieran a las Doce del Factor de aplicación de las directrices. En particular La parte III. Config que requiere el uso de variables ambientales para la configuración.

Sin embargo, no puedo encontrar una manera para establecer las variables de entorno para AWS Lambda instancias. Puede alguien me apunte en la dirección correcta?

Si no es posible el uso de variables ambientales puede usted por favor recomendar una manera de utilizar las variables de entorno para el desarrollo local y los han transformado en un válido sistema de configuración que se puede acceder usando el código de la aplicación en AWS.

Gracias.

  • Lambda no es como otras funciones, hay muchas restricciones. Lo que exactamente están tratando de configurar?
  • Credenciales de AWS, detalles de Base de datos y similares. Podría incluir una config.archivo json o similar, pero me gustaría mucho más palo a doce factor de estilo de env variables. Hace que sea menos probable enfermo exponer un secreto para el mundo a través de control de código fuente.
InformationsquelleAutor dannybrown | 2016-03-26

5 Comentarios

  1. 16

    El 18 de noviembre de 2016, AWS Lambda soporta variables de entorno.

    Variables de entorno pueden ser especificado utiliza la consola de AWS y de la CLI de AWS. Esta es la manera de crear un Lambda con un LD_LIBRARY_PATH variable de entorno mediante la CLI de AWS:

    aws lambda create-function \
      --region us-east-1
      --function-name myTestFunction
      --zip-file fileb://path/package.zip
      --role role-arn
      --environment Variables={LD_LIBRARY_PATH=/usr/bin/test/lib64}
      --handler index.handler
      --runtime nodejs4.3
      --profile default
    
  2. 5

    Tal vez la costumbre de variables de entorno’ función de nodo-lambda iba a responder a sus inquietudes:

    https://www.npmjs.com/package/node-lambda

    https://github.com/motdotla/node-lambda

    «AWS Lambda no permite establecer variables de entorno para su función, pero en muchos casos, usted tendrá que configurar su función con valores seguros de que usted no desee comprobar en el control de versión, por ejemplo una base de datos de la cadena de conexión o la clave de cifrado. Utilizar el ejemplo de la implementación.env archivo en combinación con la … con el configFile bandera para establecer los valores que se antepone a su compilado función Lambda como proceso.env variables de entorno antes de que se cargan a S3.»

  3. 4

    No hay manera de configurar env variables para lambda de ejecución, ya que cada invocación es distinto, y el estado no se almacena la información. Sin embargo, hay maneras de lograr lo que desea.

    AWS credentials – usted puede evitar el almacenamiento que en env variables. En lugar de conceder los privilegios de su LambdaExec papel. De hecho, AWS recomienda el uso de funciones en lugar de credenciales de AWS.

    Database details: Una sugerencia es para guardarlo en un archivo conocidos en un depósito privado. Lambda puede descargar el archivo, cuando se invoca, leer el contenido que puede contener datos de base de datos y otra información. Desde el cubo es privado, los demás no pueden tener acceso al archivo. El LambdaExec función de las necesidades de IAM privilegios para acceder al depósito privado.

    • KMS es mejor (y recomendado?) la solución en mi humilde opinión, no es un ejemplo aquí
    • sí, me olvidé de mencionar KMS. Es una buena solución, pero se trata de lidiar con AWS claves y secretos que me gustaría evitar. Usted necesidad de mantener el archivo. Las funciones de IAM son fáciles de revocar en comparación con las credenciales almacenadas en un archivo.
    • Archivo en S3 no está cifrada, esta es mi preocupación. Yo podría ser paranoico, pero siendo a la parrilla por infosec, usted sabe.
    • Usted puede elegir el lado del servidor o del lado del cliente de cifrado. Yo uso todo el tiempo. docs.aws.amazon.com/AmazonS3/latest/dev/UsingEncryption.html
    • Bonito, gracias por esto.
    • El problema con KMS en relación a esta pregunta es que no requiere cambios en el código. Este código debe ser capaz de ejecutar en la no-AWS sistemas demasiado, y lo hace utilizando process.env. Es una lástima que esto no se puede conseguir en Lambda.

  4. 2

    AWS acaba de agregar soporte para la configuración de las funciones Lambda a través de los parámetros del entorno.
    Echa un vistazo aquí

  5. 1

    También tuvimos este requisito para nuestra función Lambda y nosotros «resuelto» esto mediante la generación de un env archivo en nuestra CI de la plataforma (en nuestro caso, este es CircleCI). Este archivo se incluye en el archivo que se ha implementado a Lambda.
    Ahora en el código que puede incluir este archivo y el uso de las variables.

    El script que utilizo para generar un archivo JSON de CircleCI las variables de entorno es:

    cat >dist/env.json <<EOL
    {
    "CLIENT_ID": "$CLIENT_ID",
    "CLIENT_SECRET": "$CLIENT_SECRET",
    "SLACK_VERIFICATION_TOKEN": "$SLACK_VERIFICATION_TOKEN",
    "BRANCH": "$CIRCLE_BRANCH"
    }
    EOL
    

    Me gusta este enfoque, porque de esta manera usted no tiene que incluir el entorno de variables específicas en su repositorio.

    • Yo hago algo similar a esto excepto tengo mi CI crear un contenedor de archivo JavaScript que rellena process.env con las variables de entorno conocido para el CI. Exporta un «pass through» en función de controlador que simplemente llama a require('./').handler(event, context, done) para invocar el controlador real. Yo, a continuación, escribir el archivo de nivel superior zip directorio como '${COMMIT_SHA}.js' y actualizar mi función lambda para establecer el «controlador» de la propiedad a '${COMMIT_SHA}.handler'.
    • idea genial!

Dejar respuesta

Please enter your comment!
Please enter your name here