AWS SAM Local を使用するサーバーレスアプリケーションをローカルでテストできます。
AWSにデプロイする もできます。これは明らかにaws cloudformation deploy
と同じフラグをとるので、パラメーターファイルを渡すことができます。アプリケーションシークレット(APIキーなど)。
ただし、ローカルでテストするときにパラメーターファイルを使用する方法について、aws local start-api --help
またはGithubのドキュメントには何も見つかりません。
sam local start-api
の実行時に、テンプレートで使用するパラメーターファイルをどのようにポイントしますか?
--parameter-overrides
スイッチを使用できます。構文は次のようにかなり長くなっています。
sam local start-api --parameter-overrides ParameterKey=Key1,ParameterValue=value1 ParameterKey=Key2,ParameterValue=value2
つまり、各ペアのkeyおよびvalueをcomma区切りで指定する必要があります。
そして、各ペアはスペースで区切られます。
sam local start-api --help
から:
--parameter-overrides Optional. A string that contains
CloudFormation parameter overrides encoded
as key=value pairs. Use the same format as
the AWS CLI, e.g. 'ParameterKey=KeyPairName,
ParameterValue=MyKey ParameterKey=InstanceTy
pe,ParameterValue=t1.micro'
-n
または--env-vars
パラメーターを使用して、JSONファイルの環境変数を関数に渡すこともできるようです。ドキュメントを参照してください: SAM CLIを使用してサーバーレスアプリケーションをローカルでテストする(パブリックベータ版)
つまり、JSONファイルは次のようになります(ドキュメントからコピーした例)。
{
"MyFunction1": {
"TABLE_NAME": "localtable",
"BUCKET_NAME": "testBucket"
},
"MyFunction2": {
"TABLE_NAME": "localtable",
"STAGE": "dev"
},
}
そして、あなたは行うことができます:
$ sam local start-api --env-vars env.json
これは特にラムダ関数の環境変数のためのものですので、あなたが求めているものとは完全には違うかもしれませんか?
私の奇妙な経験は、それがパラメーターの順序に依存するということでした。 Mongoインスタンスを指すSecretKeyとDatabaseUriの2つのパラメーターがありました。最初にDatabaseUriを使用したときは、SecretKeyがロードされておらず、パラメータSecretKeyがないためにビルドが失敗しました。私が本当に必死だったとき、私は最初にSecretKeyを持つパラメータを交換し、それが機能し始めました!
わずかな変更を加えたaws cloudformation deployと同様に、sam deployで--parameter-overridesを使用できます。
前:
sam deploy --template-file packaged.yaml --stack-name example-lambda --capabilities CAPABILITY_IAM --parameter-overrides ParameterKey=SourceS3Bucket ParameterValue=test-data-111
後:
sam deploy --template-file packaged.yaml --stack-name example-lambda --capabilities CAPABILITY_IAM --parameter-overrides SourceS3Bucket=test-data-111
注目すべき変更:sam deployでParameterKey、ParameterValueを明示的に指定する必要はありません。ローカルテストで私を助けます。
それが役に立てば幸い。 :)