Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Step Functionsで始めるサーバーレス入門 〜 つないで動かすAWSサーバーレス

Sponsored · SiteGround - Reliable hosting with speed, security, and support you can count on.

Step Functionsで始めるサーバーレス入門 〜 つないで動かすAWSサーバーレス

2026/04/11 (土) JAWS-UG上越妙高#6 re:Boot にて発表した資料

イベントページ
https://jawsug-joetsumyoko.connpass.com/event/382075/

Avatar for kasacchiful

kasacchiful PRO

April 11, 2026

More Decks by kasacchiful

Other Decks in Programming

Transcript

  1. 笠原 宏 (@kasacchiful) クラスメソッド株式会社 データ事業本部 ビジネスソリューション部 ソリューションアーキテク ト 新潟県新潟市在住 JAWS-UG新潟

    / Python機械学習勉強会 in 新潟 / JaSST Niigata / ASTER / SWANII / Cloudflare Meetup Niigata / AI CRAFT Hacks Niigata / KomeKaigi AWS Community Builder (Serverless) 2025 Japan AWS Top Engineer / 2025 Japan All AWS Certifications Engineer AWS Samurai 2025 自己紹介 3
  2. 1. サーバーレスとは? 2. 今日の登場サービス紹介 3. Step Functions とは? 4. デモ:

    ファイル変換 & 通知パイプラインを作って動かす 5. まとめ アジェンダ 6
  3. AWSにはたくさんのサーバーレスサービスがある コードを実行する部品 → Lambda ファイルを保存する部品 → S3 データを保存する部品 → DynamoDB

    通知を送る部品 → SNS イベントを検知する部品 → EventBridge 部品をつなげて管理する部品 → Step Functions ← 今日の主役! これらを つなげて組み合わせる ことで、アプリケーションを構築する サーバーレス = 「部品を組み合わせる」アーキテクチャ 9
  4. 処理の流れを ステートマシン として定義する 各ステップ(ステート)を ブロックのように組み合わせる 主なステートの種類 ステート 説明 身近な例え Task

    処理を実行する 「この仕事をやって」 Choice 条件で分岐する 「もし〇〇なら△△、そうでなければ□□」 Parallel 並列に実行する 「これとこれを同時にやって」 Map 配列の各要素に対して繰り返し処理する 「リストの全てにこれをやって」 Wait 一定時間待機する 「5分待って」 Catch/Retry エラー時にリトライ・別処理 「失敗したらもう一回やって」 Step Functions = ワークフローを管理するサービス 14
  5. ビジュアルなワークフロー 実行状況がリアルタイムで 色付き 表示 どこで失敗したか 一目でわかる Workflow Studio GUI(ドラッグ&ドロップ) で組み

    立て コードなしで視覚的に設計 SDK統合 Lambdaなし でAWSサービスを直 接呼べる コードの量を大幅に削減! Step Functions の3つの強み 15
  6. S3にCSVファイルをアップロードすると、自動でJSONに変換して保存 & 結果を通知する 処理の流れ 1. S3にCSVファイルをアップロード 2. EventBridgeが検知して、Step Functionsを起動 3.

    Lambda (Python) でCSVを読み取り、JSONに変換 4. SDK統合 (S3:PutObject) で変換後のJSONをS3に保存 5. Choice で変換結果の成功/失敗を判定 6. SDK統合 (SNS:Publish) で結果を通知 7. エラー発生時は Catch でエラー通知 今日作るもの 17
  7. やること 1. Task (Lambda) を配置 → CSV→JSON変換の Lambda 関数を指定 2.

    Task (SDK統合: S3 PutObject) を配置 → 変換後のJSONをS3に保存 ★ ここは Lambdaなし! コード不要でS3に保存できる 3. Choice ステートを配置 → 変換結果で分岐 4. Task (SDK統合: SNS Publish) を配置 → 成功/失敗それぞれに通知 ★ ここも Lambdaなし! 5. Catch を設定 → エラー時にSNSでエラー通知 Workflow Studio の画面で実際にやってみます Workflow Studio で組み立てる 20
  8. import boto3 import csv import io import json s3 =

    boto3.client("s3") def handler(event, context): bucket = event["bucket"] key = event["key"] response = s3.get_object(Bucket=bucket, Key=key) content = response["Body"].read().decode("utf-8") reader = csv.DictReader(io.StringIO(content)) records = list(reader) return { "status": "success", "bucket": bucket, "key": key, "output_key": key.replace(".csv", ".json"), "body": json.dumps(records, ensure_ascii=False), "record_count": len(records) } Lambda関数 (Python): CSV → JSON 変換 21
  9. Lambda で S3 に保存する場合 # Lambda の中でわざわざ boto3 を使って保存するコードを書く s3.put_object(Bucket=bucket,

    Key=output_key, Body=json_body) SDK統合で S3 に保存する場合 Step Functions の設定画面で S3: PutObject を選ぶだけ パラメータはステートマシンの入出力からマッピング コード不要! SDK統合を使えば、 「つなぐ」だけでやりたいことが実現できる SDK統合のポイント 22
  10. 1. CSVファイルをS3にアップロード テスト用のCSVファイルを用意 name,category,location 越後湯沢温泉, 温泉, 湯沢町 妙高高原スキー場, スキー, 妙高市

    高田城址公園, 観光, 上越市 2. Step Functions の実行画面を確認 各ステートが 緑色 に変わっていく様子を見る 入力/出力のJSONデータを確認 3. 結果を確認 S3にJSONファイルが保存されていることを確認 SNS通知が届いていることを確認 実行デモの流れ 24
  11. [Lambda: CSV→JSON 変換] ↓ [SDK 統合: S3 PutObject] ← Lambda

    なし! ↓ [Choice: 成功?] ↓ (status = "success") [SDK 統合: SNS 成功通知] ← Lambda なし! ↓ 完了 Step Functions の実行画面では、 各ステートがリアルタイムで 緑色 に変わっていきます 成功時の実行フロー 25
  12. わざとエラーを起こす 存在しないファイルキーを指定してみる → Lambda がエラーを返す Catch の動作 [Lambda: CSV→JSON 変換]

    エラー発生! ↓ (Catch) [SDK 統合: SNS エラー通知] ↓ 完了 Catch が発動して、エラー通知が送られる Lambda の中で try-except を書かなくても、Step Functions 側でエラーハンドリングできる エラーハンドリングも見てみる 26
  13. Step Functions の定義 (抜粋) { "ConvertCsvToJson": { "Type": "Task", "Resource":

    "arn:aws:lambda:...:convert-csv-to-json", "Catch": [ { "ErrorEquals": ["States.ALL"], "Next": "NotifyError" } ], "Next": "SaveJsonToS3" } } "ErrorEquals": ["States.ALL"] ですべてのエラーをキャッチ → エラー時は NotifyError (SNSでエラー通知)に遷移 Catch の設定 27
  14. サーバーレスは「部品を組み合わせる」アーキテクチャ Lambda, S3, SNS などの部品を組み合わせてアプリケーションを構築 Step Functions はその「組み合わせ」を視覚的に管理できる ワークフローをビジュアルに設計・実行・監視 Workflow

    Studio でGUI操作も可能 SDK統合でコードを書かずに多くのことができる S3やSNSなど、AWSサービスを直接呼び出し Lambda を書く量を減らせる エラーハンドリングも Step Functions におまかせ Catch / Retry で堅牢なワークフローを簡単に実現 今日のまとめ 29
  15. Express ワークフロー: 大量・高頻度の実行に最適化されたモード 他のAWSサービスとの連携: DynamoDB, ECS/Fargate, Bedrock, SQS, ... Optimized

    integrations: 一部サービスはさらに最適化された統合あり 参考リンク AWS Step Functions ドキュメント AWS Step Functions ワークショップ Serverless Land - Step Functions Step Functions をもっと活用するには 30