🎃

初めてCloud Run FuncsionsでPythonの書き方

2024/11/09に公開

サーバーレスWebアプリに初挑戦

初めてサーバーレスWebアプリのバックエンドに携わる事になりデスクトップソフトしか作っていなかったので今回はその奮闘記を書いておこう思います。

知り合いと話していてもAmazonの「AWS」がメジャーなのと「Cloud Funcsions」が統合されて「Cloud Run Funcsions」になっているのもあって情報が少なく初学者にとっては混乱しながらでした。
https://cloud.google.com/blog/ja/products/serverless/google-cloud-functions-is-now-cloud-run-functions
※余談ですが「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

https://github.com/Lehm-code/CloudRun_Back.git

フロントエンド側のコード(アクセス確認用)

  • 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()

https://github.com/Lehm-code/CloudRun_Flont.git

Google Cloudのアカウント作成

試用期間は制限内で無料で使えるっぽいのでまずはアカウントを作ってください。そしたらCloud Runでプロジェクトを作成しましょう。

Cloud Runのデプロイ方法

デプロイ方法としては下記の3つがありますが、今回は「Github」を使用しました。「Github」の場合にはコミットしてプッシュすれば自動で再ビルドが始まってプログラムが修正されるので便利です。

  • コンテナイメージ
  • Github
  • Functions

Cloud Runでサービスの追加

Cloud BuildでGithubを接続

Githubの接続詳細

サービス作成の詳細

エンドポイントURLの確認

さいごに

いかがだったでしょうか。今回は初めてクラウドサービスに触れた観点から順番に書いてみましたが、本格的にプログラムを書く前の確認的プログラムとして参考になれば幸いです。
そしてここから本サービスのデプロイを行うのですが、そこでのデータ受け渡しはJSONというPythonでのディクショナリ型で行える様です。

Discussion