AWS Step Functions × Amazon Bedrock で毎朝6時に俳句を自動生成・配信してみた

俳句っていいですよね。
最近は春・夏・秋・冬が初夏・真夏・晩夏・冬のようになってきたように感じますが、それでも日本人たるもの四季というものはやはり感じていたいものです。俳句はそんな季節を感じさせてくれる日本古来の文化・芸術です。
そんな俳句が毎日届くとみなさん嬉しいですよね?
というわけで、今回 AWS Step Functions と Amazon Bedrock を使って、そんな俳句が毎朝6時に自動で配信される仕組みを作りました。
私自身、営業担当で開発とは全く無縁のため社内のエンジニアに大いに助けてもらって作り上げました。最後までご覧いただけますと幸いです。
目次
AWS Step Functions とは
AWS Step Functions は、複数の AWS サービスやタスクを順序立てて自動実行できるワークフロー管理サービスです。
いわば AWS 版「司会進行役」で、AWS Lambda や Amazon SNS、Amazon Bedrock などの役者たちに「次は君の出番だよ」と声をかけ、スムーズに物語(処理)を進めてくれます。
大きな特徴は以下の3つです。
- マネージドサービス連携の容易さ
今回用いる AWS Lambda、AmazonSNS、Amazon Bedrock など多くの AWS サービスをネイティブで呼び出し可能です。
- エラー処理と再実行
失敗時のリトライや異常終了時の別ルート処理が簡単に設定できます。
- 視覚的なワークフロー設計
GUI 上でステップを並べるだけで、実行の流れや条件分岐、エラー処理まで直感的に作れます。(が、今回はコードベースで作成しました。)
今回は Step Functions が俳句作成チームの「舞台監督」として働き、日付情報の取得からメール配信までを一手に仕切っています。
Amazon Bedrock とは
Amazon Bedrock は、複数の生成 AI モデルを API 経由で利用できるサービスです。
Claude、Titan、Jurassic-2 など様々なモデルを選べ、インフラ構築なしでプロンプトを送ればすぐに生成 AI を使えます。
今回の俳句配信システムでは、Claude 3 Haiku モデルを利用しました。
モデル名に「Haiku」と入っているだけあって、日本の俳句文化に(ある程度)理解がある…といいなぁ という期待を含めて選定しました。
後述しますが、しっかりと期待を裏切ってくれました。
AWS Step Functions × Amazon Bedrock で構成を考えてみた
今回考えた構成は下図の通りです。
【構成図】

流れ
① Amazon EventBridge が毎朝6時に AWS Step Functions を起動
② AWS Step Functions のステートマシンを実行
ステートマシン
1️⃣ S3 内の CSV ファイルを参照し今日の日付情報を確認(※)
2️⃣ 「今日がなんの日か」という日付情報が Lambda へ戻る
3️⃣ 取得した日付情報を基に Amazon Bedrock へ俳句生成指示
4️⃣ 生成した俳句が Lambda へ戻る
5️⃣ 俳句を SNS へ渡す
6️⃣ SNS が俳句を入れたメールを送信する
※事前に WEB サイトを検索して日付に紐づく語呂合わせや記念日などの情報を CSV ファイルに落とし込んだものを S3 に保存しています。
最適かはさておき、思いつく限りシンプルな構成を検討してみました。次は実際にこの構成に基づき構築していきます。
構築してみる ─ AWS Step Functions × Amazon Bedrock
まずは EventBridge で cron 式スケジュールを作成し、Step Functions を毎朝6時に起動するように設定します。
sawada-haiku-generation というスケジュールを作成しました(ちゃんと命名規則を定めてから作成すればよかったと若干後悔)。Amazon EventBrdige のスケジューラー機能は設定項目が少なく簡単ですね。

続いて、AWS Lambda の関数を作成します。
エンジニアと ChatGPT 4o に助言をいただきながら作成しました。
CSV ファイル名が「haiku-generate-sawada.csv」、これを保存している S3 バケット名が「sawada-haiku-generate」とやはり何も考えずに命名していますね(この関数名は「goodmorning-haiku」)。

