AWS Step Functions を使用して、プログラミンが必要ないサーバーレスワークフロー構築をしてみました。
このワークフローでは、Step Functionsのステートマシンを活用し、DynamoDBのデータ取得できれば成功、取得できなければ失敗となる仕組みを作りたいと思います。
AWS Step Functions とは
AWS Step Functions は、デベロッパーが AWS のサービスを利用して分散型アプリケーションを構築し、プロセスを自動化し、マイクロサービスのオーケストレーション、データと機械学習のパイプラインを構築できるようにするビジュアルワークフローサービスです。
引用 AWS公式サイト
1. ステートマシンの作成
① AWSコンソール画面で「Step Functions」を選択し、「ステートマシン」→「ステートマシンの作成」をクリック
②「テンプレート選択」画面が表示されるので、デフォルトのまま「選択」をクリック
③ ビジュアルエディターの画面が表示されます
・画面左の「フロー」を選択して「Pass」をドラッグ&ドロップします
・真ん中の「Pass state」が薄い青色になっているので、そこ以外をクリックすると白になります
・全体の設定が表示されるのでタイムアウトの設定として今回は「30秒」設定します
↓
・画面上の「作成」をクリックします
④ ロールの作成を確認画面する画面が表示されるので「ロールの設定を表示」をクリックします
⑤ ステートマシンの設定画面が表示されるので、「ステートマシン名」を設定します
・その他の設定はデフォルトのままで「作成」をクリック、再度ロールの作成を確認する画面が表示されるので、「確認」をクリック
ステートマシンが作成されました
⑥ 画面下の「実行」をクリックし、試しに実行してみます
・実行の開始画面が表示されるので、デフォルトのまま「実行開始」をクリックします
↓
⑦ 「実行が正常に開始されました」と表示され成功が確認できました
↓
2. DynamoDB のテーブル作成
DynamoDB から 情報を取ってくるようにするために、DynamoDB のテーブル作成します
① AWSコンソール画面で「DynamoDB」を選択し、「テーブルの作成」をクリック
② テーブルの作成画面が表示されるので、「テーブル名」、「パーティションキー」を設定し、その他はデフォルトのまま「テーブルの作成」をクリック
↓
テーブルが作成されました
③ 画面左の「項目を探索」をクリックし、作成したテーブルを選択します
④ この後に使用するデータを入れるため、「項目の作成」をクリック
⑤「ArticleID」 を 任意で入力します
・日本語の詳細を入れるため「新しい属性の追加」を選択して、「文字列」を選択し「属性名」と「値」を入力し、「項目を作成」をクリックします
↓
・同じ手順で「0002」も作成します
※日本語の説明は違うものを設定しました
↓
⑥ Step Functions のステートマシン画面を表示し、先ほど作成したすステートマシンを選択し、「編集」をクリックします
⑦ 先ほど設定した「Pass」を選択して Deleteキーなどで削除して「DynamoDB」の「Getitem」をドラック&ドロップします
・「Pass」の削除
↓
・DynamoDB の「Getitem」をドラッグ&ドロップ
↓
⑧ DynamoDB GetItem の設定をします
・統合タイプで「AWS SDK」を選択
API パラメータ を設定します
・「"TableName"」を作成したテーブル名に変更
・「"Key"」を「属性名」に変更
・「"S"」を「値」に変更
※「test-Article」、「ArticleID」、「0001」の場合は以下のようになります
・その他の設定はデフォルトのままで「保存」をクリックします
↓
⑨ 1つ前のステートマシンの画面に戻り、実行してみます
・「実行を開始」をクリックします
↓
・実行に失敗しました
・画面を下にスクロールすると、失敗の原因は権限が足りないとの説明がありました
ステートマシン作成時に、デフォルトのIAMロールを作成したが DynamoDB への権限がないので失敗しました。
⑩ IAMロールに DynamoDB への権限を追加します
・ステートマシンのIAMロールのARN をクリックします
・ステートマシンのIAMロールが表示されるので、「許可を追加」→「ポリシーをアタッチ」をクリックします
・DynamoDB へのポリシーを選択し、「許可を追加」をクリックします
↓
↓
⑪ Step Functions の画面に戻り、再度実行してみます
↓
・実行に成功しました
↓
DynamoDB の 001 に紐づく日本語の部分が ステートマシンに取得できていることが確認できました
3. ステートマシン API パラメータの調整
ステートマシンの API パラメータで「001」のみを指定しているので、「002」も取得できるように設定していきます
① 実行結果の「入力」が「"Comment"」が指定されているので、ここに「ArticleID」を指定して「001」、「002」どちらも取得できるように設定します
・ステートマシンを選択 →「編集」→ ワークフローを開いて、「DynamoDB GetItem」を選択して「APIパラメータ」を修正します
・5行目の "S: "0001"
を "S.$": "$.ArticleID"
に変更して、「保存」をクリックします
画像2-3
↓
② ステートマシンを選択 →「実行を開始」をクリックして「"ArticleID": "0001"」指定し実行します
↓
↓
成功していることを確認できました
「"ArticleID": "0002"」を指定して実行してみます
↓
↓
こちらも成功していることを確認できました
4. Choice ステートの使用
Choice ステート使用して、データを取れた場合は成功、取れない場合は失敗になるように設定をしていきます
① Step Functions → ステートマシン → 作成したステートマシン を選択し、「編集」をクリックしてワークフローを開いてください
② フローから「Choice」を選択し、「Getitem」の下にドラッグ&ドロップします
↓
③ Rule #1 に「Success」、Default に「Fall」をドラッグ&ドロップします
↓
④ Rule #1 の設定をします
・「Choice」をクリックすると、右側にルールが出てくるので、「Rule #1」の鉛筆マークをクリックします
・データがあるかで判断するため、「Add conditions」をクリックします
・「Conditions for rule #1」の画面で以下の設定をし、「条件を保存」をクリックします
項目 | 値 |
---|---|
Variable | $.Item |
Operator | Is present |
↓
アイテムがあれば「Success」なければ「Fall」にいく設定が完了したので、「保存」をクリックします
⑤ 実行して設定されているか確認します
・存在する「0001」を指定して実行
↓
↓
アイテムが存在するので成功しました
・存在しない「1111」を指定して実行
↓
↓
アイテムが存在しないので失敗になり、期待通りの動きになっていることを確認できました
まとめ
ステートマシンの作成からDynamoDB テーブルの設定、API パラメータの調整、Choice ステートの使用までを詳細に解説しました。
AWS Step Functions のステートマシンを活用し、DynamoDB からのデータ取得が成功した場合と失敗した場合のワークフローを構築できました。
続編記事
◆ Parallel ステートと Amazon Translate を使用して日本語を英訳してみた
https://cloud5.jp/mk-step-functions-parallel-state-translate/