以下の内容はhttps://makky12.hatenablog.com/entry/2025/10/06/120500より取得しました。


【AWS Step Functions】「AWS Step Functions 入門ハンズオン」をやってみた感想&JSONata対応

はじめに

みなさんこんにちは。お久しぶりです。

最近、業務で久しぶりにAWS Step Functions(以下「Step Functions」)を使うことになったので、復習もかねてAWS公式の「AWS Step Functions 入門ハンズオン」をやってみることにしました。

今回はその「AWS Step Functions 入門ハンズオン」に関するお話しです。

AWS Step Functions 入門ハンズオン」とは

AWS公式が提供する「AWS Hands-on for Beginners」シリーズ*1のStep Function編で、Step Functionsについて下記の操作を行いながら、Step Functionsの基本的な機能・操作を理解しようというハンズオンです。

pages.awscloud.com

  • DynamoDBから文章データを取得する
  • 文章データを取得できた場合のみ、下記の処理を並列で実施する(できなかった場合はそこで終了)
    • 文章データの内容をAmazon Translateで英訳し、英訳した文章をDynamoDBに登録する
    • 文章データの内容をAmazon Pollyで音声データにし、音声データの保存先(S3バケット)の情報をDynamoDBに登録する

ハンズオンのアジェンダ

ハンズオンの正式なアジェンダは以下の通りです。

  1. 今回のハンズオンのシナリオ/構成の紹介 + AWS Step Functions の基本
  2. ステートマシーンの作成 + 「アクション」を使ってみる
  3. Input の受け取り + Choice ステートを使ってみる
  4. Parallel ステートで処理を並列に実行する
  5. Output の調整 + DB(Amazon DynamoDB)の更新
  6. Parallel ステートのもう一方の実装 - テキストを音声化する
  7. ステートで「タスクが終わるまで待つ」を実装する
  8. 音声ファイルの出力先情報を DynamoDB テーブルに格納する
  9. リソースの削除 + まとめ + Next Action 案

上記アジェンダはすべて公式Youtube動画&公式資料を見ながら実施できるので、初めてでもわかりやすい内容です。

またどの章も各章の動画自体は短いので(10分弱)、学ぶべきポイントをコンパクトに学べるようになっています。

なお事前にAWSアカウント作成が必要なので、AWSアカウントを持ってない人は先に作成しておいてください。(検証用の一時的アカウントなどは払い出されない)*2

やってみた感想

良かった点

Step Functionの基本的な使い方を学べる
Step Functions でステートマシンを作成する際の基本である「アクション(各AWSサービスを利用する機能)」や「フロー(条件分岐・並列処理などのロジックを定義する機能)」の使い方を学ぶことができます。*3

またステートマシン編集環境であるWorkflow Studioを操作するためWorkflow Studio、Workflow Studioの操作に慣れることもできます。(ちなみにこのハンズオンではマネジメントコンソールを使用しますが、VS CodeでもWorkflow Studioでステートマシンを編集可能です)

Amazon TranslateやAmazon Pollyについても知ることができる
このハンズオンではAmazon TranslateやAmazon Pollyも取り扱うため、普段触れることが少ない(と思う)これらのサービスについて知ることもできます。

ハンズオン内で「Amazon TranslateやAmazon PollyのAPIドキュメントを調べる」という作業があるため、それを通してそれらの機能を知ることができますし、ハンズオンが終わった後で「Amazon TranslateやAmazon Pollyを自分でもいろいろ触ってみようかな」というきっかけになるかもしれません。

注意する点

ちょっと内容が古い
このハンズオンの作成が2021年12月という事もあり、動画の内容が古いものになっています。
そのため、マネジメントコンソールのUIや操作手順で、一部現在のものとは異なるものがあるため、注意が必要です。

「JSONata」や「変数」について学べない
先ほど説明した通り、内容が古いものになっていることもあり、最近サポートされた「JSONata」や「変数」についてはこのハンズオンでは学べません。この点は注意が必要です。(特にJSONataはとても便利なので、個人的にはそろそろハンズオンをアップデートして頂けると嬉しいです)

なおJSONataや変数については、こちらのサイトが参考になります。

参考情報:ハンズオンの内容をJSONataで記載する

「注意する点」で記載の通り、このハンズオンではJSONataは扱っていません。

しかし現在はJSONataで記載するのが基本なので(デフォルトの「ステートマシンクエリ言語」もJSONata)「このハンズオンの内容をJSONataではどう書くか」を記載したいと思います。(一部「変数」も扱います)

※記載がない章は、特にJSONataでの記載が必要ない章になります

