cloud-function-base/readme/cloud_functions.md
ry.yamafuji ce5bc639fe
Some checks failed
Python Test / python-test (push) Failing after 11s
Cloud Functionの基本ソースを追加しました
2025-12-06 01:56:18 +09:00

2.3 KiB

Cloud Functionsについて

Dev

リクエストをトリガーにする場合

関数のエントリポインの定義

@functions_framework.http
def hello_request(request: Request):
    ...

Cloud FUnctionsを起動する

functions-framework \
--source=src/main.py \
--target=hello_request \
--signature-type=http \
--port=8080

ローカルでリクエストを送信する(ローカル)

GET

curl -X GET -H "Content-Type: application/json" \
  'http://localhost:8080?name=python'

POST

curl -X POST -H "Content-Type: application/json" \
  -d '{"name": "python"}' \
  http://localhost:8080

PUT

curl -X PUT -H "Content-Type: application/json" \
  -d '{"name": "python"}' \
  http://localhost:8080

Eventをトリガーにする場合

ローカルで実行するにはイベントをHTTPにラップして Functions Frameworkで動かすのが基本です。 本番ではPub/Sub / Storage / Firestore / Eventarc などのイベントトリガでCloud Functionsを起動します。

  • ユースケース:
    • Pub/Sub: Pub/Subイベントにより実行する
    • Storage: GCSにファイルのアップロードなどがあった場合
    • Firestore: Firestoreのデータに変更等が生じた場合
    • Eventarc: イベントログなどをトリガーにする(BQにデータが登録された場合)

サンプルイベントソース

関数のエントリポインの定義

@functions_framework.cloud_event
def main(cloud_event):
    ...

第1世代 (1st Gen)では以下のエントリポイントになる

def main(event, context)

Cloud FUnctionsを起動する

functions-framework \
--source=src/main.py \
--target=hello_pubsub \
--signature-type=cloudevent \
--port=8080

ローカルでイベントを送信する(ローカル)

curl -X POST \
  -H "Content-Type: application/json" \
  -H "Ce-Specversion: 1.0" \
  -H "Ce-Type: google.cloud.pubsub.topic.v1.messagePublished" \
  -H "Ce-Source: //pubsub.googleapis.com/projects/test-project/topics/test-topic" \
  -H "Ce-Id: 1234567890" \
  -H "Ce-Time: 2025-12-06T00:00:00Z" \
  -d '{
    "message": {
      "data": "'$(echo -n "hello-local" | base64)'"
    }
  }' \
  http://localhost:8080