🎃
初めてCloud Run FuncsionsでPythonの書き方
サーバーレスWebアプリに初挑戦
初めてサーバーレスWebアプリのバックエンドに携わる事になりデスクトップソフトしか作っていなかったので今回はその奮闘記を書いておこう思います。
知り合いと話していてもAmazonの「AWS」がメジャーなのと「Cloud Funcsions」が統合されて「Cloud Run Funcsions」になっているのもあって情報が少なく初学者にとっては混乱しながらでした。
※余談ですが「Cloud Run Funcsions」の公式ページは「Funcsions」が「関数」と翻訳されていて「 Cloud Run 関数」と表記されているのが面白かったです。
筆者のレベル感
- クラウドサービス未経験(デプロイ? エンドポイント? サーバーレス? JSON?)
- Docker未経験
- Github個人利用のみ
バックエンド側のコード
- Dockerfile(コンテナイメージの作成)
- main.py(メインのプログラム)
- requirements.txt(Pythonライブラリ記述)
基本的にはコンテナイメージ、メインプログラム、ライブラリの3ファイルで「Cloud Run」に必要なコンテナを構成しております。詳しく知りたい方は「Docker」を調べてみてください。
Dockerfile
# 1. ベースイメージとしてPython 3.11(または任意のバージョン)を使用
FROM python:3.11-slim
# 2. 作業ディレクトリを設定
WORKDIR /app
# 3. ローカルのファイルをコンテナにコピー
COPY ./requirements.txt /app/requirements.txt
COPY ./main.py /app/main.py
# 4. 依存パッケージのインストール
RUN pip install --no-cache-dir --upgrade pip && \
pip install --no-cache-dir -r /app/requirements.txt
# 5. UvicornでFastAPIを実行
CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8080"]
main.py
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
def read_root():
return {"message": "Hello, World! from Python"}
requirements.txt
fastapi
フロントエンド側のコード(アクセス確認用)
- main.py
アクセス確認側はご自身の「URL」に書き換えて頂き、ローカルのVSCodeなどから起動すれば問題なく動くと思われます。「URL」は下記のデプロイ後に表示されるのでご自身のをご確認ください。
main.py
import urllib.request
def get_request():
# Cloud RunでデプロイしたエンドポイントURLに置き換えてください
url = "https://your-cloud-run-url.a.run.app"
try:
# URLにアクセスしてレスポンスを取得
response = urllib.request.urlopen(url)
# ステータスコードを確認
status_code = response.getcode()
if status_code == 200:
print("URLリクエスト成功:", status_code)
else:
print("URLリクエスト失敗:", status_code)
except urllib.error.URLError as e:
print("URLエラー:", e.reason)
except Exception as e:
print("エラー:", e)
if __name__ == "__main__":
get_request()
Google Cloudのアカウント作成
試用期間は制限内で無料で使えるっぽいのでまずはアカウントを作ってください。そしたらCloud Runでプロジェクトを作成しましょう。
Cloud Runのデプロイ方法
デプロイ方法としては下記の3つがありますが、今回は「Github」を使用しました。「Github」の場合にはコミットしてプッシュすれば自動で再ビルドが始まってプログラムが修正されるので便利です。
- コンテナイメージ
- Github
- Functions
Cloud Runでサービスの追加
Cloud BuildでGithubを接続
Githubの接続詳細
サービス作成の詳細
エンドポイントURLの確認
さいごに
いかがだったでしょうか。今回は初めてクラウドサービスに触れた観点から順番に書いてみましたが、本格的にプログラムを書く前の確認的プログラムとして参考になれば幸いです。
そしてここから本サービスのデプロイを行うのですが、そこでのデータ受け渡しはJSONというPythonでのディクショナリ型で行える様です。
Discussion