[2026年版]AWS Step Functionsを利用したローコード画像分類ワークフロー構築ハンズオン

[2026年版]AWS Step Functionsを利用したローコード画像分類ワークフロー構築ハンズオン

AWS Step Functionsを利用してAWSサービス間をローコードで接続して使うハンズオンです。Amazon Rekognitionを使い、犬と猫の画像を分類していきます。
2026.03.01

こんにちは、臼田です。

みなさん、AWSの勉強してますか?(挨拶

今回はAWS上のサーバレスサービスやAIサービスを組み合わせて1つの動く仕組みを実現するハンズオンコンテンツを作りましたので紹介します。

ハンズオン概要

このハンズオンではAmazon S3に動物の画像をアップロードして、その画像が犬なのか?、あるいは猫なのか?をAmazon Rekognitionを利用して分類して保存先を分けるという仕組みをAmazon Step Functionsを利用して構築します。構成図は以下のようになります。

sfn-rekognition

このハンズオンを利用する方はこの構成図だけでパッとどのようなものかイメージできないかもしれませんが、ゆっくり説明していきますので安心してください。

主にAWSの基本的な使い方はわかっていて、いろんなサービスを触ってみたい方やサーバレスサービスの組み合わせ方を学びたい方を対象としたハンズオンです。

自由に利用できるAWSアカウントを所持しており、操作するためのIAMの設定など基本的な準備ができていればこの手順を実行できます。

ハンズオン手順

ハンズオンの大まかな手順は以下のとおりです。

  1. S3バケットの作成
  2. IAMロールの作成
  3. Step Functions ステートマシンの作成
  4. EventBridgeルールの作成
  5. 動作テスト
  6. クリーンアップ

1. S3バケットの作成

AWSマネジメントコンソールを開き、検索欄からAmazon S3を開きます。ちなみに、開いている画面の右上で現在のリージョンが確認できるので、常に適切なリージョンで操作しているかは気にしましょう。今回のハンズオンでは東京リージョンを利用していきます。

001_sfn_rekognition

Amazon S3の画面を開いたら、S3バケットを作成します。

002_sfn_rekognition

バケット名は任意の名前で問題ありませんが、ここではpet-classification-[適当な英字6文字程度]とします。注意点としては、Amazon S3のバケット名は全世界で一意の名前、つまり他の人と被らない名前を付ける必要があります。名前以外はそのままで下までスクロールして「バケットを作成」しましょう。

003_sfn_rekognition

作成できたら、作成したバケットの詳細画面を開きます。一覧から開いても、ポップアップから開いてもどちらでもよいです。

004_sfn_rekognition

開いたら、画像を保存するための下記4つのフォルダを作成していきます。

  • inbox
  • dogs
  • cats
  • others

「フォルダの作成」からこれらを作成していきます。

005_sfn_rekognition

フォルダ名を入力して作成していきます。

006_sfn_rekognition

フォルダの作成が確認できました。4つすべて同様に作業しましょう。

007_sfn_rekognition

すべてのフォルダが作成できていることを確認してください。

008_sfn_rekognition

これでS3の準備は完了です。

2. IAMロールの作成

続いて、AWS Step Functionsから利用するIAMロールを作成していきます。

IAMのマネジメントコンソールを開き、左カラムの「ロール」を開いて「ロールを作成」を押します。

009_sfn_rekognition

信頼されたエンティティタイプで「AWSのサービス」を選択し、ユースケースで「Step Functions」を選択し、「次へ」

010_sfn_rekognition

許可ポリシーの画面はそのまま「次へ」

011_sfn_rekognition

ロール名にpet_classification_roleと入力し、「ロールを作成」

012_sfn_rekognition

作成したロールの詳細画面を開きます。

013_sfn_rekognition

「許可を追加 -> インラインポリシーを作成」を選択します。

014_sfn_rekognition

「JSON」タブを選択し、以下のJSONを貼り付けてください。バケット名は自分のものに変更してください。

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "s3:GetObject",
        "s3:PutObject"
      ],
      "Resource": "arn:aws:s3:::pet-classification-xxxxxx/*"
    },
    {
      "Effect": "Allow",
      "Action": [
        "rekognition:DetectLabels"
      ],
      "Resource": "*"
    }
  ]
}

