Google Cloud Functions 擴充功能

您正在查看 Apigee Edge 說明文件。
前往 Apigee X 說明文件
info

2.0.0 版

叫用透過 Google Cloud 專案部署的 Cloud Functions。

目前,這個擴充功能支援叫用 HTTP 觸發事件函式

必要條件

本內容提供設定和使用此擴充功能的參考資訊。使用 ExtensionCallout 政策從 API proxy 使用擴充功能前,您必須:

  1. 啟用 Cloud Functions API

  2. 為 Google Cloud 專案定義deploy Cloud Functions 中的函式。

  3. 透過 IAM 授予使用者存取權,以便為函式設定所需的存取層級。舉例來說,您可以將函式存取權限制在用於設定擴充功能的服務帳戶。

  4. 使用 GCP 主控台為服務帳戶產生金鑰

  5. 使用設定參考資料新增及設定擴充功能時,請使用產生的 JSON 金鑰檔案內容。

關於 Cloud Functions

您可以使用 Google Cloud Functions 在 Google Cloud 上建立及部署函式,然後從其他程式碼叫用這些函式。如需 Cloud Functions 的簡介,請試試其中一個快速入門

範例

以下範例說明如何使用 ExtensionCallout 政策在 Cloud Functions 中叫用函式。

叫用 Node.js 函式

以下範例使用ExtensionCallout 政策呼叫 Google Cloud Functions 擴充功能。擴充功能會呼叫啟用 Cloud Functions API 時所附帶的預設「hello world」函式。

以下 Node.js JavaScript 會在 GCP 帳戶的 Cloud Functions 中部署。如果要求包含訊息屬性,程式碼就會傳回該屬性。否則,系統會傳回「Hello World!」做為回應。

/**
 * Responds to any HTTP request.
 *
 * @param {!express:Request} req HTTP request context.
 * @param {!express:Response} res HTTP response context.
 */
exports.helloWorld = (req, res) => {
  let message = req.query.message || req.body.message || 'Hello World!';
  res.status(200).send(message);
};

這個範例包含 Google Cloud Functions 擴充功能,並設定憑證,以便驗證並取得在 Cloud Functions 上叫用程式碼的授權。

上述函式程式碼會儲存在 Cloud Functions 中,名稱為 helloWorld。下列 ExtensionCallout 政策設定程式碼會使用這個名稱,以及與部署函式所在 Cloud Functions 環境的詳細資料相符的地區和專案 ID 值。

<Action>invoke</Action>
<Input><![CDATA[
  {
    "region" : "us-central1",
    "projectId" : "my-project",
    "functionName" : "hello-world",
    "method" : "POST",
    "payload" : { "message" : "Hello yourself!" }
  }
]]></Input>
<Output parsed="false">function.response</Output>

以下的 AssignMessage 政策會擷取回應值,以利偵錯。

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<AssignMessage async="false" continueOnError="false" enabled="true" name="Get-Function-Response">
    <DisplayName>Get Function Response</DisplayName>
    <AssignTo type="response" createNew="false"/>
    <Set>
        <Payload contentType="application/json">{function.response}</Payload>
    </Set>
</AssignMessage>

上述要求的回應如下所示:

Hello yourself!

parsed 的預設值為 true。這個範例會在政策的 <Output> 標記中設定 parsed="false",這會防止政策剖析 JSON 回應。在大多數情況下,使用 Cloud Functions 擴充功能時,您會設定 parsed="false"。詳情請參閱 <Output> 元素

如果 Cloud Function 傳回 JSON 回應,且您已設定 parsed="true",則擴充功能的回應會是物件參照。如要從參照中擷取回應,請使用下列語法:{objectName}.{jsonKey}。例如:

function.response.message

動作

叫用

叫用 Cloud 函式。

目前,這個擴充功能支援叫用 HTTP 觸發事件函式

語法

<Action>invoke</Action>
<Input><![CDATA[
  {
    "region" : "deployment-region",
    "projectId" : "project-id",
    "functionName" : "function-name",
    "method" : "http-method",
    "payload" : { json-payload }
  }
]]></Input>
<Output>function.response</Output>

範例

<Action>invoke</Action>
<Input><![CDATA[
  {
    "region" : "us-central1",
    "projectId" : "my-project",
    "functionName" : "hello-world",
    "method" : "POST",
    "payload" : { "message" : "Hello yourself!" }
  }
]]></Input>
<Output>function.response</Output>

要求參數

參數 說明 類型 預設 必填
區域 函式部署所在的 Google Cloud 區域 字串。 無。 是。
專案 ID GCP 專案 ID。 字串。 無。 是。
functionName 要叫用的 HTTP 函式名稱。這是您建立函式時使用的名稱 (不一定是函式程式碼中的名稱)。 字串。 無。 是。
method 在叫用函式時要使用的 HTTP 方法。 字串。 GET 不會。
payload 透過函式叫用傳送的酬載。 JSON。 無。 不會。

回應

指定函式的回應值 (如有)。

回應屬性

無。

設定參考資料

如要設定及部署此擴充功能,以便在 API 代理程式中使用,請使用下列說明。如要瞭解如何使用 Apigee 控制台設定擴充功能,請參閱「新增及設定擴充功能」。

常見的擴充功能屬性

每個擴充功能都有下列屬性。

屬性 說明 預設 必要
name 您要為這項擴充功能設定的名稱。 相容
packageName Apigee Edge 指定的擴充功能套件名稱。 相容
version 擴充功能的擴充功能套件版本號碼。 相容
configuration 您要新增的擴充功能專屬的設定值。請參閱「這個擴充功能套件的屬性」一文 相容

這個擴充功能套件的屬性

請為下列專屬於此擴充功能的設定屬性指定值。

屬性 說明 預設 必填
憑證 輸入 Apigee Edge 主控台時,這就是服務帳戶金鑰檔案的內容。透過管理 API 傳送時,這會是從服務帳戶金鑰檔案產生的 base64 編碼值。 無。 是。