web-dev-qa-db-ja.com

テストでserverless.ymlで定義された環境変数を取得する方法

AWSでラムダ関数を実行するためにサーバーレスフレームワークを使用しています。

私のserverless.ymlには、SSMからフェッチされる環境変数があります。

コードの統合テストを作成するとき、環境変数を含むコードが必要ですが、これを行うための適切な方法が見つかりません。

テストのためだけにすべての変数定義を複製したくはありません。それらはserverless.ymlですでに定義されています。また、いくつかは秘密であり、ソース制御にコミットできないため、ci環境でも繰り返す必要があります。

serverless-jest-pluginを使用してみましたが、機能せず、適切に保守されていません。

私が解決策について持っていたアイデア:

  1. テストをexecsls invokeにします-これは機能しますが、コードをデバッグできないことを意味し、テストカバレッジがわからず、遅くなります。
  2. serverless.ymlを自分で解析し、環境変数をエクスポートします-可能ですが、テストのためだけにSSM変数をプルするロジックを書き直すのは間違っているようです。

何か案は?

6
brafdlog

最終的に使用したソリューションは、 serverless-export-env というサーバーレスプラグインです。

このプラグインを追加した後、serverless export-envを実行して、解決されたすべての環境変数を.envファイルにエクスポートできます。これにより、ssmパラメーターが正しく解決され、統合テストがはるかに簡単になりました。

ところで、.envファイルから設定された環境変数を取得するには、 dotenv npmパッケージを使用します。

解決策を見つけるための grishezz へのクレジット

2
brafdlog

--requireオプションを指定してノードを実行し、.envファイルをサーバーレスコマンドに挿入できます。

  1. プロジェクトルートに.envを使用してpackage.jsonを作成し、.envに変数をリストします。
  2. yarn add -D serverless dotenvによってプロジェクトにサーバーレスとdotenvをインストールします。
  3. node -r dotenv/config ./node_modules/.bin/sls invokeのようなコマンドを実行します。

次に、ハンドラーprocess.env.XXXで環境変数を取得できます。

0
Sangwon Kim

模擬ユニットテスト、または統合テストのようなものを実行しようとしていますか?

最初のケースでは、環境変数に実際の値は必要ありません。データベース、または環境変数の設定が必要なものをモックします。テストは適切なモックで非常に高速に実行されるため、これは実際には好ましい方法です。

実際にエンドツーエンド/統合のようなアプローチを検討している場合は、sls invokeのようなことを行いますが、JavaScriptを使用して冗談を言います。したがって、デプロイされたAPIへの通常のネットワーク呼び出しのように。

また、キーをserverless.ymlに保存しないことをお勧めします。代わりにsecret: ${env:MY_SECRET}構文を試して( https://serverless.com/framework/docs/providers/aws/guide/variables#referencing-environment-variables )、代わりに環境変数を使用してください。 ci/cdビルドサーバーがある場合は、そこにシークレットを保存できます。

0
Herman Starikov