115 lines
2.6 KiB
Markdown
115 lines
2.6 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
|
|
```
|
|
|
|
## ログについて
|
|
|
|
### `google-cloud-logging`を使う場合
|
|
|
|
* カスタム logName を使い分けたい
|
|
* OpenTelemetry
|
|
* エラーレポーティングを細かく制御したい
|
|
|
|
以外のものがなければ
|
|
標準 logging + stdout/stderrで十分対応可能です。 |