# Cloud Functionsについて ## Dev ### リクエストをトリガーにする場合 **関数のエントリポインの定義** ```py @functions_framework.http def hello_request(request: Request): ... ``` **Cloud FUnctionsを起動する** ```sh functions-framework \ --source=src/main.py \ --target=hello_request \ --signature-type=http \ --port=8080 ``` ローカルでリクエストを送信する(ローカル) **GET** ```sh curl -X GET -H "Content-Type: application/json" \ 'http://localhost:8080?name=python' ``` **POST** ```sh curl -X POST -H "Content-Type: application/json" \ -d '{"name": "python"}' \ http://localhost:8080 ``` **PUT** ```sh 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にデータが登録された場合) [サンプルイベントソース](../examples/example_event.py) **関数のエントリポインの定義** ```py @functions_framework.cloud_event def main(cloud_event): ... ``` 第1世代 (1st Gen)では以下のエントリポイントになる ```py def main(event, context) ``` **Cloud FUnctionsを起動する** ```sh functions-framework \ --source=src/main.py \ --target=hello_pubsub \ --signature-type=cloudevent \ --port=8080 ``` ローカルでイベントを送信する(ローカル) ```sh 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 ```