web-dev-qa-db-ja.com

AWSのユニットテスト:ステップ関数

私はAWSの初心者で、以下に示す最初のAWSステップ関数を作成しました。次のステップは、このステップ関数の単体テストです。ラムダ関数を個別にユニットテストしましたが、行き詰まり、ステップ関数のユニットテストをどのように進めることができますか。

また、ステップ関数の単体テストを行う価値があるかどうかという疑問もあります。これは単なるjsonであるため、実行できるかどうかを感じることがあります。

検索しようとしましたが、インターネットやAWSのドキュメントに手がかりがありませんでした。このブログやサンプルのユースケースについて、助けていただければ幸いです。ありがとうございます。

{
"Comment": "An example of the Amazon States Language using a choice state.",
"StartAt": "LoginState",
States": {
"LoginState": {
  "Type": "Task",
  "Resource": "arn:aws:lambda:us-east-1:170344690019:function:myfirstLogin",
  "Next": "ChoiceState"
},
"ChoiceState": {
  "Type" : "Choice",
  "Choices": [
    {
      "Variable": "$.success",
      "BooleanEquals": true,
      "Next": "logoutState"
    },
    {
      "Variable": "$.success",
      "BooleanEquals": false,
      "Next": "DefaultState"
    }
  ],
  "Default": "DefaultState"
},

"logoutState": {
  "Type" : "Task",
  "Resource": "arn:aws:lambda:us-east-1:170344690019:function:myFirstLogout",
  "End": true
},


"DefaultState": {
  "Type": "Fail",
  "Error": "DefaultStateError",
  "Cause": "No Matches!"
}

}
}
9
Vicky Kumar

これはちょっとした落とし穴ですが、次の説明が表示されます。ステートマシンをテストする時点で、単体テストの範囲外で統合テストに拡張しています。

では、なぜニッチなのか?統合テストに移行しているので、ステートマシンを実行して、入力をフィードし、出力を検証できるようにする必要があります。ステートマシンのテストを自動化する2つの方法があります...

  1. ステートマシンをAWSアカウントのテスト環境にデプロイし、AWSが提供するツール( cliboto など)のいずれかを使用して直接呼び出します。これは、実際の環境でステートマシンをテストするため、自動化テストに近いものです。これをCIパイプラインの一部として設定する場合は、AWSアカウントでステートマシンをインストールして実行するために必要なアクセス権を使用してビルドサーバーを構成する必要があります。

  2. stepfunctions-local のようなものを試して、ローカルシステムまたはテスト環境で実行中のステートマシンをエミュレートします。このオプションは、既存の単体テストをすでに実行しているCIパイプライン設定がある場合に役立ちます。これには、ツールをCI環境に適切にインストールするためにある程度の努力が必要ですが、それだけの価値がある可能性があります。

  3. 私の個人的なお気に入り...使用 localstack 。これらの人々は、Dockerコンテナで起動して実行できるいくつかのAWSサービスをエミュレートするという素晴らしい仕事をしました。これは、ラムダが他のAWSサービスを使用している場合に特に役立ちます。統合テストのためにCI環境で実行するのが好きです。

  4. AWS SAM CLI を使用します。自分ではあまり使っていません。サーバーレスアプリケーションモデルを使用している必要があります。彼らのドキュメントはより公式にサポートされるようになったので本当に改善されたので、彼らのガイドと多くの例に従うことによってそれは非常に使いやすいはずです。 CI環境でこれを実行するには、テスト環境にツールがインストールされている必要があります。

これがお役に立てば幸いです。あなたがやろうとしていることは簡単ではなく、複数の方法で実装できるので、この回答でコードを共有することは役に立たないと思います。たとえば、CircleCIなどのCIサービスはDockerコンテナーを活用して、stepfunctions(localまたはlocalstack)を実行するための独自のDockerコンテナーを生成するオプションを提供します。

8

AWSは最近、ダウンロード可能なバージョンの ステップ関数 を発表しました

1
niqui