AWSでラムダ関数を実行するためにサーバーレスフレームワークを使用しています。
私のserverless.yml
には、SSMからフェッチされる環境変数があります。
コードの統合テストを作成するとき、環境変数を含むコードが必要ですが、これを行うための適切な方法が見つかりません。
テストのためだけにすべての変数定義を複製したくはありません。それらはserverless.ymlですでに定義されています。また、いくつかは秘密であり、ソース制御にコミットできないため、ci環境でも繰り返す必要があります。
serverless-jest-plugin
を使用してみましたが、機能せず、適切に保守されていません。
私が解決策について持っていたアイデア:
sls invoke
にします-これは機能しますが、コードをデバッグできないことを意味し、テストカバレッジがわからず、遅くなります。serverless.yml
を自分で解析し、環境変数をエクスポートします-可能ですが、テストのためだけにSSM変数をプルするロジックを書き直すのは間違っているようです。何か案は?
最終的に使用したソリューションは、 serverless-export-env というサーバーレスプラグインです。
このプラグインを追加した後、serverless export-env
を実行して、解決されたすべての環境変数を.env
ファイルにエクスポートできます。これにより、ssmパラメーターが正しく解決され、統合テストがはるかに簡単になりました。
ところで、.env
ファイルから設定された環境変数を取得するには、 dotenv npmパッケージを使用します。
解決策を見つけるための grishezz へのクレジット
--require
オプションを指定してノードを実行し、.env
ファイルをサーバーレスコマンドに挿入できます。
.env
を使用してpackage.json
を作成し、.env
に変数をリストします。yarn add -D serverless dotenv
によってプロジェクトにサーバーレスとdotenvをインストールします。node -r dotenv/config ./node_modules/.bin/sls invoke
のようなコマンドを実行します。次に、ハンドラーprocess.env.XXX
で環境変数を取得できます。
模擬ユニットテスト、または統合テストのようなものを実行しようとしていますか?
最初のケースでは、環境変数に実際の値は必要ありません。データベース、または環境変数の設定が必要なものをモックします。テストは適切なモックで非常に高速に実行されるため、これは実際には好ましい方法です。
実際にエンドツーエンド/統合のようなアプローチを検討している場合は、sls invoke
のようなことを行いますが、JavaScriptを使用して冗談を言います。したがって、デプロイされたAPIへの通常のネットワーク呼び出しのように。
また、キーをserverless.yml
に保存しないことをお勧めします。代わりにsecret: ${env:MY_SECRET}
構文を試して( https://serverless.com/framework/docs/providers/aws/guide/variables#referencing-environment-variables )、代わりに環境変数を使用してください。 ci/cdビルドサーバーがある場合は、そこにシークレットを保存できます。