背景・目的
先日、VSCode でStep Functions Workflow Studioが利用できると発表がありました。
実際に試してみます。
なお、VSCodeの発表ですが、私はCursorを使用しているので、Cursorで試してみます。
まとめ
- VSCode(Cursor)でStep Functions Workflow Studioが利用できるようになった
- TestState APIを使用してテストが可能
概要
関連した内容を整理します。
TestState API
下記を基に整理します。
TestState API は 1 つのステートの定義を受け入れ、それを実行します。ステートマシンを作成したり、既存のステートマシンを更新したりしなくても、ステートをテストできます。
- 1つのStateの定義を受け入れて実行する
- ステートマシンを作成したり、既存のステートマシンを更新しなくても良い
TestState API を使用する場合は、次の考慮事項に留意してください。
- TestState API には以下のサポートは含まれていません。
- 以下のリソースタイプを使用する Task ワークフロー状態 ステート:
- アクティビティ
- .sync または .waitForTaskToken のサービス統合パターン
- Parallel ワークフローの状態 ステート
- Map 状態のワークフロー ステート
- テストは最大 5 分間実行できます。テストがこの期間を超えると、States.Timeout エラーで失敗します。
- テストは最大 5 分間実行可能。超えるとタイムアウトエラーになる
Amazon States Language
下記を基に整理します。
Amazon ステートメント言語は JSON ベースの構造化言語で、ステートマシンおよび作業を実行できる状態のコレクション (Task 状態) の定義、次に移行する状態の決定 (Choice 状態)、エラーによる実行の停止 (Fail 状態) などに使用されます。
- ASLは、Amazon States Languageの略
- JSONベースの構造化言語
- 下記ができる
- ステートマシン、作業を実行できる状態のコレクションの定義
- 次に移行する状態の決定(Choice)
- エラーによる実行の停止など
State Machine 構造
下記を基に整理します。
項目 | 必須/オプション | 説明 |
---|---|---|
QueryLanguage | オプション | ステートマシンで使用されるクエリ言語の名前。 指定できる値は JSONPath と JSONata デフォルト値は JSONPath |
Comment | オプション | 説明 |
StartAt | 必須 | いずれかの状態オブジェクトの名前と完全に一致する必要がある |
TimeoutSeconds | オプション | ステートマシンを実行できる最大秒数。指定された時間より長く実行されると、States.Timeoutで実行が失敗する |
Version | オプション | ステートマシンで使用される のバージョン デフォルトは1.0 |
States | 必須 | オブジェクトには、コンマで区切られた一連の状態 |
実践
VSCodeではなく、Cusrsorを使用しています
下記を参考に試してみます。
前提
- OS:MacOS
- エディタ:Cursor
- 言語:Python
下記の構成とします
環境準備
GitHubリポジトリの作成
-
リポジトリを作成します
% gh repo create sample-step-functions --public --clone ✓ Created repository XXXXXX/sample-step-functions on GitHub https://github.com/XXXXXX/sample-step-functions %
-
できました
% gh repo view XXXX/sample-step-functions XXXX/sample-step-functions No description provided This repository does not have a README View this repository on GitHub: https://github.com/XXXX/sample-step-functions %
AWS Tookit のインストールと接続
-
Cursorを開きます
-
拡張機能タブを開きます
-
次に接続します。まずは事前にSSOでサインインします(私はSSOを使用していますが、credentialsをローカルに保存されているようでしたら、不要です)
aws sso login --sso-session XXXXXXX
-
Switch Connectionに自身のAWS profileを指定します
ワークスペースを追加
- Cusrorのワークスペースの追加をクリックし、上記で作成したリポジトリを指定します
コード
Amazon States Language
-
「statemachines」ディレクトリを作成します
-
折角なのでGUIで実装してみます。検索ウィンドウにpass入力し、ドラック&ドロップしてみます
-
①「設定」タブをクリックし下記を指定します
-
コードを見ると下記のように作られていました
{ "Comment": "A description of my state machine", "StartAt": "Pass", "States": { "Pass": { "Type": "Pass", "End": true, "Output": { "result": "Hello" } } }, "QueryLanguage": "JSONata" }
考察
今回は、Step Functions ASLを使って、ローカルでステートマシンの作成と単体ステートのテスト実行を試しました。
Cursor(VSCode)とAWS Toolkitを併用することで、開発がスムーズに進みそうと感じました。
一方で、ステートマシンから実際のLambda関数を呼び出すためには、事前にAWS上にデプロイしておく必要があるなど、ASLのテストが「完全にローカルで完結するわけではない」点がわかりました。
今後は、下記を試してみたいと思います。
- Lambda以外のサービス(SQSやBatchなど)との連携
- CloudFormationを使ったASLの本番環境へのデプロイまでの一連の開発
まとめ