私はここのreadmeをフォローしています: https://github.com/awslabs/aws-sam-local
私はラムダをpython 3.6で書かれており、そのhelloworldの例に似ています: https://github.com/awslabs/aws-sam-local/tree/develop/ samples/hello-world/python
template.ymlは次のようになります。
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
ラムダ内に環境変数がありますが、起動時にそれらを接続できません。ドキュメントには、environments.jsonファイルを作成し、invokeコマンドに以下を追加できると書かれています。--env-vars引数をinvokeに使用します
私の環境ファイルは例のように見え、エラーが発生します:Unable to find environment variable: api_key
environment.jsonは次のようになります。
{
"MyFunction1": {
"api_key": "123456789",
"BUCKET_NAME": "testBucket"
}
}
私が実行するコマンドは次のとおりです:
sam local invoke MyFunction1 --env-vars environment_variables.json -e event.json
誰でも追加の洞察を提供できますか?
この方法でSAM Localで使用する環境変数は、SAMテンプレートに存在する必要があります。 このGitHubの問題 から:
... SAM Localは、SAMテンプレートで定義された環境変数のみを解析します。
テンプレートでは、値を指定しないか、空の文字列を指定するか、適切なデフォルトを選択できます。
環境変数を含むテンプレートの一部:
Resources:
MyFunction1:
Type: 'AWS::Serverless::Function'
Properties:
.....
Environment:
Variables:
api_key:
BUCKET_NAME:
環境変数ファイルは、テンプレートが「知っている」環境変数をoverrideするメカニズムと考えることができます。ローカルランタイムに任意の環境変数を注入するメカニズムとしては機能しません。
変数がtemplate.ymlで宣言されていることを確認してください。構成ファイルは変数を上書きしますが、元のテンプレートに存在しない変数は作成しません。