【GCP】PythonでCloud Functions

2021.08.17
2024.03.24
クラウド
Cloud FunctionsGCPPython

はじめに

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 Functions  |  Google Cloud

料金  |  Cloud Functions  |  Google Cloud

Cloud Functions の料金情報を確認する

Cloud Build の料金  |  Cloud Build のドキュメント  |  Google Cloud

Cloud Build の料金  |  Cloud Build のドキュメント  |  Google Cloud

料金  |  Container Registry  |  Google Cloud

料金  |  Container Registry  |  Google Cloud

Container Registry の料金を確認する

Cloud Functionsの無料枠は以下の条件になります。

  • 200万回/月の呼び出し
  • 400,000 GB 秒・200,000 GHz 秒のコンピューティング時間
  • 5GB/月の下りトラフィック

無料枠は変更されている可能性があるため、公式ドキュメントの確認をお願いします。

しかし、デプロイするとContainer Registryに保存されるのでので毎月多少の料金が発生します。デプロイの料金に関しては、以下を参照してください。

料金  |  Cloud Functions  |  Google Cloud

料金  |  Cloud Functions  |  Google Cloud

Cloud Functions の料金情報を確認する

利用する前に

利用するにはCloud FunctionsCloud BuildのAPIを有効化する必要があります。

関数の作成

こちらから「関数を作成」をクリックします。

関数の設定をします。

今回は以下のように設定しました。

  • 関数名:python-function
  • リージョン:asia-northeast1(東京)
  • トリガーのタイプ:HTTP
  • 認証:未認証の呼び出しを許可
  • HTTPS:HTTPS必須

リージョンごとで料金設定が変わるみたいです。

Cloud Functions のロケーション  |  Google Cloud Functions に関するドキュメント

Cloud Functions のロケーション  |  Google Cloud Functions に関するドキュメント

次に実行する関数を実装します。

ランタイムを選択することでテンプレとなる関数が表示されます。「エントリポイント」に記載されているのが、この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オブジェクトについてはこちら

unknown link

デプロイ

関数の実装が完了したら「デプロイ」します。

デプロイが完了すると一覧に表示されます。

テスト

デプロイした関数をテストしてみます。

関数の一覧もしくは関数の詳細画面からテストを実行できます。実行すると下部に結果とログが表示されます。

実行

実際に外部から実行できるか試してみます。ここでは、Postmanを使って実行してみます。

まずはURLを関数の詳細画面から確認します。

Postmanを使って確認したURLを叩いてみます。

テストと同様の結果が返ってきました。

まとめ

GCPのCloud Functionsを使ってPythonの関数を実行してみました。

参考

Support

\ この記事が役に立ったと思ったら、サポートお願いします! /

buy me a coffee
Share

Profile

author

Masa

都内のIT企業で働くエンジニア
自分が学んだことをブログでわかりやすく発信していきながらスキルアップを目指していきます!

buy me a coffee