【GCP】PythonでCloud Functions
はじめに
GCPのCloud FunctionsでPythonを実行する方法を紹介していきます。
Cloud Functionsとは
Cloud Functionsは、サーバーレスでコードを実行できるFaaS(Functions as a Service)です。
トリガー
関数を実行するトリガーは大きく2つのタイプがあります。
- HTTPトリガー
- イベントトリガー
HTTPトリガーは、関数のURLにリクエストを送ると実行されます。
イベントトリガーは、GCPのプロジェクト内のイベントに応じて実行されます。実行されるイベントは以下の通りです。
- Cloud Pub/Sub
- Cloud Storage
gcloud functions call
コマンドによる直接呼び出し- Cloud Firestore
- Firebase向けアナリティクス
- Firebase Realtime Database
- Firebase Authentication
料金
Cloud FunctionsはCloud Buildで実行可能イメージに変換、Container Registryにイメージを格納しています。そのため、以下の3つの料金を確認する必要があります。
- Cloud Functions
- Cloud Build
- Container Registry
料金 | Cloud Run functions | Google Cloud
Cloud Run 関数の料金情報を確認する
Cloud Build の料金 | Cloud Build Documentation | Google Cloud
料金 | Container Registry | Google Cloud
Container Registry の料金を確認する
Cloud Functionsの無料枠は以下の条件になります。
- 200万回/月の呼び出し
- 400,000 GB 秒・200,000 GHz 秒のコンピューティング時間
- 5GB/月の下りトラフィック
無料枠は変更されている可能性があるため、公式ドキュメントの確認をお願いします。
しかし、デプロイするとContainer Registryに保存されるのでので毎月多少の料金が発生します。デプロイの料金に関しては、以下を参照してください。
料金 | Cloud Run functions | Google Cloud
Cloud Run 関数の料金情報を確認する
利用する前に
利用するにはCloud Functions
とCloud Build
のAPIを有効化する必要があります。
関数の作成
こちらから「関数を作成」をクリックします。
関数の設定をします。
今回は以下のように設定しました。
関数名
:python-functionリージョン
:asia-northeast1(東京)トリガーのタイプ
:HTTP認証
:未認証の呼び出しを許可HTTPS
:HTTPS必須
リージョンごとで料金設定が変わるみたいです。
Cloud Functions のロケーション | Cloud Run functions Documentation | Google Cloud
次に実行する関数を実装します。
ランタイムを選択することでテンプレとなる関数が表示されます。「エントリポイント」に記載されているのが、このCloud Functionsで実行される関数になります。
下記がPythonを選択したときのテンプレコードになります。引数のrequest
はFlaskのrequestオブジェクトです。
1def hello_world(request):
2 """Responds to any HTTP request.
3 Args:
4 request (flask.Request): HTTP request object.
5 Returns:
6 The response text or any set of values that can be turned into a
7 Response object using
8 `make_response <https://flask.palletsprojects.com/en/1.1.x/api/#flask.Flask.make_response>`.
9 """
10 request_json = request.get_json()
11 if request.args and 'message' in request.args:
12 return request.args.get('message')
13 elif request_json and 'message' in request_json:
14 return request_json['message']
15 else:
16 return f'Hello World!'
Flaskのrequestオブジェクトについてはこちら
【Flask】簡単なAPIを実装
はじめに Flaskを使って**簡単なAPIを実装**したいと思います。 フォーム、JSON、
デプロイ
関数の実装が完了したら「デプロイ」します。
デプロイが完了すると一覧に表示されます。
テスト
デプロイした関数をテストしてみます。
関数の一覧もしくは関数の詳細画面からテストを実行できます。実行すると下部に結果とログが表示されます。
実行
実際に外部から実行できるか試してみます。ここでは、Postmanを使って実行してみます。
まずはURLを関数の詳細画面から確認します。
Postmanを使って確認したURLを叩いてみます。
テストと同様の結果が返ってきました。
まとめ
GCPのCloud Functionsを使ってPythonの関数を実行してみました。
参考
- Cloud Functions | Google Cloud
- Cloud Functions の呼び出し | Google Cloud Functions に関するドキュメント
- 料金 | Cloud Functions | Google Cloud
- Cloud Build の料金 | Cloud Build のドキュメント | Google Cloud
- 料金 | Container Registry | Google Cloud