AWS Step Functionsの入門にピッタリ? AWS公式のセルフスタイル・ワークショップが公開されました!

短時間でサクっと「Step Functions」に入門するにはオススメです!
2022.06.06

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

みなさん、こんにちは!
福岡オフィスの青柳です。

GUIベースの操作で様々なワークフローを作成できるAWSのサービスが「AWS Step Functions」です。

今回、このStep Functionsの入門にピッタリなAWS公式の「ワークショップ」が公開されました。

The AWS Step Functions Workshop
https://catalog.workshops.aws/stepfunctions/en-US/

AWSのイベント等で開催されるワークショップで使われることを想定したコンテンツのようですが、自分のAWSアカウント環境を使って「自習」することもできるようになっています。

私自身あまりStep Functionsを触ったことがなかったので、この機会に「ワークショップ」でStep Functionsに入門してみました。

ワークショップの構成

最初に「Introduction」としてワークショップの概要説明があり、続いて10枚ほどのスライドでStep Functionsの特徴や主な概念についての説明があります。

導入パートが終わると、実際にStep Functionsを触りながら演習を進めます。

演習は「モジュール」という単位に分かれていて、「Module 1」から「Module 10」までの10個のモジュールが用意されています。

1つのモジュールは、簡単なもので数分程度、後半の少し複雑なものでも10~20分ほどで終わるくらいのボリュームです。

各モジュールは独立した内容となっていて、好きなモジュールから始めることができるようになっています。
Step Functionsを初めて体験するという方は「Module 1」から順番に進めるのが良いと思いますし、多少触ったことがあるという方であれば前半のモジュールはスキップしても問題ないかと思います。

なお、残念ながら現時点ではコンテンツ全体を通して英語のみとなっており、日本語は用意されていません。
ただ、テキストの量はそれほど多くありませんので、必要に応じて翻訳ツール等を使うことで、そこまで苦労せずに進められるのではないかと思います。

ワークショップの進め方

ワークショップの各モジュールは、以下のような進め方となっています。

  • 用意されているCloudFormationテンプレートのリンクを使って、必要なAWSリソースを作成する
  • 作成されたStep Functionsステートマシンやその他のAWSリソースの内容を確認する
  • 必要に応じてステートマシンやその他のAWSリソースの内容を修正したり、追加で作成したりする
  • ステートマシンを実行して動作を確認する

CloudFormationテンプレートを使ってAWSリソースを作成する

各モジュールに用意されている「Setup」ページに、モジュールで必要なAWSリソースを作成するためのCloudFormationテンプレートへのリンクが用意されています。

予めAWSアカウントにサインインした状態で「Launch stack」のリンクをクリックすると、CloudFormationのスタックを作成することができます。

なお、用意されているCloudFormationテンプレートは「北部バージニア (us-east-1)」「アイルランド (eu-west-1)」「シンガポール (ap-southeast-1)」「シドニー (ap-southeast-2)」の4つのリージョン向けのみで、東京リージョン向けは用意されていません。
4つのうちのいずれかのリージョンを利用しましょう。

作成されたStep Functionsや各種AWSリソースの内容を確認する

作成されたStep Functions「ステートマシン」を開いて、「定義」タブでステートマシンの定義内容を確認します。

また、「編集」ボタンを押して編集画面を開いてから、更に「Workflow Studio」を選択することで、より分かり易い画面で内容を確認することもできます。

Workflow Studioでは、ドラッグ&ドロップで「ステート (処理の単位)」を追加したり、画面右側のフォームからパラメーターを設定したりすることができます。

ただし、ステートマシンのコード (ASL) を直接入力したり編集したりすることはできません。(表示のみ行うことができます)
コードを入力・編集したい時は「編集」画面を使いましょう。

CloudFormationスタックによって、Step Functionsステートマシンの他に「Lambda関数」「SNSトピック」といったStep Functionsと連係する各種AWSリソースも併せて作成されます。

これらのAWSリソースについても、必要に応じて内容を確認しておきましょう。

モジュールの説明に従ってStep Functionsや各AWSリソースの設定を変更する

最初の方のモジュールはCloudFormationで各AWSリソースを作成した後、特に設定の追加や変更を行うことなく、そのままStep Functionsステートマシンを実行することができます。

中盤以降のモジュールでは、ステートマシンのパラメーターを変更したり、Lambda関数のコードを修正したりする必要が出てきます。
これらの変更の内容・手順については、モジュールの説明に全て書かれていますので、順を追って進めて行けば難しくは無いでしょう。

また、場合によっては、Step FunctionsステートマシンをCloudFormationが作成するのではなく、マネジメントコンソールで1から作成する必要があるモジュールも登場します。

Step Functionsステートマシンを実行して動作を確認する

ステートマシンや各AWSリソースの準備ができましたら、ステートマシンを実行して動作を確認します。

「実行の開始」ボタンを押してから、、、

ステートマシンに与える「入力」の値を入力します。

モジュールの説明で指示があれば、その通りに入力します。
特に指示が無ければ、デフォルトのまま実行します。

あとは、ステートマシンが上から順次実行されて、実行ステータスが「成功」になることを確認しましょう。 (ここがStep Functionsで一番楽しみなところです)

おっと! 必ずしも「成功」になる訳ではなく、モジュールによってはステートマシンの実行結果が「失敗」になったりする場合もあります。
何故「失敗」になるのかを理解したり、設定を修正して再び実行することで「成功」になることを確認したりするのも、このワークショップで学習することができます。

作成したAWSリソースの後片付けをする

