Google Cloud Functions 拡張機能

バージョン 1.0.5

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

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

前提条件

ここでは、この拡張機能の構成と使用に関するリファレンスを提供します。ExtensionCallout ポリシーで API プロキシ経由で拡張機能を使用する前に、次のことを行う必要があります。

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

  2. Google Cloud プロジェクト向けに Cloud Functions で関数を定義してデプロイします。

  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 でコードを呼び出すための認証と権限が必要な認証情報を構成する 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 Function が JSON レスポンスを返し、parsed="true" を設定すると、拡張機能からのレスポンスはオブジェクト参照になります。参照からレスポンスを抽出するには、{objectName}.{jsonKey} 構文を使用します。例:

function.response.message

アクション

invoke

Cloud Function を呼び出します。

現時点では、この拡張機能は 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 関数の呼び出しと一緒に送信されるペイロード。 JSON なし ×

レスポンス

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

レスポンス プロパティ

なし

構成リファレンス

この拡張機能を API プロキシで使用するように構成してデプロイする場合は、以下のプロパティを使用します。Apigee Console で拡張機能を構成する手順については、拡張機能の追加と構成をご覧ください。

拡張機能の共通プロパティ

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

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

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

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

プロパティ 説明 デフォルト 必須
credentials Apigee Edge コンソール内で入力する場合は、サービス アカウントのキーファイルの内容です。管理 API を使用して設定する場合は、サービス アカウント キー のファイルから生成された、base64 でエンコード済みの値です。 なし