Visual Studio CodeでStep Functionsワークフローをデザインモードで開発する。

# はじめに
先日、[AWSブログ](https://aws.amazon.com/jp/blogs/news/)を見ていたら、普段使用しているVisual Studio Code（以下VS Code）でStep Functionsの開発がよりやりやすくなったとの記事を見つけ、ちょうどStep Functionsを作成する必要があったということもあり、試してみようと思います。

- [Visual Studio Code上で AWS Step Functions のワークフローをより簡単に構築](https://aws.amazon.com/jp/blogs/news/introducing-an-enhanced-local-ide-experience-for-aws-step-functions/)

# Visual Studio CodeでのStep Functions作成
VS CodeでStep Functionsを作成することは以前から可能であり、コードの右側に簡易的なフロー図を表示させながら開発することはできましたが、Step Functionsのコード（Amazon States Language）での開発を補助する目的のツールでした。

※違いを示すため、VS Codeで最初にサポートされた際のニュースも示しています。

- [以前のニュース：AWS Step Functions support in Visual Studio Code](https://aws.amazon.com/jp/blogs/compute/aws-step-functions-support-in-visual-studio-code/)

ただ、既存のコードを修正する程度ならともかく、１から素のコードを書いて開発するというのはハードルが高く、結局AWS上にテスト用のステートマシンを作成して、デザインモードで試しながら開発を行っている方が多いのではないでしょうか。

今回のアップデートではAWSマネジメントコンソールとほぼ同じ操作感でVS Code上からStep Functionsデザインモードで開発ができるようになったので、開発者にはかなり助かるアップデートだと思います。

以下、AWS上のStep Functionsデザインモード表示画面。

![Monosnap_20250409_081034.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/569912/ae9fdf58-b124-4aac-8ea7-7b60f5f14b04.png)

以下、同じコードをVS Codeで開いた画面。

![Monosnap_20250409_080937.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/569912/2ca6bc45-b3e4-4c6b-8066-e2b9d13f5fa2.png)

また、各アクション・フローごとに「**テスト状態**」というボタンがあり、各アクション・フローが想定通りに動作するかをテストすることができますが、なんとVS Codeでもテストを行うことができ、AWS上にステートマシンを作成しなくてもテストを実行することができるため、アクション・フローの入出力チェック程度であればVS Codeだけで完結することもできるようになりました。

![Monosnap_20250410_083429.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/569912/2baf9a72-0317-4bef-9802-69555ab7c3f7.png)

:::note info
但し、あくまでもワークフローに配置する単体のアクション・フローごとのテストとなるので、ワークフロー全体のテストを行う場合には実際にステートマシンを作成する必要があります。
:::

# Visual Studio CodeでのStep Functions開発
以下よりVS CodeでStep Functionsを開発するための準備を進めていきます。

## Visual Studio CodeへのToolkitインストール
VS CodeでStep Functionsを開発するための準備を以下より進めていきます。

といっても準備は簡単で、VS Codeの拡張機能から「**aws toolkit**」を検索してインストールするだけとなります。

![Monosnap_20250409_075923.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/569912/b3dc47f9-9ec9-4e07-ba6d-bd920700d485.png)

「**AWS Toolkit**」インストール後、`*.asl.json`もしくは`*.asl.yml`、`*.asl.yaml`という拡張子のファイルを作成することで、AWSマネジメントコンソールで開発する場合と同じデザインモードの画面が表示されます。

## AWSアカウントへの接続準備
単純にアクションやフローを配置してコードを書くだけならAWSアカウントへの接続を行わなくてもできますが、前述のテストを行ったり、VS Codeで作成したワークフローのコードを使ってそのままAWS上にステートマシンを作成する場合にはAWSアカウントへの接続が必要となります。

接続自体はAWS CLIが使える状態になっていれば使えるので、もしAWS CLIが使える状態になっていない場合はAWS CLIのインストール・初期設定やAWS側へのユーザーアカウントの作成を行っておいてください。

また、アクセスキー、シークレットアクセスキーを使用する一般的なIAMユーザ以外にも、Identity Centerユーザにも対応しているため、CLI設定がされていればIdentity Centerを使用している方でも問題なく使用できます。

## AWSアカウントへの接続
AWSアカウントに接続するには、VS Codeの左の枠に表示されるAWSアイコンを選択して「**EXPLORER**」の「**Select a connection...**」を選択します。

![Monosnap_20250409_085231.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/569912/21fdba29-ea4f-43fb-b3fd-5d9679a6efc3.png)

選択すると現在登録されているプロファイルが表示されるため、使用するプロファイルを選択してAWSに接続を行います。

![Monosnap_20250409_085400.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/569912/2479c341-f74d-45a5-a8d3-070ab8ca781f.png)

まだアカウント登録を行っていない場合は「**Add New Connection**」を選択すれば、画面上から登録することもできます。

なお、「**Workforce**」がIdentity Centerユーザ用の設定で、「**IAM Credentials**」がIAMユーザ用の設定となります。

![Monosnap_20250409_090413.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/569912/c5897b80-f4f0-4abb-97ec-3ef5fc19a704.png)

「**Connected with profile:[プロファイル名]**」と変われば接続成功となります。

![Monosnap_20250409_085520.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/569912/38079583-2457-4a3f-877f-66734a3f21cb.png)

Identity Centerユーザで接続する場合はWebブラウザ側でアクセス許可ウィンドウが表示されるため、許可することで接続できます。

また、初回接続時には以下のようなウィンドウも表示されるため、アクセス許可します。

![Monosnap_20250410_081410.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/569912/f88f9ce3-b2ec-4d9d-be93-bba4c6d28c6e.png)

## アクション・フローのテスト
ワークフローの画面に配置したアクション・フローの「**テスト状態**」を選択すると以下のように「**テスト状態**」画面が表示されます。

![Monosnap_20250410_084402.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/569912/13ba1c7e-a4d6-4ddf-9d80-0046f040aa5f.png)

テストを実行するためには前述のようにAWSアカウントへの接続が必要となり、また、テストを実行する際に使用するStep Functions用のIAMロールが必要となるので、Step Functions用のIAMロールが存在しない場合は、適当なIAMロールを事前に作成しておきます。

必要な実行ロールの指定等行って「**テストを開始**」を実行することで、AWS上で実行した場合と同じように結果が表示されます。

事前に実行ロールの作成は必要となりますが、AWS上へのステートマシン作成なしで手元で単体テストが実行できるというのは開発者にはかなり助かるのではないかと思います。

## AWS上へのStep Functionsワークフローの作成
一通りワークフローの作成が完了したら、そのままAWS環境にStep Functionsのステートマシンを作成することもできます。

画面右上「**ファイルを保存**」の右側の「**▲**」を選択すると、「**保存してデプロイ**」が表示されるため、クリックします。

![Monosnap_20250410_090341.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/569912/202fc996-8bed-455e-a6e6-8cc1c73e42a3.png)

ステートマシンを作成するリージョンを選択します。

![Monosnap_20250410_090604.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/569912/53be14b2-e101-476c-a3c9-30984bec0818.png)

新規にステートマシンを作成するか、既存のステートマシンを更新するかを選択。

今回は「**Quick Create**」を選択して新しくステートマシンを作成します。

![Monosnap_20250410_090633.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/569912/22a390fb-fd89-4591-86e9-263387f39bde.png)

ステートマシンに割り当てる実行ロールを選択します。

![Monosnap_20250410_090703.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/569912/ea85ff13-9630-4e63-a0cf-a2771ed1d287.png)

ステートマシン名を入力してEnterを押すと作成完了です。

![Monosnap_20250410_090829.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/569912/7737a20b-ed98-42f5-a1c8-2f229673b1d8.png)

エラー等無ければ以下のようにAWS上にステートマシンが作成されます。

![Monosnap_20250410_091022.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/569912/fd55fc3e-5e97-441c-ae9b-42fbb7311988.png)

「**Quick Create**」との記載の通りログ出力設定等、細かな設定はできないため、必要により作成後に設定してください。

# おわりに
VS CodeにStep Functionsの作成を補助するツールがあること自体は知っており、以前少し試したりもしましたが、私がStep Functionsを作成する際にはデザインモードで作っているため、あまり使うことはありませんでした。

今回、VS CodeでもAWSで作成する場合とほぼ同じデザインモードで作成できるようになり、しかも単体アクション・フローのテストまでできるようになったということで、個人的にStep Functionsを作成したい欲が爆上がりしました。

今後もAWS Toolkitを使ってStep Functionsｗ開発していきたいと感じました。