$30 off During Our Annual Pro Sale. View Details »

Cloudflareスタックで月間1200万UUの経済メディアにアバター画像生成サービスを作る...

Cloudflareスタックで月間1200万UUの経済メディアにアバター画像生成サービスを作る / Cloudflare Developer Platform for AI avatar service

Cloudflare Meetup Niigata #1で講演しました。
https://cfm-cts.connpass.com/event/322901/

副読書です:

Cloudflareスタックをモリモリ使ってアバター画像生成サービスを作った話
https://zenn.dev/monicle/articles/cloudflare-stack-ai-service

Yukiya Nakagawa

August 25, 2024
Tweet

More Decks by Yukiya Nakagawa

Other Decks in Technology

Transcript

  1. 自己紹介 • 中川幸哉 a.k.a Nkzn(なかざん) • ‘86世代🐰の37歳 • 新潟生まれ新潟育ち(大学だけ会津) •

    8歳と5歳の父で妻の夫 • 2011〜2021年は農業IT🌾の人 • 2021年から株式会社モニクル ◦ 資産運用お手伝いサービス「マネイロ」のIT裏方 ◦ 経済メディア「LIMO」の編集部付きIT裏方 0:05
  2. キャラつく AIはCloudflare製品で固めました その他のライブラリ等は ↓の記事を読んでね https://zenn.dev/monicle/articles/cloudflare-stack-ai-service サービス名 役割 Pages + Functions

    Webサイトホスティング、サーバーレス JavaScript Workers サーバーレスJavaScript Queues ジョブキュー Workers AI 生成AI D1 リレーショナルデータベース( SQLite) R2 オブジェクトストレージ(Amazon S3互換ストレージ) LogPush ログ転送サービス Turnstile CAPTCHAみたいなやつ
  3. • A. 多いよ? ◦ Workers × 5 ◦ D1 ×

    2 Q. なんか多くない?
  4. 分けても 使いづらくはなかった // データベース用ワーカー import { WorkerEntrypoint } from "cloudflare:workers"

    ; export default class extends WorkerEntrypoint { async fetch() { return new Response( "Hello from Worker" ); } async getItem(id) { // ORMを使ってデータベースからアイテムを取得 const item = await this.env.prisma.items.findUnique({ where: { id } }); return new Response(item); } } // 利用側のワーカー export default { async fetch(request, env) { const item = await env.DB.getItem( 1); return new Response(item); } } Workers RPCを使うと 別ワーカーを簡単に呼べる Data Access Objectのパ ターンに近い感覚で扱えて便 利だった RPC対応によりCloudflare Workers間の連携がすごいことになった https://zenn.dev/chimame/articles/f86db24897be6a 別ワーカーをメソッド呼び出し 感覚で扱える
  5. • HTTP呼び出しのワーカーは30秒制限あり • キュー経由で呼び出されたワーカーは15分まで動ける ◦ 参考: https://developers.cloudflare.com/workers/platform/limits/#worker-limits • AI画像生成が常に30秒以内で終わる確証もないので、念のためキューを 挟むことにした

    • キュー管理ライブラリのKiribiを挟むことで、キューの処理内容をD1に保 存しておき、キューが失敗してもリトライできるようにした ◦ https://kiribi.pages.dev/ キュー&ワーカー(& DB)