web-dev-qa-db-fra.com

variables d'environnement aws-sam-local

Je suis le readme ici: https://github.com/awslabs/aws-sam-local

J'ai un lambda écrit en python 3.6 et semblable à l'exemple de helloworld: https://github.com/awslabs/aws-sam-local/tree/develop/samples/hello-world/python

template.yml ressemble à cela:

AWSTemplateFormatVersion : '2010-09-09'
Transform: AWS::Serverless-2016-10-31
Description: MyFunction1 API
Resources:
  MyFunction1:
    Type: AWS::Serverless::Function
    Properties:
      FunctionName: MyFunction1
      Handler: lambda_module.lambda_handler
      Runtime: python3.6
      CodeUri: lambda.Zip
      MemorySize: 128
      Timeout: 10
      Policies:
        -AWSLamdbaBasicExecutionRole
      Events:
        BingLambdaEndpoint:
          Type: Api
          Properties:
            Path: MyFunction1/search
            Method: get

J'ai des variables d'environnement dans le lambda mais je ne parviens pas à les câbler au démarrage. La documentation indique que je peux créer un fichier environment.json et ajouter ce qui suit dans la commande invoke: Utiliser l'argument --env-vars de invoke.

Mon fichier d'environnement ressemble à l'exemple et j'obtiens une erreur: Unable to find environment variable: api_key

environment.json ressemble à ceci:

{
  "MyFunction1": {
    "api_key": "123456789",
    "BUCKET_NAME": "testBucket"
  }
}

la commande que je lance est en tant que telle: 

sam local invoke MyFunction1 --env-vars environment_variables.json -e event.json

Quelqu'un peut-il fournir des informations supplémentaires?

7
gotjava2012

Toutes les variables d'environnement que vous souhaitez utiliser avec SAM Local de cette manière doivent exister dans votre modèle SAM. De ce numéro de GitHub :

... SAM Local analyse uniquement les variables d'environnement définies dans le modèle SAM.

Dans le modèle, vous pouvez ne fournir aucune valeur, une chaîne vide ou choisir une valeur par défaut raisonnable. 

Une partie d'un modèle incluant des variables d'environnement:

Resources:
  MyFunction1:
    Type: 'AWS::Serverless::Function'
    Properties:
      .....
      Environment:
        Variables:
          api_key:
          BUCKET_NAME:

Vous pouvez considérer le fichier de variables d’environnement comme un mécanisme permettant de override des variables d’environnement que le modèle "connaît". Cela ne fonctionne pas comme un mécanisme pour injecter des variables d'environnement arbitraires dans le runtime local.

15
Mike Patrick

Assurez-vous que les variables sont déclarées dans template.yml. Un fichier de configuration remplace les variables mais ne crée pas de variables quand elles n'existent pas dans le modèle d'origine.

1
toonsend