はじめに
生成AIについて学習する際に作ったアプリをポートフォリオにするため、GCPへデプロイしました。
デプロイ自体が初めてだったので備忘録としてかきました。
アプリについて
PythonでAIチャットボットを作りました。
アプリはStreamlitを使って作っています。
使用した言語・サービス
- OS
- windows11
- Python
- LangChain
- Streamlit
- GCP
- Cloud Run API
- Cloud Build API(ビルド実行)
- Artifact Registry API(コンテナ保管)
- Secret Manager (GeminiのAPIキー用)
フォルダ構成
app/
├─ app.py
├─ requirements.txt
└─ Dockerfile
各コードやアプリの詳細については割愛します。
デプロイ前の準備
- ローカル環境
- Google Cloud SDKをインストール
- GCP側の初期設定
- GCPのアカウントを作成
- 無料トライアルを開始し、課金設定をする
無料トライアルのクレジットを使用するには、1,500円以上のデポジットが必要
カードでの支払いがGoogleから本人確認の承認をされないとできず、ここで2日待つことに。。
2日後、、、いざデプロイへ
(GCP)新しいプロジェクトを作成
初期プロジェクトでもよかったのですが、新たに作成。
プロジェクト作成後、今回使うAPIを有効化
- Cloud Run API
- Cloud Build API(ビルド実行)
- Artifact Registry API(コンテナ保管)
- Secret Manager
(ローカル)gcloudの初期化
PowerShellを開いて以下を実行
# Googleアカウント認証
gcloud auth login
# プロジェクトを設定
gcloud config set project <PROJECT_ID>
# デフォルトのリージョンを東京に
gcloud config set run/region asia-northeast1
(ローカル)DockerFileを作成
開発時はvenvを使っていたため、デプロイ用にDockerFileを作成
Cloud Runで動かすアプリケーションは環境変数"PORT"を取得して、その番号のポートで待ち受けるようにします
FROM python:3.11-slim
WORKDIR /app
COPY requirements.txt ./
RUN pip install --no-cache-dir -r requirements.txt
COPY app.py .
EXPOSE 8080
ENV PORT=8080
CMD ["bash", "-lc", "streamlit run app.py --server.address=0.0.0.0 --server.port=${PORT}"]
(ローカル)Artifact Registryにリポジトリ作成
ロケーションは東京を指定
リポジトリ名は任意の名前でOK
gcloud artifacts repositories create <リポジトリ名> \
--repository-format=Docker --location=asia-northeast1
(ローカル)Cloud Buildでコンテナをビルド&push
cd <DockerFileがある作業ディレクトリ>
gcloud builds submit --tag asia-northeast1-docker.pkg.dev/<PROJECT_ID>/<リポジトリ名>/<サービス名>
(ローカル)環境変数を設定
APIキーをSecret Managerへ登録
gcloud secrets create GOOGLE_API_KEY --replication-policy=automatic
gcloud secrets versions add GOOGLE_API_KEY --data-file=-
標準入力へGeminiのAPIキーをコピペ➡ctrl+Z➡Enter
Cloud Run が読むために権限を付与
gcloud projects add-iam-policy-binding <PROJECT_ID> \
--member=serviceAccount:<PROJECT_NUMBER>-compute@developer.gserviceaccount.com \
--role=roles/secretmanager.secretAccessor
(ローカル)Croud Runへデプロイ
いよいよデプロイ
コマンド引数は以下
- --allow-unauthenticated:誰でもURLでアクセスできるように公開
- --min-instances:0ならコールドスタート、1以上で常時起動
- 無料枠運用のため、0を指定
- --set-secrets GOOGLE_API_KEY:上で設定した環境変数
gcloud run deploy <サービス名> \
--image asia-northeast1-docker.pkg.dev/<PROJECT_ID>/<リポジトリ名>/<サービス名> \
--region asia-northeast1 --platform managed --allow-unauthenticated \
--min-instances 0 --set-secrets GOOGLE_API_KEY=GOOGLE_API_KEY:latest
コマンド実行後、サービスのURLが表示される
おわりに
以上がデプロイまでに行った手順です。
支払いの部分以外では詰まることなく最後までいけました。ChatGPTさまさまです。