Google Cloud Functions 擴充功能

您正在查看 Apigee Edge 說明文件。
查看 Apigee X 說明文件
資訊

1.3.1 版

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

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

必要條件

本文提供設定和使用這個擴充功能的參考資料。透過 Extension callout 政策透過 API Proxy 使用擴充功能前,您必須:

  1. 啟用 Cloud Functions API

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

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

  4. 使用 GCP 控制台產生服務帳戶的金鑰

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

關於 Cloud Functions

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

範例

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

叫用 Node.js 函式

以下範例是呼叫 Google Cloud Functions 擴充功能的 Extension callout 政策。這個擴充功能會呼叫 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 中。下列 Extension callout 政策設定程式碼會使用這個名稱,以及與部署函式所在 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 函式傳回 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 不會。
payload 搭配函式叫用傳送的酬載。 JSON。 無。 不會。

回應

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

回應屬性

無。

設定參考資料

如果您要設定及部署這個擴充功能,以便用於 API Proxy,請按照下列指示操作。如需使用 Apigee 控制台設定擴充功能的相關步驟,請參閱「新增及設定擴充功能」。

常見擴充功能屬性

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

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

這個擴充功能套件的屬性

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

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