Google Cloud Functions 擴充功能

您目前查看的是 Apigee Edge 說明文件。
前往 Apigee X 說明文件
info

2.0.2 版

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

目前這項擴充功能支援叫用 HTTP 觸發函式

必要條件

這項內容提供設定及使用這項擴充功能的參考資料。使用 ExtensionCallout 政策從 API Proxy 使用擴充功能之前,請務必完成下列步驟:

  1. 啟用 Cloud Functions API

  2. 在 Google Cloud 專案的 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 上叫用程式碼。

上述函式程式碼會以 helloWorld 形式儲存在 Cloud Functions 中。下列 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 Functions 傳回 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 區域 字串。 無。 是。
projectId GCP 專案 ID。 字串。 無。 是。
functionName 要叫用的 HTTP 函式名稱。這是您建立函式時使用的名稱 (不一定是函式程式碼中的名稱)。 字串。 無。 是。
method 叫用函式時要使用的 HTTP 方法。 字串。 GET 不會。
酬載 要透過函式呼叫傳送的酬載。 JSON。 無。 不會。

回應

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

回應屬性

無。

設定參考資料

設定及部署這個擴充功能,以便在 API Proxy 中使用時,請參考下列資訊。如要瞭解如何使用 Apigee 控制台設定擴充功能,請參閱「新增及設定擴充功能」。

常見的擴充功能屬性

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

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

這個擴充套件的屬性

指定下列設定屬性的值,這些屬性專屬於這個擴充功能。

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