Utilisation des variables d’environnement AWS Lambda - AWS Lambda

Utilisation des variables d’environnement AWS Lambda

Vous pouvez utiliser des variables d’environnement pour ajuster le comportement de votre fonction sans mettre à jour le code. Une variable d’environnement est une paire de chaînes stockées dans la configuration spécifique à la version d’une fonction. L’environnement d’exécution de Lambda met les variables d’environnement à la disposition de votre code et définit les variables d’environnement supplémentaires qui contiennent des informations sur la fonction et la demande d’appel.

Note

Pour augmenter la sécurité de la base de données, nous vous recommandons d’utiliser AWS Secrets Manager à la place des variables d’environnement pour stocker les informations d’identification de base de données. Pour plus d’informations, consultez Configuration de l’accès à une base de données pour une fonction Lambda.

Les variables d’environnement ne sont pas évaluées avant l’invocation de la fonction. Toute valeur que vous définissez est considérée comme une chaîne littérale et non développée. Effectuez l’évaluation de la variable dans le code de votre fonction.

Configuration des variables d’environnement

Vous définissez des variables d’environnement sur la version non publiée de votre fonction. Lorsque vous publiez une version, les variables d’environnement sont verrouillées pour cette version ainsi que d’autres configurations spécifiques à la version.

Vous créez une variable d’environnement pour votre fonction en définissant une clé et une valeur. Votre fonction utilise le nom de la clé pour récupérer la valeur de la variable d’environnement.

Pour définir des variables d’environnement dans la console Lambda

  1. Ouvrez la page Functions (Fonctions) de la console Lambda.

  2. Choisissez une fonction.

  3. Choisissez Configuration , puis Variables d’environnement.

  4. Sous Variables d’environnement, choisissez Modifier.

  5. Choisissez Ajouter une variable d’environnement.

  6. Entrez une clé et une valeur.

    Prérequis

    • Les clés commencent par une lettre et comportent au moins deux caractères.

    • Les clés contiennent uniquement des lettres, des chiffres et le caractère de soulignement (_).

    • Les clés ne sont pas réservées par Lambda.

    • La taille totale de toutes les variables d’environnement ne dépasse pas 4 Ko.

  7. Choisissez Enregistrer.

Configuration de variables d’environnement avec l’API

Pour gérer les variables d’environnement avec AWS CLI ou le kit SDK AWS, utilisez les opérations d’API suivantes.

L’exemple suivant définit deux variables d’environnement sur une fonction nommée my-function.

aws lambda update-function-configuration --function-name my-function \ --environment "Variables={BUCKET=my-bucket,KEY=file.txt}"

Lorsque vous appliquez des variables d’environnement avec la commande update-function-configuration, l’ensemble du contenu de la structure Variables est remplacé. Pour conserver les variables d’environnement existantes lorsque vous en ajoutez une nouvelle, incluez toutes les valeurs existantes dans votre demande.

Pour obtenir la configuration actuelle, utilisez la commande get-function-configuration.

aws lambda get-function-configuration --function-name my-function

Vous devriez voir la sortie suivante:

{ "FunctionName": "my-function", "FunctionArn": "arn:aws:lambda:us-east-2:123456789012:function:my-function", "Runtime": "nodejs12.x", "Role": "arn:aws:iam::123456789012:role/lambda-role", "Environment": { "Variables": { "BUCKET": "my-bucket", "KEY": "file.txt" } }, "RevisionId": "0894d3c1-2a3d-4d48-bf7f-abade99f3c15", ... }

Pour vous assurer que les valeurs ne changent pas entre la lecture et la mise à jour de la configuration, vous pouvez transmettre l’ID de révision de la sortie de get-function-configuration en tant que paramètre à update-function-configuration.

Pour configurer la clé de chiffrement d’une fonction, définissez l’option KMSKeyARN.

aws lambda update-function-configuration --function-name my-function \ --kms-key-arn arn:aws:kms:us-east-2:123456789012:key/055efbb4-xmpl-4336-ba9c-538c7d31f599

Exemple de scénario pour les variables d’environnement

Vous pouvez utiliser des variables d’environnement pour personnaliser le comportement des fonctions dans vos environnements de test et de production. Vous pouvez par exemple créer deux fonctions avec le même code mais une configuration différente. Une fonction se connecte à une base de données de test et l’autre à une base de données de production. Dans ce cas, vous utilisez des variables d’environnement pour indiquer à la fonction le nom d’hôte, ainsi que d’autres détails de connexion pour la base de données.

