第二方以 Stackdriver 進行觸發

許多 Google Cloud Platform 事件記錄於 Stackdriver 稽核記錄之中。您可篩選這些記錄,並使用接收器將其轉送至 Pub/Sub 主題。之後 Pub/Sub 主題可傳送通知,以觸發 Cloud 函式。這樣您就可以透過產生稽核記錄的任何 Google Cloud Platform 服務建立自訂事件。

設定

如要執行以下範例,您需要 Pub/Sub 主題Stackdriver 記錄接收器,以便讓範例將 Stackdriver 稽核記錄轉送至 Cloud 函式。

事件結構

和所有 Pub/Sub 觸發函式一樣,由 Stackdriver 記錄項目觸發的函式會收到 PubsubMessage 物件,這個物件的 data 參數是採 base64 編碼的字串。對 Stackdriver 記錄事件而言,解碼此值會以 JSON 字串傳回相關記錄項目。

程式碼範例

您可利用如下的 Pub/Sub 觸發函式,偵測及回應匯出的 Stackdriver 記錄:

Node.js

exports.processLogEntry = data => {
  // Node 6: data.data === Node 8+: data
  const dataBuffer = Buffer.from(data.data.data || data.data, 'base64');

  const logEntry = JSON.parse(dataBuffer.toString('ascii')).protoPayload;
  console.log(`Method: ${logEntry.methodName}`);
  console.log(`Resource: ${logEntry.resourceName}`);
  console.log(`Initiator: ${logEntry.authenticationInfo.principalEmail}`);
};

Python

import base64
import json

def process_log_entry(data, context):
    data_buffer = base64.b64decode(data['data'])
    log_entry = json.loads(data_buffer)['protoPayload']

    print(f"Method: {log_entry['methodName']}")
    print(f"Resource: {log_entry['resourceName']}")
    print(f"Initiator: {log_entry['authenticationInfo']['principalEmail']}")

Go


// Package log contains examples for handling Cloud Functions logs.
package log

import (
	"context"
	"log"
)

// PubSubMessage is the payload of a Pub/Sub event.
type PubSubMessage struct {
	Data []byte `json:"data"`
}

// ProcessLogEntry processes a Pub/Sub message from Stackdriver.
func ProcessLogEntry(ctx context.Context, m PubSubMessage) error {
	log.Printf("Log entry data: %s", string(m.Data))
	return nil
}

部署函式

請使用下列指令部署您的函式:

Node.js 8

gcloud functions deploy processLogEntry --runtime nodejs8 --trigger-topic YOUR_PUBSUB_TOPIC

Node.js 10 (Beta 版)

gcloud functions deploy processLogEntry --runtime nodejs10 --trigger-topic YOUR_PUBSUB_TOPIC

Node.js 6 (已淘汰)

gcloud functions deploy processLogEntry --runtime nodejs6 --trigger-topic YOUR_PUBSUB_TOPIC

Python

gcloud functions deploy process_log_entry --runtime python37 --trigger-topic YOUR_PUBSUB_TOPIC

Go

gcloud functions deploy ProcessLogEntry --runtime go111 --trigger-topic YOUR_PUBSUB_TOPIC

觸發函式

如果系統建立了符合其中一個篩選條件的 Stackdriver 記錄項目,您應會看見函式的對應記錄項目:

Method: METHOD
Resource: projects/YOUR_GCLOUD_PROJECT/...
Initiator: YOUR_EMAIL_ADDRESS
本頁內容對您是否有任何幫助?請提供意見:

傳送您對下列選項的寶貴意見...

這個網頁
Cloud Functions Documentation