サーバーレスワークフローのスケジューリング
AWS Step Functions と Amazon CloudWatch を使用
AWS アカウント内のリソースについて、オペレーションに関係したイベントに対する応答を自動化することにより、AWS クラウドインフラストラクチャにおけるオペレーションのオーバーヘッドを軽減できることがあります。実際の例として、DevOps エンジニアや IT マネージャーは、ETL ジョブ、データ同期、セキュリティを自動化できます。
これを達成するために、時間ベースのスケジュールでサーバーレスワークフローを実行します。Amazon CloudWatch Events では、AWS リソースに関する変更と通知を記述したほぼリアルタイムのシステムイベントのストリームを配信します。このストリームから、特定のイベントを AWS Step Functions にルーティングし、ステートマシンを呼び出してさらに処理を実行できます。AWS Step Functions では、複数のサービスをサーバーレスのワークフローに整理できるため、自動化プロセスをすばやく構築し更新できます。
このチュートリアルでは、Step Functions を使用して CloudWatch イベントに応答するサーバーレスワークフローをスケジューリングします。最初に、AWS Step Functions を使用して非常にシンプルなステートマシンを作成します。次に、Amazon CloudWatch Events を使用して、1 分間隔でステートマシンを実行するルールを設定します。このチュートリアルでは時間ベースのスケジュールでワークフローを呼び出しますが、これを応用してイベントを生成する AWS の他のサービスと統合することもできます。
このチュートリアルでは、AWS Step Functions と Amazon CloudWatch を使用します。どちらのサービスも AWS 無料利用枠に含まれています。
このチュートリアルには AWS アカウントが必要です
Step Functions と CloudWatch に対する追加料金は発生しません。このチュートリアルで作成するリソースは無料利用枠の対象です。
ステップ 1:AWS Identity and Access Management (IAM) ロールを作成する
AWS Step Functions ではコードを実行し、他の AWS リソース (Amazon S3 バケットに保存されたデータなど) にアクセスできます。セキュリティを維持するために、AWS Identity and Access Management (IAM) を使用して Step Functions にこれらのリソースへのアクセス権限を与える必要があります。
a.AWS マネジメントコンソールを別ウィンドウで開きます。このステップバイステップガイドは開いたままにしておいてください。画面が読み込まれたら、ユーザー名とパスワードを入力して作業を開始します。次に、検索バーに「IAM」と入力し、表示された [IAM] を選択してサービスコンソールを開きます。
ステップ 2:AWS Step Functions のステートマシンを作成する
このステップでは、「Pass 状態」を使用する、独立して実行されるシンプルなステートマシンを作成します。Pass 状態は単に入力を出力に渡すだけで、いかなる作業も実行しません。
実際のシナリオでは、必要な任意の作業をサーバーレスワークフローで実行させることができます。例えば、複数の Lambda 関数を組み合わせて、タスクの実行、意思決定などを行うことができます。ただし、このチュートリアルではシンプルなワークフローのみを作成します。
a.AWS Step Functions コンソールを開きます。Step Functions では、事前に定義されたさまざまなステートマシンがテンプレートとして利用できます。このチュートリアルでは、「Hello World」テンプレートを使用してステートマシンを作成します。[ステートマシンの作成] ページで [テンプレート] を選択し、[Hello world] を選択します。
c.Step Functions によって、ステートマシンの名前が自動的に入力されます。また、[ステートマシンの定義] パネルには、Amazon ステート言語でステートマシンの説明が入力されます。ステートマシンの定義方法についての詳細は、ステートマシン構造をご覧ください。
ここで、ステートマシンに簡単な変更を加えます。
行 2 および行 5 の「HelloWorld」を「Do Something」に置き換えます。
行 7 の「Hello World!」を「Work complete!」に置き換えます。
次に、ビジュアルワークフローの横の更新ボタンをクリックして変更を反映させます。それに伴ってステートマシンの図も更新されます。
ステップ 3:Amazon CloudWatch Events のルールを作成する
ステートマシンを作成した後、スケジュールに沿ってステートマシンを実行する Amazon CloudWatch Events のルールを作成できます。Amazon CloudWatch Events では、アマゾン ウェブ サービス (AWS) リソースの変更を記述した、システムイベントのほぼリアルタイムのストリームを配信します。すぐに設定できる簡単なルールを使用して、ルールに一致したイベントを 1 つ以上のターゲット関数またはストリームにルーティングできます。
ステップ 4:ステートマシンの入出力の処理方法をカスタマイズする
次に、ステートマシンの入出力の処理方法をカスタマイズします。情報が状態から状態へどのように流れるかを理解し、このデータをフィルタリングおよび操作する方法を学ぶことで、AWS Step Functions で効果的にワークフローを設計して実装できます。
b.[ステートマシンの定義] ウィンドウで、ステートマシンの行 7 を確認します。Pass 状態の Result フィールドでは、次の状態に渡す出力を指定しています。ステートマシンの状態は 1 つであるため、「Work complete!」メッセージはワークフローの End 状態に渡されます。
Step Functions の Pass 状態は、単に入力を出力に渡すだけであることを思い出してください。ResultPath フィールドを使用することで、状態の出力を変更できます。具体的には、出力を、状態の入力から生成した結果 (例: Task 状態の Lambda 関数からの出力など) に置き換えることができます。
状態の入力に結果を追加するには、行 7 の後に以下の新しい行を追加します。
"ResultPath": "$.taskresult",
これによって、ステートマシンの実行を呼び出した CloudWatch イベントの詳細に、Pass 状態の出力 (この場合は「Work complete!」) が追加されます。詳細は、Step Functions の入出力処理をご覧ください。
ステップ 5:ワークフローが意図したとおりに動作しているか確認する
CloudWatch Events ルールを有効にしたため、CloudWatch によってステートマシンワークフローの実行が 1 分間隔でトリガーされます。このステップではワークフローの実行を観察し、CloudWatch イベントの詳細が Step Functions によってキャプチャされているか確認します。
ステップ 6:リソースを削除する
このステップでは、AWS Step Functions と Amazon CloudWatch のリソースを削除します。
重要: あまり使用されていないリソースを終了することは、コストを削減するためのベストプラクティスです。リソースを終了しないと、料金が発生する場合があります。
お疲れ様でした。
サーバーレスワークフローの 1 分間隔での実行を正常にスケジューリングできました。
AWS Step Functions では、繰り返しのタスク実行を検証および監査し、継続的に実行されているか確認できます。AWS Step Functions と Amazon CloudWatch Events を組み合わせることで、日/週/月ごとのタスクを自動化することや、特定の条件下で Step Functions ワークフローの実行をトリガーすることができます。