L’exemple suivant montre comment définir l’hôte de la base de données et le nom de base de données en tant que variables d’environnement.


        Variables d’environnement dans la console Lambda.

Si vous souhaitez que votre environnement de test génère plus d’informations de débogage que l’environnement de production, vous pouvez définir une variable d’environnement pour configurer votre environnement de test de manière à utiliser une journalisation plus approfondie ou un suivi plus détaillé.

Récupérer les variables d’environnement

Pour récupérer les variables d’environnement dans le code de votre fonction, utilisez la méthode standard pour votre langage de programmation.

Node.js
let region = process.env.AWS_REGION
Python
import os region = os.environ['AWS_REGION']
Note

Dans certains cas, vous devrez peut-être utiliser le format suivant :

region = os.environ.get('AWS_REGION')
Ruby
region = ENV["AWS_REGION"]
Java
String region = System.getenv("AWS_REGION");
Go
var region = os.Getenv("AWS_REGION")
C#
string region = Environment.GetEnvironmentVariable("AWS_REGION");
PowerShell
$region = $env:AWS_REGION

Lambda stocke les variables d’environnement en toute sécurité en les chiffrant au repos. Vous pouvez Configurer Lambda afin d’utiliser une clé de chiffrement différente, chiffrer les valeurs des variables d’environnement côté client, ou définir des variables d’environnement dans un modèle AWS CloudFormation avec AWS Secrets Manager.

Variables d’environnement d’exécution définies

Les runtimes Lambda définissent plusieurs variables d’environnement lors de l’initialisation. La plupart des variables d’environnement fournissent des informations sur la fonction ou l’exécution. Les clés de ces variables d’environnement sont réservées et ne peuvent pas être définies dans la configuration de la fonction.

Variables d’environnement réservées

  • _HANDLER – Emplacement de gestionnaire configuré sur la fonction.

  • _X_AMZN_TRACE_IDEn-tête de suivi X-Ray.

  • AWS_REGION – Région AWS où la fonction Lambda est exécutée.

  • AWS_EXECUTION_ENVIdentifiant d’exécution, doté du préfixe AWS_Lambda_ (par exemple, AWS_Lambda_java8). Cette variable d’environnement n’est pas définie pour les environnements d’exécution personnalisés (par exemple, les environnements d’exécution qui utilisent les identifiants provided ou provided.al2).

  • AWS_LAMBDA_FUNCTION_NAME – Nom de la fonction.

  • AWS_LAMBDA_FUNCTION_MEMORY_SIZE – Quantité de mémoire disponible pour la fonction en Mo.

  • AWS_LAMBDA_FUNCTION_VERSION – Version de la fonction en cours d’exécution.

    AWS_LAMBDA_INITIALIZATION_TYPE – Type d’initialisation de la fonction, à savoir on-demand ou provisioned-concurrency. Pour plus d’informations, consultez Configuration de la simultanéité provisionnée.

  • AWS_LAMBDA_LOG_GROUP_NAME,AWS_LAMBDA_LOG_STREAM_NAME – Nom du groupe Amazon CloudWatch Logs et flux pour la fonction.

  • AWS_ACCESS_KEY, AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY, AWS_SESSION_TOKEN – Clés d’accès obtenues du rôle d’exécution de la fonction.

  • AWS_LAMBDA_RUNTIME_API – (exécution personnalisée) Hôte et port de l’API d’exécution..

  • LAMBDA_TASK_ROOT – Chemin d’accès du code de la fonction Lambda.

  • LAMBDA_RUNTIME_DIR – Chemin d’accès des bibliothèques de l’environnement d’exécution.

  • TZ – Fuseau horaire de l’environnement (UTC). L’environnement d’exécution utilise NTP pour synchroniser l’horloge système.

Les variables d’environnement supplémentaires suivantes ne sont pas réservées et peuvent être étendues dans la configuration de la fonction.