モジュールの学習が終わりましたら、作成した各AWSリソースを削除しておきましょう。

CloudFormationで作成したAWSリソースは、CloudFormationのスタックを「削除」することで一括して削除されます。
また、一部、マネジメントコンソールでStep Functionsステートマシンを作成する場面がありますが、このようにして作成したステートマシンはマネジメントコンソールから削除する必要があります。

※ なお「Module 9」のみ、CloudFormationスタックを削除する前に、Cloud9上で作成したAWS CDKプロジェクトを削除する必要がありますので、注意してください。

各モジュールの紹介

Module 1 - Hello World

Step Functionsを初めて体験する人のための、ごくシンプルなワークフローです。

「Hello World」というタイトルですが、"Hello World" というメッセージを出力する訳ではなく、「指定した時間だけ待機する」→「正常終了する」という処理内容となっています。

まずはこのモジュールで、Step Functionsステートマシンの構成を確認したり、ステートマシンを実行して結果を確認する一連の流れを体験しましょう。

Module 2 - Request Response

モジュール1のステートマシンを少し拡張して「SNSトピックへメッセージを送る」という処理を追加します。

Step FunctionsからAWSの他のサービスへ連係するサンプルとなっています。

なお、このモジュールで「Request Response」というステートマシンの処理方式についての言及がありますが、詳しい解説は次のモジュールで行われますので、ここはサラッと流して問題ありません。

Module 3 - Run a Job (.sync)

ステートマシンの処理方式の一つである「Run a Job」について学習します。

AWS Batchを呼び出して一定の処理を行わせるステートに対して、標準では「呼び出したら処理終了を待たずに次へ進む」という動作をしますが、設定を変更することによって「処理が終わるまで待ち合わせる」という挙動をするようになります。

Module 4 - Wait for a Callback with the Task Token

ステートマシンが「非同期処理」を行う場合の「コールバックの待ち合わせ」について学習します。

ステートがSQSキューへメッセージを投入した後、Lambda関数の実行結果を「コールバック」として受け取り、実行結果を判定して後続処理を行います。

Module 5 - Choice State and Map State

ステートの種類の一つ「マップ」を使って、配列データを繰り返し処理する方法について学習します。

ステートマシンが、SQSキューへ投入されたメッセージを取り出して、DynamoDBへ書き込み、キューからメッセージを削除して、次のメッセージを処理する、・・・という一連の処理をSQSキューのメッセージが無くなるまで繰り返し行います。
この処理方法を理解すれば、Step Functionsを使って大量データを扱うワークフローを作成することができるようになるでしょう。

なお、このモジュールではCloudFormationによってステートマシンの「枠」は作成されますが内容はダミーとなっているため、自分で作成する必要があります。
(と言っても、コードスニペットからコピー&ペーストするだけですので、全然難しくはありません)

Module 6 - Input and Output Processing

これまでのモジュールから少しシンプルな構成に戻って、「入力された値をLambda関数へ渡し、Lambda関数から返ってきた値を出力する」というステートマシンを作成します。

このモジュールではCloudFormationはステートマシンを作成しません。
Workflow Studioを使って1からステートマシンを作成する方法を学びます。

Module 7 - API Gateway, Parallel State, Express workflows

ステートマシンをAPI Gatewayから呼び出して利用する方法について学習します。

また、ステートマシンで処理を並列実行する「Parallel」ステート、ステートマシンの2つの種類「Standard」「Express」の違いについても学びます。

Module 8 - AWS SDK service integrations

Step Functionsの「AWS SDK統合」を利用して、Lambda関数を介さずにステートマシンからAWSサービスを直接制御する方法について学習します。

昨年リリースされたこの「AWS SDK統合」機能によって、Step Fucntionsの利用の幅が大幅に拡大されました。

このモジュールでは「S3バケットの一覧を取得する」というシンプルな処理のみ行っていますが、「AWS SDK統合」機能は様々な場面で使える機能ですので、ここで基礎を学びましょう。

Module 9 - Deploy with AWS CDK

ここまでは、Step FunctionsのステートマシンをCloudFormationで作成するか、Workflow Studioを使って手で作成してきました。

このモジュールでは「AWS CDK」を使ってStep Functionsおよび連係するAWSリソースを作成します。

AWS CDKの実行は、CloudFormationによって作成される「AWW Cloud9」の環境を使って行いますので、お使いのPCの環境に関係なくモジュールを進めることができます。

Module 10 - Error Handling

最後のモジュールは、ステートマシンの「エラー処理」について学習します。

エラーが発生した場合に、ウェイトを置きながら指定した回数だけ再試行する「Retry」と、エラー内容に応じて後続処理を分岐させる「Catch」の使い方を理解します。

プロダクション環境でStep Functionsを利用する際は、エラーが発生してしまった場合に、それを検知して適切に処理を行うことが重要になります。

おわりに

今回公開された「ワークショップ」は、それぞれが独立していて短時間で学習できる「モジュール」で構成されていたり、AWSリソースの大部分を作成してくれるCloudFormationテンプレートが用意されていたりと、Step Functions入門者の学習にフォーカスされているという印象を受けました。

ワークショップを通じて「Step Functionsでこんなことが出来るんだ」「Step Functionsと他のAWSサービスをこのようにして連係させるんだ」ということが理解できるのではないかと思います。

更にStep Functionsの理解を含めるために、今回のワークショップの各モジュールで取り扱うStep Funcionsステートマシンや各種AWSリソースの詳細な構成・設定を確認したり、設定を変えてみたりすると良いのではないかと思いました。

Step Functionsに興味がある皆さん、是非試してみてください!