AWS最新情報を“グラレコ風”で自動配信!Dify × サーバーレス構成の舞台裏

Amazon Web Services(AWS)の最新情報キャッチアップしてますか?
AWSの最新情報は、「AWS News Blog」や「What’s New with AWS?」で確認可能です。

しかしながら、英語記事で結構な頻度で更新されるのため、見るのが大変...
そんな方向けに、ディーネットでは、AWSの最新情報記事をグラレコ(グラフィックレコーディング)風HTMLで紹介しています。

参考:AWS最新情報) AWS News Blog / What’s New with AWS?
参考:AWS最新情報のグラレコ風HTML一覧)最新のAWSニュース記事
参考:課題と解決策詳細)AWS最新ニュースをグラレコ風HTMLでキャッチアップ

グラレコ風HTMLで要約
グラレコ風HTMLで要約

この記事では、下記の課題解決を行ったシステムアーキテクチャの解説を行っていきます。

▶︎ 課題 「AWSの最新情報英語記事は、毎夜 2 時に 10 本更新。人力追従は無理」
▶︎ 解決 「Dify × Serverless で日本語グラレコを自動生成」

とはいえ、私自身サーバレスは初挑戦。“もっと良いやり方があればぜひ教えてください” — そんなスタンスで書いています。

Difyとは

Dify は、大規模言語モデル(LLM)を使った業務アプリを “ブロックを並べるだけ” の感覚で作れるオープンソース・プラットフォームです。画面上でワークフローを視覚的に組み立てるだけで AI チャットボットや自動化フローを構築できます。

SaaS版とセルフホスト版が存在しており、セルフホスト版ではAmazon EC2やAmazon ECS上で動作させることが可能です。

参考:Dify公式ページ / Dify入門1:Difyとは?AI活用を加速するノーコード開発ツールを徹底解説!

システムの全体構成

全体アーキテクチャ

このDifyを使って、英語記事を和訳・要約してグラレコ風HTMLへ変換しています。Difyで作成したAIアプリケーションは、専用の画面から実行できるのはもちろんですが、APIとして呼び出しをすることが可能です。

このDifyで作成した生成AIアプリケーションのAPIを、AWSを使ったサーバーレスアーキテクチャと組み合わせた構成となっています。

構成図としては次の通りです。

全体アーキテクチャ
全体アーキテクチャ

主要な要素は2つ

要素を大きくわけると、次の2つに分解できます。

  1. グラレコ風HTML作成機能(主に上の行)
  2. 一覧画面表示部分(主に下の行)

以降でこの2つの要素について解説していきます。

グラレコ風HTML作成機能

グラレコ風HTML作成機能では、定期的にRSS Feedを取得します。最新の記事があった場合に、Difyを使ってグラレコ風HTMLを作成しています。

最新記事作成依頼

図のAmazon EventBridgeからAmazon SQSまでの部分で、最新の記事取得とグラレコ風HTMLの作成指示を行っています。

最新記事作成依頼
最新記事作成依頼

具体的には、Amazon EventBridgeで定期的にAWS Lambdaを呼び出します。呼び出されたAWS Lambdaでは、RSS Feedを取得し、最新記事があった場合にAmazon SQSへ記事内容を送信します。

AWS LambdaからDifyを呼び出すときのハマりどころ

以前は、Amazon SQSは利用していませんでした。現在は、下記のような最新記事の投稿数の片寄りを平準化させるために利用しています。

AWSの最新情報は「特定の時間帯(日本時間の2時頃)に記事投稿が集中」します。過去には10件ほどの最新情報が投稿されたこともありました。加えて、Difyで一記事を変換するのには数分の時間がかかります。記事本数によっては、AWS Lambdaがタイムアウトすることがありました。対策として、DifyのAPI呼び出しを非同期にしましたが、今度はDify側の高負荷が発生することになりました。

そのため、Amazon SQSを挟むことで、AWS LambdaとDifyの処理時間と並行稼働数の安定化を図っています。

グラレコ風HTML作成用のAWS Lambda起動

グラレコ風HTML作成用のAWS Lambda起動
グラレコ風HTML作成用のAWS Lambda起動

Amazon SQSへメッセージが送信されると、グラレコ風HTML作成用のAWS Lambdaがトリガーされます。このLambda関数で1つの記事をグラレコ風HTMLに変換しています。

トリガーのオプションで、最大同時実行数というものがあります。最小の設定値は2です。今回は最小値を設定することで、同時に作成可能なグラレコ風HTMLを2個に制限しています。結果として、タイムアウトやDifyの高負荷問題の対処となっています。(なぜ最小値は1ではないのでしょうか?)

Amazon SQSのハマりどころ

ちなみに、今回Amazon SQSを初めて使いました。起動されるLambda関数に渡されるキューレコードは1つと思い込んでいたのですが、複数レコード同時に渡すことができるようです。同じくトリガーのオプションに、バッチサイズという設定で変更が可能です。最初デフォルト値の10で実装してみたところ、一つのLambda関数で最大10件の記事作成が動作しました。しかも、Lambda関数のトリガーはキューに送信された数だけ行われるため、同じ記事が何度も変換される状態に陥りました。当初無限ループに陥った?と思いだいぶ焦りました。。。最終的には、バッチサイズの設定は1としています。

参考:Amazon SQS での Lambda の使用

グラレコ風HTML作成部分

グラレコ風HTML作成用のAWS Lambda起動
グラレコ風HTML作成用のAWS Lambda起動

AWS Lambdaの処理内容

グラレコ風HTML作成用のAWS Lambdaでは、DifyのAPI呼び出しを実施しています。また、実施結果をAmazon DynamoDBへ保存しています。

Difyでの処理内容

Difyの内部では、大まかに4つの処理を行っています。

  1. 【WebScraper】最新記事へのWebアクセス
  2. 【LLM】記事内容の要約
  3. 【LLM】グラレコ風HTML作成
  4. 【AWS Tools】Amazon S3へのアップロード
Difyでの処理内容
Difyでの処理内容

いずれも、Dify標準のブロックやツールを使って実装しています。利用しているLLMは「Claude 4.0 Sonnet」です。Amazon Bedrockを使うと、Claudeの利用料をAWS利用料にまとめることができるのも嬉しいポイントですね。

生成AIでHTMLを作成するときのハマりどころ

実際に生成AIを使ってHTML作成するとわかるのですが、レイアウトの一貫性を持たせるのが意外と難しいです。HTML作成部分は、あらかじめ決めたcssのclassを利用するようにプロンプトしています。そのうえで、固定のヘッダとフッタに、動的に作成したボディ部分を結合することで作成しています。

一覧画面表示部分

グラレコ風HTML作成部分
グラレコ風HTML作成部分

一覧画面は標準的なHTMLで作成しています。一覧部分は、情報取得用のAPIを呼び出しjavascriptで動的に構築しています。APIの実装は、Amazon API GatewayとAWS Lambdaです。作成時に登録されたAmazon DynamoDBをデータソースとして、最新の500件の情報を取得し返却しています。

まとめ

この記事では、「最新のAWSニュース記事」を支える裏側の実装についてご紹介しました。

Difyを使うことで、生成AIアプリケーションを簡単に作ることができ、様々なシステムからAPIとして呼び出しを行うことが可能です。

AWSの最新情報を日本語で受け取りたいかたは、ぜひ定期的にチェックしてみてください。

返信を残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA