Comment puis-je utiliser les variables d'environnement sur AWS Lambda?
Je suis en train d'écrire une application qui je veux courir comme une AWS Lambda fonction, mais aussi de respecter la période de Douze Facteur application des lignes directrices. En particulier La partie III. Config qui nécessite l'utilisation de variables d'environnement pour la configuration.
Cependant, je ne peux pas trouver un moyen de définir les variables d'environnement pour AWS Lambda instances. Quelqu'un peut me pointer dans la bonne direction?
Si il n'est pas possible d'utiliser les variables d'environnement pouvez-vous s'il vous plaît recommander un moyen d'utiliser les variables d'environnement pour le développement local et les ont transformé en vigueur de la configuration d'un système qui peut être consulté en utilisant le code de l'application dans AWS.
Grâce.
- Lambda n'est pas comme les autres fonctions, il y a de nombreuses restrictions. Quels sont exactement vous essayez de configurer?
- Informations d'Identification AWS, Base de données et la comme. Je pourrais inclure une config.fichier json ou autre, mais je préfère tenir à douze facteur de style des variables d'environnement. Rend moins probable le mauvais exposer un secret pour le monde entier via le contrôle de source.
Vous devez vous connecter pour publier un commentaire.
Du 18 novembre 2016, AWS Lambda prend en charge variables d'environnement.
Les variables d'environnement peuvent être spécifié la fois en utilisant la console AWS et AWS CLI. Voici comment vous pouvez créer un Lambda avec un
LD_LIBRARY_PATH
variable d'environnement à l'aide d'AWS CLI:Peut-être la coutume des variables d'environnement, la fonction de nœud-lambda serait de répondre à vos préoccupations:
https://www.npmjs.com/package/node-lambda
https://github.com/motdotla/node-lambda
"AWS Lambda ne permet pas de définir des variables d'environnement de votre fonction, mais dans de nombreux cas, vous devrez configurer votre fonction avec secure valeurs que vous ne voulez pas de vérifier dans le contrôle de version, par exemple une base de données de la chaîne de connexion ou clé de chiffrement. Utiliser l'exemple de déployer.fichier env en combinaison avec l'option --configFile drapeau de définir la valeur qui sera ajoutée à votre compilé une fonction Lambda comme un processus.env variables d'environnement avant qu'il est téléchargé à S3."
Il n'y a pas moyen de configurer les variables d'environnement pour lambda exécution depuis chaque invocation est disjoint et aucune information d'état est stocké. Cependant, il ya des façons d'obtenir ce que vous voulez.
AWS credentials
- vous pouvez éviter de stocker que dans des variables d'environnement. Au lieu de cela accorder les privilèges de votreLambdaExec
rôle. En fait, AWS recommande l'utilisation des rôles à la place des informations d'identification AWS.Database details
: Une suggestion est de le stocker dans un bien connu fichier dans un compartiment privé. Lambda peut télécharger ce fichier, lorsqu'elle est invoquée, lire le contenu qui peut contenir de la base de données et d'autres renseignements. Depuis le seau est privé, les autres ne peuvent pas accéder au fichier. LeLambdaExec
rôle besoins IAM privilèges pour accéder au compartiment privé.process.env
. C'est une honte que ce ne peut être atteint sur Lambda.AWS juste ajouté le support pour la configuration de Lambda fonctions via les paramètres de l'environnement.
Jetez un oeil ici
Nous avons également eu cette exigence pour notre fonction Lambda et nous "résolu" cela en générant un fichier de configuration sur notre plate-forme CI (dans notre cas, c'est CircleCI). Ce fichier est inclus dans l'archive qui est déployé pour Lambda.
Maintenant, dans votre code, vous pouvez inclure ce fichier et utiliser les variables.
Le script que j'utilise pour générer un fichier JSON à partir de CircleCI les variables d'environnement est:
J'aime cette approche, car de cette façon vous n'avez pas à inclure l'environnement des variables spécifiques à votre référentiel.
process.env
avec les variables d'environnement connu pour la CI. Elle exporte une "passer à travers" la fonction du gestionnaire qui appelle tout simplementrequire('./').handler(event, context, done)
d'invoquer le gestionnaire réel. Je puis écrire ce fichier dans le zip répertoire que'${COMMIT_SHA}.js'
et mise à jour de mon lambda fonction pour définir le "gestionnaire" de la propriété à'${COMMIT_SHA}.handler'
.