4
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

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

Posted at

はじめに

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

最近、業務で久しぶりに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の基本的な機能・操作を理解しようというハンズオンです。

  • 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」が開催されます!

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

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

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

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

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

4
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?