Extensión de Google Cloud Functions

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

Versión 2.0.0

Invoca Cloud Functions que se implementan a través de tu proyecto de Google Cloud.

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

Requisitos previos

En este contenido, se proporciona una 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 deseas 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 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.

Cómo invocar una 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 de "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 muestra. De lo contrario, muestra "¡Hola, mundo!" 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 autenticar y obtener autorización para invocar código en Cloud Functions.

El código de la función anterior se guarda en Cloud Functions como helloWorld. El siguiente código de configuración de la política de ExtensionCallout usa este nombre, junto con valores de ID de región y 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 de AssignMessage captura el valor de la respuesta para depurar.

<?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 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 usas la extensión de Cloud Functions, debes configurar parsed="false". Consulta el elemento<Output> para obtener más información.

Si la función de Cloud Functions muestra una respuesta JSON y configuras parsed="true", la respuesta de la extensión es 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 función de Cloud Functions.

Actualmente, esta extensión admite la invocación de funciones de 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 La 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 Es el nombre de la función de 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 No.
carga útil Es la carga útil que se enviará con la invocación de la función. JSON. Ninguno No.

Respuesta

El valor de respuesta de la función especificada, si corresponde

Propiedades de la respuesta

Ninguno

Referencia de configuración

Usa lo siguiente cuando configures y, luego, 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 la extensión

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 Predeterminada 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í.