Variables d’environnement non réservées

  • LANG – Paramètres régionaux de l’environnement d’exécution (en_US.UTF-8).

  • PATH – Chemin d’exécution (/usr/local/bin:/usr/bin/:/bin:/opt/bin).

  • LD_LIBRARY_PATH – Chemin de la bibliothèque système (/lib64:/usr/lib64:$LAMBDA_RUNTIME_DIR:$LAMBDA_RUNTIME_DIR/lib:$LAMBDA_TASK_ROOT:$LAMBDA_TASK_ROOT/lib:/opt/lib).

  • NODE_PATH – (Node.js) Chemin d’accès de la bibliothèque Node.js (/opt/nodejs/node12/node_modules/:/opt/nodejs/node_modules:$LAMBDA_RUNTIME_DIR/node_modules).

  • PYTHONPATH – (Python 2.7, 3.6, 3.8) Chemin d’accès de la bibliothèque Python ($LAMBDA_RUNTIME_DIR).

  • GEM_PATH – (Ruby) Chemin d’accès de la bibliothèque Ruby ($LAMBDA_TASK_ROOT/vendor/bundle/ruby/2.5.0:/opt/ruby/gems/2.5.0).

  • AWS_XRAY_CONTEXT_MISSING – Pour le suivi X-Ray, Lambda définit cette valeur sur LOG_ERROR pour éviter de générer des erreurs d’environnement d’exécution à partir du kit SDK X-Ray.

  • AWS_XRAY_DAEMON_ADDRESS – Pour le suivi X-Ray, adresse IP et le port du démon X-Ray.

  • AWS_LAMBDA_DOTNET_PREJIT – Pour l’environnement d’exécution .NET 3.1, définissez cette variable pour activer ou désactiver les optimisations d’environnement d’exécution spécifiques de .NET 3.1. Les valeurs incluent always, never et provisioned-concurrency. Pour plus d’informations, consultez Configuration de la simultanéité provisionnée.

Les valeurs d’exemple affichées reflètent les derniers moteurs d’exécution. La présence de variables spécifiques ou leurs valeurs peuvent varier dans les anciens environnements d’exécution.

Sécurisation des variables d’environnement

Pour sécuriser vos variables d’environnement, vous pouvez utiliser le chiffrement côté serveur pour protéger vos données au repos, et le chiffrement côté client pour protéger vos données en transit.

Note

Pour augmenter la sécurité de la base de données, nous vous recommandons d’utiliser AWS Secrets Manager à la place des variables d’environnement pour stocker les informations d’identification de base de données. Pour plus d’informations, consultez Configuration de l’accès à une base de données pour une fonction Lambda.

Sécurité au repos

Lambda fournit toujours le chiffrement côté serveur au repos grâce à une AWS KMS key. Par défaut, Lambda utilise une Clé gérée par AWS. Si ce comportement par défaut convient à votre flux de travail, vous ne devrez pas configurer autre chose. Lambda crée la Clé gérée par AWS dans votre compte et gère les autorisations pour vous. AWS ne vous facture pas l’utilisation de cette clé.

Si vous préférez, vous pouvez fournir une clé gérée par le client AWS KMSà la place. Vous pouvez procéder ainsi pour contrôler la rotation de la clé KMS ou pour répondre aux exigences de votre organisation en matière de gestion des clés KMS. Si vous utilisez une clé gérée par le client, seuls les utilisateurs de votre compte ayant accès à la clé KMS peuvent afficher ou gérer les variables d’environnement sur la fonction.

Les clés gérés par le client entraînent des frais AWS KMS standard. Pour plus d’informations sur la tarification, consultez tarification AWS Key Management Service dans les pages de produits AWS KMS.

Sécurité pendant le transit

Pour plus de sécurité, vous pouvez activer les assistants pour le chiffrement en transit, ce qui garantit que vos variables d’environnement sont chiffrées côté client pour une meilleure protection pendant le transit.