3.Input の受け取り + Choice ステートを使ってみる

「DynamoDB GetItem」ブロックの「APIパラメータ」
以下のように記載

{
  "TableName": "Article",
  "Key": {
    "ArticleID": {
      "S": "{% $states.input.ArticleID %}"
    }
  }
}

ちなみにハンズオンではDynamoDB関連ブロックの「統合タイプ」に「AWS SDK」を設定してますが「最適化」でも問題ないです。(指定する引数は同じ)

「Choice」ブロックの「Rule #1」の「Condition」
{% $exists($states.input.Item) %} と記載

4.Parallel ステートで処理を並列に実行する

「TranslateText」ブロックの「引数と出力」の「Text」
"{% $states.input.Item.Detail.S %}" と記載

5.Output の調整 + DB(Amazon DynamoDB)の更新

「TranslateText」ブロックの「引数と出力」の「出力」
以下のように記載

{
  "Item": "{% $states.input.Item %}",
  "Result": "{% $states.result%}"
}

「DynamoDB UpdateItem」ブロックの「引数と出力」の「引数」
以下のように記載(「ArticleID」と「:EnglishVersionRef」がポイント)

{
  "TableName": "article",
  "Key": {
    "ArticleID": {
      "S": "{% $states.input.Item.ArticleID.S %}"
    }
  },
  "UpdateExpression": "SET EnglishVersion = :EnglishVersionRef",
  "ExpressionAttributeValues": {
    ":EnglishVersionRef": {
      "S": "{% $states.input.Result.TranslatedText %}"
    }
  }
}

6.Parallel ステートのもう一方の実装 - テキストを音声化する

「StartSpeechSynthesisTask」ブロックの「引数と出力」の「Text」
{% $states.input.Item.Detail.S %} と記載

7.ステートで「タスクが終わるまで待つ」を実装する

「Choice」ブロックの「Rule #1」の「Condition」
{% $contains($states.input.TaskStatus, 'completed') %} と記載({% $states.input.TaskStatus = 'completed' %} でもOKだと思う)

「変数」の利用
また「TaskId」と「ArticleID」はハンズオンでは数珠つなぎのように渡していますが、ここは「変数」機能を使うと楽です。
「StartSpeechSynthesisTask」ブロックの「変数」に以下のように設定します。(変数名はルールに沿っていれば何でもいいです。)

{
  "varArticleId": "{% $states.input.Item.ArticleID.S %}",
  "varTaskId": "{% $states.result.SynthesisTask.TaskId %}"
}

そして「GetSpeechSynthesisTask」ブロックの「引数と出力」の「Text」に {% $varTaskId %} と設定すればOKです。

8.音声ファイルの出力先情報を DynamoDB テーブルに格納する

「DynamoDB UpdateItem」ブロックの「引数と出力」の「引数」
以下のように記載(「ArticleID」と「:S3URLRef」がポイント)

{
  "TableName": "article",
  "Key": {
    "ArticleID": {
      "S": "{% $varArticleId %}"
    }
  },
  "UpdateExpression": "SET S3URL = :S3URLRef",
  "ExpressionAttributeValues": {
    ":S3URLRef": {
      "S": "{% $SynthesisTask.OutputUri %}"
    }
  }
}

「ArticleID」は先ほど「StartSpeechSynthesisTask」ブロックの「変数」に設定した「varArticleId」を使用しています。
このように「変数」を使用する事で、わざわざ数珠つなぎをしなくても、他のブロックの値を参照できるようになります。

宣伝

今週10/11(土)に金沢・近江町市場で「JAWS Festa 2025」が開催されます!

jawsfesta2025.jaws-ug.jp

そしてその中で業務効率化をさらに加速させる、ノーコードツールとStep Functionsのハイブリッド化というタイトルで、ノーコードツールおよびStep Functionを使用した業務効率化やStep Functionsの効果的な使用方法などについてお話しさせていただきますので、よろしくお願いいたします。

それでは、今回はこの辺で。

*1:公式ページ「AWS Hands-on for Beginnersシリーズ一覧」というリンクがあるのですが、現在はAWS Hands-on for Beginners専用ページ自体がなくなっているようです

*2:ハンズオンで行うステートマシン実行も一応課金対象になるので、気になる人は注意しておきましょう(間違いなく無料枠で収まる範囲ですが...)

*3:ただし、Lambdaの実行とMapフロー(配列などのデータセット内データの並列処理ワークフロー)はこのハンズオンでは触りません




以上の内容はhttps://makky12.hatenablog.com/entry/2025/10/06/120500より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14