AWS Lambda の関数ができたので、次は本題の AWS Step Functions のステートマシンを構築します。
例によってエンジニアと ChatGPT 4o に助言をいただきながら JSON を作成し、これをステートマシンのコードに貼り付け。ChatGPT は勝手にエラーハンドリングまで JSON に落とし込んでくれました。頼りになりますねえ。

「俳句生成」ステップでは Bedrock に投げるプロンプトを検討します。
俳句の要素を盛り込み、これに基づいた生成を行うようプロンプトを作成しました。
先に述べた AWS Step Functions の「視覚的なワークフロー設計」について、今回の例でいくと下図のような GUI となります。

実行してみた ─ AWS Step Functions × Amazon Bedrock
構築が完了したので実際にテストしてみます。
様々なリソースについて命名規則を考えず作成していたため、これが仇となり早速参照先がありませんとのエラーが出てきました。
これらのチューニングを行い、改めてテストしてみます。
するとステートマシンは期待した通りに動いてくれました!そして生成された俳句がこちら。
四季の移ろい
愛と健康を祝福する
ハッピーフォーエバー
この俳句では、四季の移り変わりの中で、永遠の愛と健康を祝福する「ハッピーフォーエバー」の日を表現しています。季節の移り変わりは時間の流れを示しますが、愛と健康という大切なものは永遠に続くという意味が込められています。「ハッピー」という語呂の良い言葉で制定された特別な日を、自然の移り変わりの中で祝福する様子を詠みました。
???
「五・七・五」ではなく「七・九・九」の何かがメール送信されました。これは Claude 3 haiku の内在律を表現した自由律俳句なのでしょうか。
しかし、「ハッピーフォーエバー」の日なんてものは検索しても出てきません。
Claude 3 haiku の感性も大事にしたいところですが、もちろんやり直しです。
その後、何度かプロンプトを修正し、やっとこさそれらしいものを生成してくれるようになりました。
それがこれです。
夏の空
遊び心咲く
フォーエバー
この俳句は、「ハッピーフォーエバー」の日に寄せて作りました。
夏の晴れ渡った青空に、遊び心がはじける様子を表現しています。
「フォーエバー」の語呂合わせが、ハッピーな雰囲気を醸し出しています。
依然として「ハッピーフォーエバー」の日にこだわり続けていますが、夏の季語である「夏の空」が入っていますし、字余りではあるものの当初よりかなり良くなりました。及第点です。
・・・と褒めたものの、翌日にはまたわけのわからない俳句が送られてきました。
夏空や / はしご上りゆく / 消防車
今日は「はしご車の日」の日です。「は(8)しご(5)」の語呂合わせから8月5日に制定された車両関連の記念日です。この俳句では、夏の季語「夏空」と、はしご車が上っていく様子を詠んでいます。はしご車は消防車の一種で、火災や事故などの緊急時に活躍する重要な車両です。この俳句は、そんな消防車の活躍を詠っているものです。
消防車の活躍はないにこしたことはないでしょう。。。
というわけでもう少しプロンプトを修正していこうと思います。
まとめ
今回は、AWS Step Functions と Amazon Bedrock を組み合わせて、毎朝6時に俳句を自動生成・配信する仕組みをご紹介しました。
AWS は本当に多種多様なサービスを提供しており、それぞれが得意分野を持っています。AWS Step Functions のようにサービス同士をつなぐ「舞台監督」がいれば、Amazon Bedrock のような生成 AI から、AWS Lambda、Amazon SNS、Amazon EventBridge といった周辺役者まで、組み合わせ次第で実現できることは無限大です。
しかしながら、その組み合わせや設計は決して簡単ではありません。今回のようにエンジニアへ相談し、試行錯誤を繰り返しながらようやく形になった事例からもわかるように、AWS の力を最大限引き出すには、知識・経験・設計力が欠かせません。
当社では「cloud link」というサービスを提供しており、AWS インフラの設計・構築から運用保守、監視、障害対応までをフルサポートしています。
「やりたいことはあるけど、設計や実装の方法がわからない」「構築後の運用や障害対応に不安がある」といった方は、ぜひお気軽にご相談ください。
最後までお読みいただきありがとうございました。

元記事発行日: 2025年08月29日、最終更新日: 2025年08月29日