Pour configurer le chiffrement de vos variables d’environnement

  1. Utilisez la AWS Key Management Service(AWS KMS) pour créer toutes les clés gérées par le client que Lambda utilisera pour le chiffrement côté serveur et côté client. Pour en savoir plus, consultez Création des clés dans le Guide du développeur AWS Key Management Service.

  2. À l’aide de la console Lambda, accédez à la page Modifier les variables d’environnement.

    1. Ouvrez la page Functions (Fonctions) de la console Lambda.

    2. Choisissez une fonction.

    3. Choisissez Configuration, puis Variables d’environnement dans la barre de navigation de gauche.

    4. Dans la section Variables d’environnement), choisissez Modifier.

    5. Développez Configuration du chiffrement.

  3. Le cas échéant, activez les assistants de chiffrement de la console afin qu’ils utilisent le chiffrement côté client pour protéger vos données en transit.

    1. Sous Chiffrement pendant le transit, choisissez Activer les assistants pour le chiffrement pendant le transit.

    2. Pour chaque variable d’environnement pour laquelle vous souhaitez activer les assistants de chiffrement de la console, choisissez Encrypt (Chiffrer) en regard de la variable d’environnement.

    3. Sous AWS KMS key de chiffrement pendant le transit, choisissez une clé gérée par le client que vous avez créée au début de cette procédure.

    4. Choisissez Politique de rôle d’exécution et copiez la politique. Cette politique octroie au rôle d’exécution de votre fonction l’autorisation de déchiffrer les variables d’environnement.

      Enregistrez cette politique, car vous l’utiliserez à la dernière étape de cette procédure.

    5. Ajoutez le code à votre fonction qui déchiffre les variables d’environnement . Choisissez Déchiffrer l’extrait de secrets pour obtenir un exemple.

  4. Vous pouvez indiquer votre clé gérée par le client pour le chiffrement au repos.

    1. Choisissez Utiliser une clé principale client.

    2. Choisissez une clé gérée par le client que vous avez créée au début de cette procédure.

  5. Choisissez Enregistrer.

  6. Configurer des autorisations

    Si vous utilisez une clé gérée par le client avec chiffrement côté serveur, octroyez des autorisations à tous les utilisateurs ou rôles AWS Identity and Access Management (IAM) que vous souhaitez pouvoir afficher ou pour gérer des variables d’environnement sur la fonction. Pour plus d’informations, consultez Gestion des autorisations sur votre clé de chiffrement KMS côté serveur.

    Si vous activez le chiffrement côté client pour la sécurité pendant le transit, votre fonction doit disposer d’une autorisation pour appeler l’opération d’API kms:Decrypt. Ajoutez la politique que vous avez précédemment enregistrée dans cette procédure au rôle d’exécution de la fonction.

Gestion des autorisations sur votre clé de chiffrement KMS côté serveur

Aucune autorisation AWS KMS n’est requise afin que votre utilisateur ou le rôle d’exécution de la fonction puisse utiliser la clé de chiffrement par défaut. Pour utiliser une clé gérée par le client, vous devez disposer des autorisations appropriées pour utiliser la clé. Lambda utilise vos autorisations pour créer un octroi sur la clé. Cela permet à Lambda de l’utiliser pour le chiffrement.

  • kms:ListAliases – Pour afficher les clés dans la console Lambda.

  • kms:CreateGrant, kms:Encrypt – Pour configurer une clé gérée par le client sur une fonction.

  • kms:Decrypt – Pour afficher et gérer des variables d’environnement chiffrées à l’aide d’une clé gérée par le client.

Vous pouvez obtenir ces autorisations à partir de votre compte d’utilisateur ou de la stratégie d’autorisation basée sur une ressource d’une clé. ListAliases est fourni par les politiques gérées pour Lambda. Les stratégies de clé accordent les autorisations restantes aux utilisateurs du groupe Key users (Utilisateurs de clés).

Les utilisateurs sans autorisation Decrypt peuvent gérer les fonctions, mais ils ne peuvent pas afficher les variables d’environnement ni les gérer dans la console Lambda. Pour empêcher un utilisateur d’afficher des variables d’environnement, ajoutez une instruction aux autorisations de cet utilisateur afin de refuser l’accès à la clé par défaut, à une clé gérée par le client ou à toutes les clés.

Exemple Politique IAM – Refuser l’accès en fonction de l’ARN de la clé

{ "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor0", "Effect": "Deny", "Action": [ "kms:Decrypt" ], "Resource": "arn:aws:kms:us-east-2:123456789012:key/3be10e2d-xmpl-4be4-bc9d-0405a71945cc" } ] }

          Message d’erreur pour utilisateur sans autorisations de déchiffrement dans la console Lambda.

Pour en savoir plus sur la gestion des autorisations de clés, consultez Utilisation des politiques de clé dans AWS KMS que vous trouverez dans le guide du développeur AWS Key Management Service.

Exemples de code et de modèles

Des exemples d’applications dans le référentiel GitHub de ce manuel illustrent l’utilisation de variables d’environnement dans le code et les modèles AWS CloudFormation de fonctions.

Exemples d’applications

  • Fonction vide – Créez une fonction et une rubrique Amazon SNS dans le même modèle. Transmettez le nom de la rubrique à la fonction dans une variable d’environnement. Lisez les variables d’environnement dans le code (plusieurs langues).

  • RDS MySQL – Créez un VPC et une instance de base de données Amazon RDS dans un modèle, avec un mot de passe stocké dans Secrets Manager. Dans le modèle d’application, importez les détails de la base de données à partir de la pile VPC, lisez le mot de passe à partir de Secrets Manager, et transmettez l’ensemble de la configuration de connexion à la fonction dans les variables d’environnement.