はじめに
Amazon Bedrock(以下Bedrock)のStability AIのAPIを叩いて画像生成するアプリを趣味で作ってます。(仕事はインフラ系なので、その上で動いているものってどんな感じなのか知りたい)
気が向いたときに少しずつ開発を進めているのですが、フロントエンドはなかなか手が進まず、簡単なhtml書いてlocalhost立ててAPIリクエスト飛ばしてお茶を濁していました。
Advent Calendarの時期なので、API叩くコンテナイメージ作ってApp Runnerでデプロイして記事にすることにしました。
構成はこんな感じです。サーバレスサービスで組んでます。
Lambdaはいったんプロンプトをコードにベタ打ちし、Stability AIにリクエストを投げ、
生成された画像はレスポンスとして返しつつ、S3にも保管します。
バックエンドはAPI Gateway+Lambda+Bedrock+S3で作ってます。
Amazon Bedrockで画像生成&S3保存するPythonコードを書く
Amazon Bedrockに画像生成のプロンプトを作ってもらうPythonコードを書く
余談ですが、Bedrockの1年前とだいぶUI変わりましたね、以前はリスト形式でAIモデルが出てきた記憶があります。
Docker Imageを作る
とりあえずAPI Gatewayにリクエストを送るんだ…という勢いでDockerfileとapp.pyとrequirements.txtを書きました。app.pyだけ載せてみますが、今後ブラッシュアップします。
import requests
from flask import Flask, jsonify
app=Flask(__name__)
@app.route('/hoge')
def hoge():
try:
response = requests.get('API GatewayのリクエストURL')
return jsonify(response.json())
except requests.exceptions.RequestException as e:
return jsonify({'error':str(e)}),500
if __name__ == '__main__':
app.run(debug=True,host='0.0.0.0',port=8080)
App Runnerを立てる
docker imageをECRのプライベートリポジトリにpushし、App Runner側でリポジトリを指定してアプリをデプロイします。
使ってみる
アプリにアクセスしたらこんな画面になった……画面作るのは今後の課題にします。
S3には画像が保存されていました。お題はbeautiful skyです。
おわりに
亀の歩みというのも亀に失礼なくらいのんびりした進捗ですが、html+localhostよりは様になった…と思います。
Flaskを勉強してアプリの体裁をもうちょっと整えたいです。