Google CloudRunにREST APIアプリをデプロイしました
ChatGPTに教えてもらいながら作業してました。
なので、ChatGPTのログをシェアします。
Cloud Runは、課金してなくてもとりあえず動きそうです!
https://chatgpt.com/share/673da57a-9c48-8002-925d-2c07670fed90
https://chatgpt.com/share/673da67f-9fcc-8002-9209-dc957dbfbba9
私の備忘録
pip install fastapi uvicorn python-dotenv pymongo youtube_transcript_api
import os
from fastapi import FastAPI
from fastapi.middleware.cors import CORSMiddleware
from pymongo import MongoClient
from dotenv import load_dotenv
from youtube_transcript_api import YouTubeTranscriptApi
import json
load_dotenv()
app = FastAPI()
# CORSミドルウェアを追加して、他のドメインからのリクエストを受け入れられるように設定
origins = [
"http://localhost",
"http://localhost:8080",
"http://127.0.0.1:8000",
]
app.add_middleware(
CORSMiddleware,
allow_origins=origins, # 許可するオリジンを指定
allow_credentials=True,
allow_methods=["*"],
allow_headers=["*"],
)
# 字幕を取得する関数
def get_transcript(video_id: str):
try:
# 字幕を取得 (日本語字幕を優先)
transcript = YouTubeTranscriptApi.get_transcript(video_id, languages=['ja'])
text = ""
if transcript:
for item in transcript:
text += item["text"]
else:
print("字幕が見つかりませんでした。")
text1 = {"text": text}
# 字幕のリストを返す
return json.dumps(text1, ensure_ascii=False)
except Exception as e:
print(f"字幕の取得に失敗しました: {e}")
return {"error": "字幕の取得に失敗しました"}
# videoIdをクエリパラメータとして受け取るエンドポイント
@app.get("/transcript")
async def get_video_transcript(videoId: str):
res = get_transcript(videoId)
return res
- ローカルでアプリ起動
uvicorn app.main:app --reload
- 稼働確認
アプリがhttp://127.0.0.1:8000
で起動します。 - curlで確認
curl "http://127.0.0.1:8000/transcript?videoId=動画ID"
-
コンテナ
-
ビルド
docker build --no-cache -t my-fastapi-app .
-
docker起動
docker run -d -p 8080:8080 my-fastapi-app
-
稼働確認
アプリがhttp://127.0.0.1:8080
で起動します。 -
異常時に確認
docker logs <container_id>
-
実行中および停止したコンテナをリスト表示
docker ps -a
-
不要なコンテナを停止
docker stop <container_id>
-
不要なコンテナを削除
docker rm <container_id>
-
イメージにタグを付ける
-
Google Cloud Container Registry (GCR) にプッシュするためには、タグを付ける必要があります
docker tag my-fastapi-app gcr.io/cloudrun01/my-fastapi-app:latest
-
イメージをプッシュ
-
タグ付けが完了したら、次にそのイメージをGCRにプッシュします。
docker push gcr.io/cloudrun01/my-fastapi-app:latest
-
Cloud Runにデプロイ
-
次に、Cloud Runに新しいバージョンをデプロイします。gcloud run deployコマンドを実行します。
gcloud run deploy my-fastapi-app \ --image gcr.io/cloudrun01/my-fastapi-app \ --platform managed \ --region asia-northeast2 \ --allow-unauthenticated
-
本番稼働確認
https://my-fastapi-app.run.app/transcript?videoId=tRgpuON_CsI