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?
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.
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.