gcloud CLIを使用してローカルでCloud Functions(Cloud Run関数)の動作確認

Google CloudのCloud Functions(Cloud Run関数)の実装を進める際、ローカルでコーディングしてGoogle Cloud環境にデプロイされる方も多いかと思います。

その際に、Google Cloud環境にデプロイしなくてもローカルで動作確認する方法があるので、
その方法を記載します。

※筆者はMacを使用しております。

gcloud CLIセットアップ

公式ドキュメントはこちら

ドキュメントはしっかり書かれているんですが、情報が多いのでなかなか欲しい情報に辿り着かなかったりするので、絞って書いていきます。

gcloud CLIインストール

環境によって異なるので、こちらの公式ドキュメントを参照ください。

gcloud CLI設定

以下のコマンドをプロンプト等に入力して、gcloudを初期化

gcloud init

使用するアカウント、タイムゾーンなど、質問に答えていく形式で設定していきます。

完成したら以下のコマンドを使用して、設定されていることを確認

gcloud config configurations list 
NAME                          IS_ACTIVE  ACCOUNT                    PROJECT                COMPUTE_DEFAULT_ZONE  COMPUTE_DEFAULT_REGION
default                       True      <アカウント>  <プロジェクト名>             asia-northeast1-a     asia-northeast1

↑のように設定した内容が表示されてればOK

次に以下のコマンドを実行してログインします。
ブラウザ等でログインを求められた場合は、メッセージに従って操作します。

gcloud auth application-default login

Cloud Functions(Cloud Run関数)コーディング

簡単なソースコードのサンプルで試します。

以下はリクエストされたら以下の動作をします。

  • 「TEST HELLO」を呼出元に返却する。
  • 「Logging TEST」をGoogle Cloudのログに出力する。

■main.py

import logging
import google.cloud.logging

# logger設定
logger = logging.getLogger()
# Cloud Logging ハンドラを logger に接続
logging_client = google.cloud.logging.Client()
logging_client.setup_logging()
# Logger設定
logging.basicConfig(
        format="[%(asctime)s][%(levelname)s] %(message)s",
        level=logging.DEBUG
)


# HTTPトリガ
@functions_framework.http
def main(request):
        logger.info("Logging Test")
        return "TEST HELLO"

必要であれば、必要なライブラリはインストールしておいてください。

おそらく、以下の2つで大丈夫かなと思います。

pip install functions-framework==3.*
pip install google-cloud-logging

Cloud Functions(Cloud Run関数)をローカルで実行

■Cloud Functions(Cloud Run関数)を起動(?) ※実行できる状態にする。

以下のコマンドを実行します。(mainは変更されているのであれば、ファイル名、関数名等に合わせて変更してください)

functions-framework --target main --signature-type=http --port=8080 --debug
 * Serving Flask app 'main'
 * Debug mode: on
WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead.
 * Running on all addresses (0.0.0.0)
 * Running on http://127.0.0.1:8080
 * Running on http://xxx.xxx.xx.xx:8080
Press CTRL+C to quit
 * Restarting with watchdog (fsevents)
 * Debugger is active!
 * Debugger PIN: xxx-xxx-xxx

↑みたいな状態になったら、実行できる状態です。

その状態で、別ウィンドウ等からcurlを実行します。

curl http://127.0.0.1:8080
TEST HELLO

↑curlを実行したウィンドウでは返却値として、「TEST HELLO」が表示されます。

次にGoogle Cloudで接続先のログエクスプローラーを開いてログを確認します。

↑のように、「Logging Test」が出力されていることを確認できました。

他のGoogle Cloudサービス(BigQuery、Storageなど)にもローカルから接続しながら確認することができます。(設定やAuthorityなど一部、できないものもありますが)

その他

"Permission 'logging.logEntries.create' denied on resource (or it may not exist)."

もし、↑のようなメッセージが出力されたらgcloud CLI設定ができていないと思うので「gcloud auth application-default login」などが漏れていないかは確認してみてください。

よかったら、以下のページも参考にしてみてください。

コメントする