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

104 lines
2.3 KiB
Markdown

# 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
```