バケット名の後ろにある/*を消さないように気をつけましょう。

015_sfn_rekognition

次へ進んだらポリシー名にpet_classification_policyと入力し、「ポリシーの作成」を押します。

016_sfn_rekognition

これでIAMロールの準備が完了です。

3. Step Functions ステートマシンの作成

続いてStep Functionsのマネジメントコンソールを開きます。ここからがローコードの本番ですね。「今すぐ始める」からステートマシンを作成していきます。

017_sfn_rekognition

「自分で作成する」から作成します。

018_sfn_rekognition

ステートマシン名にpet_classification_machineを入力して「続行」します。

019_sfn_rekognition

1つ目のステートを作っていきます。 左パネルの検索ボックスでRekognitionと入力します。様々なAmazon RekognitionのAPIが一覧で出てきます。その中で「DetectLabels」をドラッグしてフローのStartとEndの間に配置します。

020_sfn_rekognition

「DetectLabels」は画像からそこに写っているものを特定してラベルとして返してくれます。今回は写真から犬や猫が写っていることを特定してもらいます。

「引数と出力」タブを開き引数に以下を入力していきます。

{
  "Image": {
    "S3Object": {
      "Bucket": "{% $states.input.detail.bucket.name %}",
      "Name": "{% $states.input.detail.object.key %}"
    }
  },
  "MaxLabels": 10,
  "MinConfidence": 80
}

これは「DetectLabels」をリクエストする際に、ステートが受け取ったS3のバケット名やオブジェクト名を抽出して渡すための記述です。

同様に出力には以下を入力します。

{
  "detail": "{% $states.input.detail %}",
  "rekognitionResult": {
    "Labels": "{% $states.result.Labels %}"
  }
}

こちらは「DetectLabels」からのレスポンスを受け取り、次のステートに渡すための記述です。

021_sfn_rekognition

次のステートは分岐です。左パネルの検索欄の文字を削除した後「フロー」タブを開き、「Choice」をドラッグして「DetectLabels」の下に配置します。名前をCheckAnimalTypeに変更します。

022_sfn_rekognition

分岐の条件を作っていきます。「Choice」ステートが選択された状態で右パネルの「Rule 1」の編集ボタン(鉛筆マーク)をクリックします。

023_sfn_rekognition

条件(Condition)に以下を入力します。

{% $count($states.input.rekognitionResult.Labels[Name = "Dog"]) > 0 %}

024_sfn_rekognition

これは「DetectLabels」の結果に「Dog」が含まれているかを確認する条件です。ついでにこのルールの下の方のコメントにDogsと入れておき、エディター上でわかりやすく表示するように変更します。

025_sfn_rekognition

少し上に戻り、「閉じる」ボタンを押します。

026_sfn_rekognition

同じように猫の分岐も作成します。「Add new choice rule」をクリックして新しいルールを作成し、「Rule 2」を追加します。

027_sfn_rekognition

「Rule 2」の編集ボタンを押して条件(Condition)に以下を入力します。

{% $count($states.input.rekognitionResult.Labels[Name = "Cat"]) > 0 %}

028_sfn_rekognition

ルールの下の方のコメントにCatsと入れます。

029_sfn_rekognition

少し上に戻り、「閉じる」ボタンを押します。

030_sfn_rekognition

ここまでで、エディター上ではこのような状態になっています。

031_sfn_rekognition

分岐後の処理を追加していきます。左パネルの検索ボックスで「アクション」タブに戻してS3と入力し、「CopyObject」をドラッグしてChoiceのRule 1(Dogs)の下に配置します。名前をCopyToDogsにします。

032_sfn_rekognition

引数に以下を入力します。

{
  "Bucket": "{% $states.input.detail.bucket.name %}",
  "Key": "{% 'dogs/' & $split($states.input.detail.object.key, '/')[1] %}",
  "CopySource": "{% $states.input.detail.bucket.name & '/' & $states.input.detail.object.key %}"
}

033_sfn_rekognition

これは画像ファイルを「dogs/」配下にコピーする処理です。

同様にもう1つ「CopyObject」をドラッグしてChoiceのRule 2(Cats)の下に配置し、名前をCopyToCatsに変更します。引数に以下を入力します。

{
  "Bucket": "{% $states.input.detail.bucket.name %}",
  "Key": "{% 'cats/' & $split($states.input.detail.object.key, '/')[1] %}",
  "CopySource": "{% $states.input.detail.bucket.name & '/' & $states.input.detail.object.key %}"
}

034_sfn_rekognition

犬でも猫でも無かった場合は「others/」へコピーするようにします。

もう1つ「CopyObject」をドラッグしてChoiceのDefaultの下に配置し、名前をCopyToOthersに変更します。引数に以下を入力します。

{
  "Bucket": "{% $states.input.detail.bucket.name %}",
  "Key": "{% 'others/' & $split($states.input.detail.object.key, '/')[1] %}",
  "CopySource": "{% $states.input.detail.bucket.name & '/' & $states.input.detail.object.key %}"
}

035_sfn_rekognition

これでステートマシンの編集が完了しました。この状態になっています。

036_sfn_rekognition

ステートマシンを保存しますが、先程作成したIAMロールをアタッチします。

上部にある「設定」を開き、実行ロールで先程作成したIAMロールを選択して右上の「作成」を押します。

037_sfn_rekognition

無事ステートマシンが作成できました。

038_sfn_rekognition

4. EventBridgeルールの作成

続いてS3にファイルがアップロードされたことをきっかけにイベントを発生させ、AWS Step Functionsに繋いでいくためのAmazon EventBridgeのルールを設定していきます。

ルールの作成の前に、S3バケットがEventBridgeと連携できるようにするため、バケットの設定を行います。

先程作成したバケットの「プロパティ」タブを開きます。

039_sfn_rekognition

「Amazon EventBridge」セクションで「編集」を押します。

040_sfn_rekognition

「EventBridge にイベント通知を送信する」を「オン」にして保存します。

041_sfn_rekognition

変更できました。S3バケット側の準備は完了です。

042_sfn_rekognition

続いて、EventBridgeのマネジメントコンソールを開き、「ルールを作成」していきます。

043_sfn_rekognition

「AWSサービスイベント」から選択していきます。

044_sfn_rekognition

イベントの一覧からS3の「Object Created」イベントを「トリガーイベント」にドラッグアンドドロップします。

045_sfn_rekognition

下にスクロールして右側のイベントパターンで以下を入力します。この際、S3のバケット名は各自のバケット名に置き換えてください。

{
  "source": ["aws.s3"],
  "detail-type": ["Object Created"],
  "detail": {
    "bucket": {
      "name": ["pet-classification-xxxxxx"]
    },
    "object": {
      "key": [{
        "prefix": "inbox/"
      }]
    }
  }
}

このイベントパターンでは、「inbox/」配下にオブジェクトが作成されたときにイベントが発生する条件です。

046_sfn_rekognition

続いてターゲットの設定です。左カラムのターゲットタブを開き、「Step Functions ステートマシン」をターゲット側にドラッグアンドドロップします。

047_sfn_rekognition

下の設定でステートマシンを先程作成したものを選択し、実行ロールは自動で作成するためそのままで右上作成を押します。

ルールの名前を付ける画面でpet_classification_ruleと入力して「作成」します。

048_sfn_rekognition

これですべての準備が完了しました。

5. 動作テスト

実際に動かしていきましょう。

S3バケットのinbox/フォルダを開きます。ここに動物の画像ファイルをアップロードしましょう。画像はフリーのものなどを自由に準備してください。注意点としてはイラストだと上手く行かないので、写真を準備しましょう。

049_sfn_rekognition

今回は一度に犬、猫、うさぎの画像をアップロードしてみます。一度に複数でも問題ありません。

050_sfn_rekognition

アップロードしたら、ステートマシンを見に行きます。「実行」タブからアップロードした画像の数だけステートマシンが呼び出された実行履歴が確認できます。どれか1つを開いてみましょう。

051_sfn_rekognition

こちらの実行履歴では少し下にグラフビューでステートマシン上でどのように実行されたかが表示されます。緑色が成功した場所で、もし赤くなっていれば失敗したステートが分かります。各ステートを選ぶと詳細が確認できます。ここでは「CheckAnimalType」のステートを開き、どのような入力があったか確認できます。「Rabbit」が含まれているためその他の分岐になっていることがわかります。

052_sfn_rekognition

別の実行結果では「Cat」になっていることが分かります。

053_sfn_rekognition

こちらは「Dog」でした。

054_sfn_rekognition

そしてS3バケットの各フォルダも確認していきます。それぞれ適切なフォルダにコピーされていることが確認できました。

055_sfn_rekognition

これにて、画像の分類が正常に動作することが確認できました。

6. クリーンアップ

最後に、作ったリソースを削除していきます。

削除するリソースは以下の通り。

  • EventBridgeルール
  • Step Functionsステートマシン
  • IAMロール(Step Functions用)
  • IAMロール(EventBridge用)
  • S3バケット

EventBridgeコンソールでルール一覧にてpet_classification_ruleを選択して削除します。

056_sfn_rekognition

Step Functionsコンソールでpet_classification_machineの詳細画面「アクション」から削除します。

057_sfn_rekognition

IAMロール一覧からpet_classification_roleを検索して削除します。

058_sfn_rekognition

同じくIAMロール一覧からAmazon_EventBridge_Invoke_Step_Functions_...を検索して削除します。自動作成されているので名前はその時々で変わります。

059_sfn_rekognition

S3バケットの一覧からバケットを選択して「空にする」を押します。オブジェクトが入っているバケットは直接削除できないためです。

060_sfn_rekognition

「完全に削除」と入れて空にします。

061_sfn_rekognition

バケット削除画面でバケット名を入力して「バケットを削除」します。

062_sfn_rekognition

以上でリソースの削除完了です。

まとめ

以上でAWS Step Functionsを利用したローコード画像分類ワークフロー構築ハンズオンは終了です。

今回はAIサービスであるAmazon Rekognitionを呼び出しましたが、AWS Step FunctionsではAWSのたくさんのサービスと直接連携ができるため、別のAIサービスやデータベース、他にもたくさんのサービスと連携でき無限の可能性があります。

通常こういったサービス間連携をプログラムで作成していくと、状態が分かりづらかったりエラーの解消が大変だったりしますが、AWS Step Functionsでは実行履歴の中で各ステートでどのような状態だったかまで詳細に確認できたり、フローの組み換えも直感的でわかりやすいです。

ぜひいろんな形で活用してみてください。

この記事をシェアする

FacebookHatena blogX

関連記事