Extensión de Google Cloud Functions

Estás viendo la documentación de Apigee Edge.
Ir a la documentación de Apigee X.
info

Versión 2.0.2

Invoca Cloud Functions implementadas a través de tu proyecto de Google Cloud.

Actualmente, esta extensión admite la invocación de funciones con activador HTTP.

Requisitos previos

En este contenido, se proporciona información de referencia para configurar y usar esta extensión. Antes de usar la extensión desde un proxy de API con la política ExtensionCallout, debes hacer lo siguiente:

  1. Habilita la API de Cloud Functions.

  2. Define y deploy funciones en Cloud Functions para tu proyecto de Google Cloud.

  3. Otorga acceso de usuario a través de IAM para el nivel de acceso que desees para la función. Por ejemplo, puedes limitar el acceso a la función solo a la cuenta de servicio que usas para configurar la extensión.

  4. Usa GCP Console para generar una clave para la cuenta de servicio.

  5. Usa el contenido del archivo JSON de la clave resultante cuando agregues y configures la extensión con la referencia de configuración.

Acerca de Cloud Functions

Con Google Cloud Functions, puedes crear e implementar funciones en Google Cloud y, luego, invocarlas desde otro código. Para obtener una introducción a Cloud Functions, prueba una de las guías de inicio rápido.

Ejemplos

En el siguiente ejemplo, se muestra cómo invocar funciones en Cloud Functions con la política ExtensionCallout.

Invoca la función de Node.js

En el siguiente ejemplo, se muestra una política de ExtensionCallout que llama a una extensión de Google Cloud Functions. La extensión llama a la función predeterminada "hello world" que se incluye cuando habilitas la API de Cloud Functions.

El siguiente código JavaScript de Node.js se implementa en Cloud Functions para una cuenta de GCP. Si la solicitud incluye una propiedad de mensaje, el código la devuelve. De lo contrario, devuelve "Hello World!" como respuesta.

/**
 * 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);
};

Este ejemplo incluye una extensión de Google Cloud Functions configurada con las credenciales necesarias para autenticarse y obtener autorización para invocar código en Cloud Functions.

El código de la función anterior se guarda en Cloud Functions simplemente como helloWorld. El siguiente código de configuración de la política de ExtensionCallout usa este nombre, junto con los valores de región y el ID del proyecto que coinciden con los detalles del entorno de Cloud Functions en el que se implementa la función.

<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>

La siguiente política AssignMessage captura el valor de respuesta para fines de depuración.

<?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>

La respuesta a la solicitud anterior sería similar a la siguiente:

Hello yourself!

El valor predeterminado de parsed es true. En este ejemplo, se establece parsed="false" en la etiqueta <Output> de la política, lo que impide que la política analice la respuesta JSON. En la mayoría de las situaciones en las que se usa la extensión de Cloud Functions, se establece parsed="false". Consulta el elemento<Output> para obtener más información.

Si la función de Cloud Functions devuelve una respuesta JSON y configuras parsed="true", la respuesta de la extensión será una referencia de objeto. Para extraer la respuesta de la referencia, usa la siguiente sintaxis: {objectName}.{jsonKey}. Por ejemplo:

function.response.message

Acciones

invocar

Invoca una Cloud Function.

Actualmente, esta extensión admite la invocación de funciones con activador HTTP.

Sintaxis

<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>

Ejemplo

<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>

Parámetros de solicitud

Parámetro Descripción Tipo Predeterminado Obligatorio
región Región de Google Cloud en la que se implementa la función. String. Ninguno Sí.
ID de proyecto ID del proyecto de GCP. String. Ninguno Sí.
functionName Nombre de la función HTTP que se invocará. Este es el nombre que usaste cuando creaste la función (no necesariamente un nombre del código de la función). String. Ninguno Sí.
method Es el método HTTP que se usará cuando se invoque la función. String. GET Núm.
carga útil Es la carga útil que se enviará con la invocación de la función. JSON. Ninguno Núm.

Respuesta

Valor de respuesta de la función especificada, si existe.

Propiedades de la respuesta

Ninguno

Referencia de configuración

Usa la siguiente información cuando configures e implementes esta extensión para usarla en proxies de API. Si deseas conocer los pasos para configurar una extensión con la consola de Apigee, consulta Cómo agregar y configurar una extensión.

Propiedades comunes de las extensiones

Las siguientes propiedades están presentes para cada extensión.

Propiedad Descripción Predeterminado Obligatorio
name Nombre que asignas a esta configuración de la extensión. Ninguna
packageName Nombre del paquete de extensiones proporcionado por Apigee Edge. Ninguna
version El número de versión del paquete de extensiones desde el que quieres configurar la extensión. Ninguna
configuration Es un valor de configuración específico para la extensión que agregas. Consulta Propiedades para este paquete de extensiones Ninguna

Propiedades de este paquete de extensión

Especifica valores para las siguientes propiedades de configuración específicas de esta extensión.

Propiedad Descripción Predeterminado Obligatorio
credenciales Cuando se ingresa en la consola de Apigee Edge, este es el contenido del archivo de claves de tu cuenta de servicio. Cuando se envía a través de la API de administración, es un valor codificado en Base64 que se genera a partir del archivo de claves de la cuenta de servicio. Ninguno Sí.