Google Cloud Functions 拡張機能

現在、Apigee Edge のドキュメントを表示しています。
Apigee X のドキュメントをご確認ください
情報

バージョン 1.3.1

Google Cloud プロジェクトを介してデプロイされた Cloud Functions の関数を呼び出します。

現在、この拡張機能では HTTP トリガー関数の呼び出しがサポートされています。

前提条件

ここでは、この拡張機能の構成と使用について説明します。ExtensionCallout ポリシーで API プロキシから拡張機能を使用する前に、次のことを行う必要があります。

  1. Cloud Functions API を有効にします。

  2. Google Cloud プロジェクトの Cloud Functions で関数を定義し、deployします。

  3. 関数に必要なアクセスレベルで IAM を介してユーザー アクセス権を付与します。たとえば、関数へのアクセスを、拡張機能の構成に使用するサービス アカウントのみに制限できます。

  4. GCP Console を使用してサービス アカウント キーを生成します

  5. 構成リファレンスを使用して拡張機能を追加および構成するときは、生成されたキー JSON ファイルの内容を使用します。

Cloud Functions について

Google Cloud Functions を使用すると、Google Cloud で関数を作成してデプロイし、それらの関数を他のコードから呼び出すことができます。Cloud Functions の概要については、クイックスタートのいずれかをお試しください。

サンプル

次の例は、ExtensionCallout ポリシーを使用して Cloud Functions で関数を呼び出す方法を示しています。

Node.js 関数を呼び出す

次の例は、Google Cloud Functions 拡張機能を呼び出す ExtensionCallout ポリシーを使用しています。この拡張機能は、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);
};

この例には、Cloud Functions でコードを呼び出すための認証と認可に必要な認証情報が構成された Google 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

アクション

invoke

Cloud Functions の関数を呼び出します。

現在、この拡張機能では 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>

リクエスト パラメータ

パラメータ 説明 種類 デフォルト 必須
region 関数がデプロイされる Google Cloud リージョン 文字列。 なし。 はい、できます。
projectId GCP プロジェクト ID。 文字列。 なし。 はい、できます。
functionName 呼び出す HTTP 関数の名前。これは、関数の作成時に使用した名前です(関数のコードからの名前とは限りません)。 文字列。 なし。 はい、できます。
method 関数の呼び出し時に使用する HTTP メソッド。 文字列。 GET 違います
payload 関数の呼び出しとともに送信するペイロード。 記述できます。 なし。 違います

レスポンス

指定された関数のレスポンス値(存在する場合)。

レスポンスのプロパティ

なし。

構成リファレンス

API プロキシで使用するためにこの拡張機能を構成およびデプロイする場合は、以下を使用します。Apigee コンソールを使用して拡張機能を構成する手順については、拡張機能の追加と構成をご覧ください。

共通の拡張プロパティ

すべての拡張機能には次のプロパティがあります。

プロパティ 説明 デフォルト 必須
name この拡張機能に付ける名前。 なし
packageName Apigee Edge から提供された拡張機能パッケージの名前。 なし
version 拡張機能を構成する拡張機能パッケージのバージョン番号。 なし
configuration 追加する拡張機能に固有の構成値。この拡張機能パッケージのプロパティをご覧ください。 なし

この拡張機能パッケージのプロパティ

この拡張機能に固有の次の構成プロパティの値を指定します。

プロパティ 説明 デフォルト 必須
証明書 これは、Apigee Edge コンソールで入力する場合、サービス アカウント キーファイルの内容です。Management API 経由で送信される場合は、サービス アカウント キー ファイルから生成された、Base64 エンコードの値です。 なし。 はい、できます。