Actualiza las funciones de 1ª gen. a las de Cloud Run Functions

En esta guía, se describe cómo actualizar las funciones de HTTP y Pub/Sub de 1ª gen. a las de Cloud Run Functions que se ejecutan en Cloud Run. Esta guía solo se aplica a las funciones de 1ª gen. que se crean con la API de Cloud Functions v1. Las instrucciones de esta guía no se aplican a las funciones de 2ª gen. que se crean con la API de Cloud Functions v2 ni a Cloud Functions para Firebase, que es otro producto.

Una vez completada la actualización, solo podrás interactuar con la función actualizada a través de la API de Cloud Run Admin y las herramientas de Cloud Run.

Limitaciones

Por el momento, la herramienta de actualización solo admite la actualización de funciones activadas por HTTP y Pub/Sub.

Descripción general del proceso de actualización

A continuación, se incluye una descripción general del proceso de actualización:

Descripción general de la actualización de una función de 1ª gen. a Cloud Run.
Figura 1. Descripción general de los pasos para actualizar una función de 1ª gen. a Cloud Run.

Los detalles de este proceso se describen en las secciones siguientes.

Descripción general del inicio de la actualización

  • Cuando inicias la actualización (con la Google Cloud CLI o la consola de Google Cloud ), la herramienta de actualización crea una función temporal de 2ª gen. que es una copia de la función original de 1ª gen. Una vez que empieces el proceso de migración, no borres de Cloud Storage el código fuente de la función ni su contenedor de Artifact Registry. Esta función de 2ª gen. tiene las características siguientes:
    • Actúa como puente entre la función original de 1ª gen y la función final completamente actualizada.
    • Tiene el mismo nombre, código y configuración que la función original de 1ª gen.
      • Si se actualiza una función de HTTP, tiene la misma URL de cloudfunctions.net que la función original de 1ª gen. y, también, una URL de run.app de Cloud Run.
        • Después de iniciar la actualización, tanto la función de 1ª gen. como la copia de la función de 2ª gen. se asignan a la misma URL de cloudfunctions.net. Cuando se envían solicitudes a la URL de cloudfunctions.net, el tráfico se sigue enrutando a la función de 1ª gen. La copia de la función de 2ª gen. también tiene una URL de run.app de Cloud Run. Las URLs de funciones de 2ª gen. no recibirán tráfico hasta que lo redirecciones en el paso siguiente.
      • Si actualizas una función de Pub/Sub, esta usará el mismo tema de Pub/Sub que la función de 1ª gen., pero aún no tendrá una suscripción.
    • Ten en cuenta que, si no fijaste tus dependencias a una versión específica, es posible que la copia de la función de 2ª gen. recién creada use una versión de dependencia más reciente.
  • La función de 1ª gen. seguirá apareciendo en la consola deGoogle Cloud de 1ª gen., y su copia temporal de 2ª gen. aparecerá por primera vez en la consola de Cloud Run.

Ejemplo: En esta tabla, se muestra el estado de las funciones de HTTP durante el paso de actualización inicial.

Funciones ¿Entrega tráfico? ¿Se ve en la consola?
Función original de 1ª gen Sí, desde la URL de cloudfunctions.net Sí, en una consola de 1ª gen.
Nueva copia de 2ª gen No. Esta función tiene URLs de cloudfunctions.net y run.app, pero no entregarán tráfico hasta llegar al paso de redireccionamiento. Sí, en la consola de Cloud Run.

Descripción general del redireccionamiento del tráfico

  • Cuando redireccionas el tráfico, el resultado depende de si la función que actualizas es una función de HTTP o de Pub/Sub:
    • Si actualizas una función de HTTP, el tráfico que se dirige a la URL de cloudfunctions.net se dirigirá a la función de 2ª gen. La función de 1ª gen. sigue existiendo, pero no recibe tráfico.
    • Si actualizas una función de Pub/Sub, el activador de funciones de 2ª gen. usará el mismo tema de Pub/Sub, pero creará una suscripción nueva que envía un mensaje a la función de Cloud Run. La suscripción anterior se borra.
  • La función de 1ª gen. desaparece de la consola de 1ª gen.
  • Si ejecutas el comando gcloud functions describe, podrás ver que el entorno de la función ahora es de 2ª gen.
  • Ten en cuenta que existen riesgos durante esta fase de transición, en especial para las funciones de Pub/Sub:
    • Mensajes duplicados: Se crea una suscripción nueva antes de que se borre la anterior. Durante este tiempo de transición, es posible que el mismo mensaje de Pub/Sub se envíe a la función anterior y a la nueva.
    • Pérdida de mensajes: Si actualizas una función de Pub/Sub y la función nueva no controla los mensajes después de que se redireccione el tráfico, corres el riesgo de perder mensajes de Pub/Sub. Este es el caso, sobre todo, si la función tiene inhabilitados los reintentos. Consulta Actualiza Pub/Sub para obtener más detalles.

Ejemplo: En esta tabla, se muestra el estado de las funciones de HTTP durante el paso de redireccionamiento del tráfico.

Funciones ¿Entrega tráfico? ¿Se ve en la consola?
Función original de 1ª gen No. Ya no se ve en la consola de 1ª gen., pero sigue existiendo.
Nueva copia de 2ª gen Sí, desde la URL de cloudfunctions.net y la URL de run.app de Cloud Run. Sí, en la consola de Cloud Run.

Descripción general de la reversión del tráfico

  • Cuando reviertes el tráfico, la herramienta de actualización revierte todo el tráfico que se dirige de la copia de la función de 2ª gen. a la función original de 1ª gen., que ahora entrega todo el tráfico. La función de 2ª gen. seguirá estando disponible para probarla.
  • Si reviertes una función de Pub/Sub, se volverá a crear la suscripción a la función de 1ª gen. y se borrará la suscripción a la función de 2ª gen.
  • Si quieres continuar con la actualización después de revertir el tráfico, primero debes redireccionarlo una vez más a la nueva función de 2ª gen. para proceder.

Ejemplo: En esta tabla, se muestra el estado de las funciones de HTTP si reviertes el tráfico.

Funciones ¿Entrega tráfico? ¿Se ve en la consola?
Función original de 1ª gen Sí. Sí, en una consola de 1ª gen.
Nueva copia de 2ª gen No. Ya no se ve en la consola de Cloud Run, pero sigue existiendo.

Descripción general de la anulación

Puedes anular la actualización en cualquier momento antes de confirmarla. Una vez que la confirmes, no se podrá revertir.

Ejemplo: En esta tabla, se muestra el estado de las funciones de HTTP si abortas la actualización.

Funciones ¿Entrega tráfico? ¿Se ve en la consola?
Función original de 1ª gen Sí. Sí, en una consola de 1ª gen.
Copia de 2ª gen No. Ya no se ve en la consola de Cloud Run (ya no existe).

Descripción general de la confirmación (irreversible)

  • Cuando confirmas la actualización, se completa el proceso de actualización de la función de 1ª gen. Esta acción es irreversible.
  • La función temporal de 2ª gen. se convierte en una función de Cloud Run completa basada en la API de Cloud Run Admin.
    • Esto equivale a ejecutar el comando detach en una función de 2ª gen. El comando detach desvincula una función de Cloud Functions v2 de su entorno de API existente.
    • En el futuro, solo podrás interactuar con la función actualizada a través de la API de Cloud Run Admin y las herramientas de Cloud Run.
  • Se borra la función de 1ª gen. y todo el tráfico se entrega a la función de Cloud Run actualizada.

Ejemplo: En esta tabla, se muestra el estado de las funciones de HTTP después de confirmar la actualización:

Funciones ¿Entrega tráfico? ¿Se ve en la consola?
Nueva función de Cloud Run basada en la API de Cloud Run Admin. Sí, desde la URL de cloudfunctions.net y la URL de run.app de Cloud Run. Sí, en la consola de Cloud Run.
Función original de 1ª gen No. No, ya no existe.
Copia de 2ª gen No. No, ya no existe.

Sugerencias para la prueba

Las pruebas son una parte esencial del proceso de actualización.

Te recomendamos que te familiarices con la herramienta de actualización probándola en funciones que no sean de producción. Una vez que domines el proceso y obtengas resultados coherentes, podrás empezar a mejorar las funciones de producción.

Estas son algunas de las herramientas y técnicas que puedes usar para probar las funciones durante una actualización:

  • Cada vez que las funciones cambien de estado, usa los comandos describe de la Google Cloud CLI para verificar que la función exista y que su entorno y versión sean los esperados. Según el estado actual de la función que se actualiza, usa una de las opciones siguientes:

    • Cloud Run:

      gcloud run services describe FUNCTION_NAME --format yaml
      
    • Cloud Functions:

      gcloud functions describe --region REGION_NAME FUNCTION_NAME
      
  • Usa la página de Logging en las consolas de 1ª gen. y en Cloud Run para ver los detalles del tráfico de las funciones.

  • Usa la consola de Cloud Run para ver y probar la copia de la función de 2ª gen. a medida que avanza por el proceso de actualización:

    • Usa la pestaña Activadores para probar la copia de la función de 2ª gen. después de iniciar la actualización.
    • Usa la pestaña YAML para obtener detalles sobre la función, incluida su URL de run.app de Cloud Run.

Antes de comenzar

Antes de iniciar la actualización, asegúrate de cumplir con los requisitos que se indican más abajo:

  • Habilitaste la API de Cloud Run:

    gcloud services enable run.googleapis.com
  • Tienes una función de HTTP o Pub/Sub de 1ª gen. existente.

  • Tienes los roles de IAM necesarios:

    • Tienes roles/iam.serviceAccountUser configurado en la cuenta de servicio de la función.
    • Tienes el rol de roles/cloudfunctions.admin o uno equivalente en el proyecto para llevar a cabo la actualización.
    • Para una función de Pub/Sub con un parámetro de configuración no-retry, tienes el rol de roles/serviceusage.consumer o uno personalizado con el permiso de serviceusage.services.user. También necesitarás los roles de pubub.topic.getIAMPermissions y pubsub.topic.setIAMPermissions.
    • Para confirmar la actualización de una función de Pub/Sub, debes tener el rol roles/pubsub.admin. El rol de roles/pubsub.admin se aplica a nivel de proyecto y otorga acceso de administrador a todos los recursos de Pub/Sub de un proyecto.

    Las políticas de IAM de la función se pueden consultar de la manera siguiente:

    gcloud functions get-iam-policy FUNCTION_NAME
  • Debes tener el rol de roles/cloudfunctions.admin asignado en la cuenta de servicio de la función. Para otorgar el rol de roles/cloudfunctions.admin, usa el comando gcloud functions add-iam-policy-binding, por ejemplo:

    gcloud functions add-iam-policy-binding FUNCTION_NAME \
       --region=REGION \
       --member=serviceAccount:SERVICE_ACCOUNT \
       --role="roles/cloudfunctions.admin"
    

    Si recibes errores cuando intentas ejecutar este comando, asegúrate de que la función cumpla con las políticas de la organización. Por ejemplo, es posible que la organización no permita las funciones de HTTP no autenticadas.

Para obtener más información sobre los miembros y los roles, consulta Agrega principales y otorga roles.

Actualiza funciones de HTTP

En esta sección, se describe cómo actualizar una función de HTTP de 1ª gen. a una de Cloud Run. Para obtener información sobre cómo actualizar una función de Pub/Sub de 1ª gen., consulta la sección posterior.

Una vez redireccionado el tráfico y confirmada la actualización, como se describe en las secciones siguientes, la URL de cloudfunctions.net asociada a la función de HTTP de 1ª gen. original seguirá funcionando y enrutará el tráfico a la nueva función de Cloud Run.

Inicia la actualización de la función de HTTP

En este paso, se crea una copia de 2ª gen. de la función de 1ª gen.

Consola

  1. En la consola de Google Cloud , accede a la página Functions (1st gen):

    Ir a Functions (1st gen)

  2. Busca la función de 1ª gen. que quieres actualizar y confirma que su estado en la columna Estado de actualización sea Listo para actualizar.

  3. Haz clic en el nombre de la función para abrir su página de detalles.

  4. En la página de detalles de la función, haz clic en Actualizar, en Actualización apta.

  5. Sigue las indicaciones para iniciar el proceso de actualización.

Después de completar este paso, se abrirá el panel Actualización en curso, en el que se te pedirá que hagas clic en el vínculo Ir a Cloud Run para continuar con el proceso de actualización.

gcloud

Sigue los pasos que se indican a continuación para ejecutar el comando gcloud beta functions upgrade con la marca --setup-config:

gcloud beta functions upgrade FUNCTION_NAME --setup-config

Reemplaza FUNCTION_NAME por el nombre de la función de 1ª gen.

Después de iniciar la actualización, sigue estos pasos:

  • La función de 1ª gen. sigue entregando tráfico a su URL original. Para ver esta URL, accede a la página de detalles de la función en la consola de funciones (1ª gen.) y abre la pestaña Activador.
  • Se creará una función temporal de 2ª gen. que es una copia de la función de 1ª gen. Esta tiene la misma URL de cloudfunctions.net que la función de 1ª gen., así como una nueva URL de run.app de Cloud Run. Puedes ver ambas URLs en la página de detalles de la función en la consola de Cloud Run y abrir la pestaña YAML. Como alternativa, puedes usar este comando:

    gcloud run services describe YOUR_SERVICE_NAME \
        --region YOUR_REGION \
        --format="value(status.url)"
  • Para verificar que existe la copia de 2ª gen. de la función de 1ª gen., sigue los pasos que se indican a continuación:

    gcloud run services describe FUNCTION_NAME --format yaml
    
  • Puedes verificar el entorno de la función de 1ª gen., en el que el resultado debería devolver el entorno de la función como 1st gen:

    gcloud functions describe --region REGION_NAME FUNCTION_NAME
    

Soluciona problemas relacionados con el inicio de la actualización

La actualización falla si se dan las condiciones siguientes:

  • Ya existe una función con el mismo nombre en la misma región y el mismo proyecto.
  • La función de 1ª gen. usa un entorno de ejecución retirado, por lo que no es apta para la actualización hasta que la vuelvas a implementar con un entorno de ejecución compatible.
  • El emisor no tiene el permiso cloudfunctions.functions.generationUpgrade. Ten en cuenta que el emisor necesita el rol de roles/cloudfunctions.admin o uno equivalente en el proyecto.

Redirecciona el tráfico para la función de HTTP

En este punto, debes probar la URL de la función original y su copia. Asegúrate de que funcionen como se espera antes de continuar. Si tienes problemas, cancela la actualización para volver a un estado limpio, en el que podrás abordar cualquier problema subyacente de la función de 1ª gen.

En el paso de redireccionamiento, se redirecciona el tráfico de la URL de Cloud Functions de 1ª gen. a la copia de la función de 2ª gen.

Consola

  1. En el panel Actualización en curso de la página de detalles de Cloud Run Functions, haz clic en Ir a Cloud Run.
  2. Haz clic en Probar función para probarla (es un paso opcional, pero muy recomendable).
  3. Cuando esté todo listo, haz clic en Redireccionar el tráfico.

gcloud

Sigue los pasos que se indican a continuación para ejecutar el comando gcloud beta functions upgrade con la marca --redirect-traffic:

gcloud beta functions upgrade FUNCTION_NAME --redirect-traffic

Después de redireccionar el tráfico, la copia de la función de 2ª gen. entrega tráfico a la URL de la función (cloudfunctions.net) y a la de Cloud Run (run.app).

Prueba la función de HTTP después del redireccionamiento

  • Verifica el entorno de la función:

    gcloud functions describe --region REGION_NAME FUNCTION_NAME
    

    El resultado muestra el entorno como 2nd gen.

  • Usa la herramienta de registro de la consola para comparar la copia de la función de 2ª gen. con la función original de 1ª gen.

Soluciona problemas relacionados con el redireccionamiento

El redireccionamiento falla cuando se dan las condiciones siguientes:

  • No ejecutaste el paso anterior (--setup-config).

Revierte el tráfico de la función de HTTP

Si todavía no quieres confirmar la actualización, puedes revertir el tráfico a la función de 1ª gen.

Consola

En el panel Actualización en curso de la página de detalles de Cloud Run Functions, en la consola de Cloud Run, haz clic en Revertir tráfico.

gcloud

Sigue los pasos que se indican a continuación para ejecutar el comando gcloud beta functions upgrade con la marca --rollback-traffic:

gcloud beta functions upgrade FUNCTION_NAME --rollback-traffic

Después de revertir el tráfico, sucede lo siguiente:

  • La función de 1ª gen. entrega tráfico a la URL de cloudfunctions.net.
  • La copia de la función de 2ª gen. permanece disponible y puedes activarla con su URL de run.app.

Puedes verificar el entorno de la función de la manera siguiente. El resultado debería mostrar el entorno de la función como 1st gen:

gcloud functions describe --region REGION_NAME FUNCTION_NAME

La reversión falla si no redireccionaste el tráfico a la función de 2ª gen.

Confirma la actualización de la función de HTTP

En este paso se finaliza la actualización, después de lo cual ya no podrás anular el proceso. Antes de llevar adelante este paso, asegúrate de haber probado de forma exhaustiva las funciones.

Consola

En el panel Actualización en curso de la página de detalles de Cloud Run Functions, en la consola de Cloud Run, haz clic en Confirmar actualización.

gcloud

Sigue los pasos que se indican a continuación para ejecutar el comando gcloud beta functions upgrade con la marca --commit:

gcloud beta functions upgrade FUNCTION_NAME --commit

Después de confirmar la actualización, sucede lo siguiente:

  • Se borra la función de 1ª gen. y se desvincula la copia de la función de 2ª gen. para que se convierta en una función de Cloud Run completa.
  • La función de Cloud Run conserva la URL de cloudfunctions.net junto con la nueva URL de run.app.
  • Puedes verificar que la función de 1ª gen. ya no exista:

    gcloud functions describe --region REGION_NAME FUNCTION_NAME
    
  • Puedes verificar los detalles del servicio de Cloud Run:

    gcloud run services describe FUNCTION_NAME --format yaml
    

El resultado devuelve que se creó una generación nueva y que la etiqueta Goog-managed-by tiene un valor vacío.

La confirmación falla si el tráfico no se redireccionó a la función de Cloud Run.

Actualiza las funciones de Pub/Sub

En esta sección, se describe cómo actualizar una función de Pub/Sub de 1ª gen. a una de Cloud Run.

El proceso para actualizar una función de Pub/Sub de 1ª gen. sigue el mismo patrón básico que la actualización de una función de HTTP, salvo por algunas consideraciones adicionales:

  • Inhabilitar el reintento en caso de error no es una opción compatible con Cloud Run, pero es el parámetro de configuración predeterminada de la 1ª gen., por lo que es posible que tengas funciones de ambos tipos. Lo que hace la herramienta de actualización depende de este parámetro de configuración:

    • Si la función de 1ª gen. tiene inhabilitados los reintentos (el parámetro de configuración predeterminada de la 1ª gen.), la herramienta de actualización crea un activador de Pub/Sub de Eventarc junto con una cola de mensajes no entregados (DLQ). La herramienta de actualización establece la política de Identity and Access Management (IAM) para las suscripciones y sus temas. Cuando se complete la actualización, el tema de la cola de mensajes no entregados almacenará los mensajes no entregados, que podrás recuperar creando una suscripción nueva a la cola de mensajes no entregados.
    • Si la función de 1ª gen. tiene habilitado los reintentos, la herramienta de actualización creará un activador de Pub/Sub de Eventarc con la configuración predeterminada.

Inicia la actualización de la función de Pub/Sub

En este paso, se crea una copia de 2ª gen. de la función de 1ª gen.

Consola

  1. En la consola de Google Cloud , accede a la página Cloud Functions (1ª gen.):

    Ir a Functions (1st gen)

  2. Busca la función de 1ª gen. que quieres actualizar y confirma que su estado en la columna Estado de actualización sea Listo para actualizar.

  3. Haz clic en el nombre de la función para abrir su página de detalles.

  4. En la página de detalles de la función, haz clic en Actualizar en Actualización apta.

Cuando finalice esta fase, se abrirá el panel Actualización en curso, en el que se te solicitará que hagas clic en el vínculo Ir a Cloud Run para continuar con el proceso de actualización.

gcloud

Sigue los pasos que se indican a continuación para ejecutar el comando gcloud beta functions upgrade con la marca --setup-config:

gcloud beta functions upgrade FUNCTION_NAME --setup-config

Reemplaza FUNCTION_NAME por el nombre de la función de 1ª gen.

De manera opcional, especifica una cuenta de servicio para el activador:

gcloud beta functions upgrade FUNCTION_NAME --setup-config --trigger-service-account=CUSTOM_SA_EMAIL

Reemplaza CUSTOM_SA_EMAIL por el correo electrónico de tu cuenta de servicio personalizada.

Si la cuenta de servicio del activador (la cuenta de servicio predeterminada de Compute Engine o la cuenta de servicio personalizada especificada) no tiene el permiso run.route.invoke, el sistema te solicitará que vincules el rol de roles/run.invoker.

Después de iniciar la actualización, sigue estos pasos:

  • La función de 1ª gen. sigue entregando tráfico a su URL original.
  • Se crea una copia de 2ª gen. de la función de 1ª gen. Puedes activarla con su URL de Cloud Run.
  • La función de 1ª gen. sigue entregando tráfico a su URL de cloudfunctions.net.

Prueba la función de Pub/Sub después de iniciar la actualización

  • Para verificar que existe la copia de 2ª gen. de la función de 1ª gen., sigue los pasos que se indican a continuación:

    gcloud run services describe FUNCTION_NAME --format yaml
    
  • Puedes verificar el entorno de la función de 1ª gen., en el que el resultado debería devolver el entorno de la función como 1st gen:

    gcloud functions describe --region REGION_NAME FUNCTION_NAME
    
  • Publica un mensaje en el tema de destino para activar la función de 1ª gen.

  • Para probar la función nueva, agrégale un activador de Pub/Sub y confirma que esta responda al activador según lo esperado:

    1. Elige la función en la consola de Cloud Run y abre la pestaña Activadores.
    2. Haz clic en Agregar activador y, en el panel Activador de Eventarc, elige un tema para activar la función. De forma predeterminada, la función se activa cuando se publica un mensaje en el tema.
    3. En el panel Actualización en curso, haz clic en Probar función.
    4. En la ventana de Cloud Code para Cloud Shell que se abre, publica un mensaje en el tema que agregaste en la pestaña Activadores.
    5. En la consola de Cloud Run, ve a Observabilidad > Registros para confirmar que la función publicó el mensaje. Como alternativa, puedes usar la línea de comandos en Cloud Code para Cloud Shell con el objetivo de ver el resultado del registro.

    Por ejemplo, supongamos que tienes una función básica de Hello World que publica un saludo. Después de especificar el activador nuevo, puedes probarlo en Cloud Code para Cloud Shell de la manera siguiente:

    gcloud pubsub topics publish YOUR_TOPIC_NAME --message YOUR_NAME
    gcloud functions logs read --region YOUR_REGION --limit 50
    

Soluciona problemas relacionados con el inicio de la actualización de Pub/Sub

La actualización falla si se dan las condiciones siguientes:

  • Ya existe una función de Cloud Run con el mismo nombre en la misma región y el mismo proyecto.
  • Intentaste actualizar una función de 2ª gen.
  • La función de 1ª gen. ya está en proceso de actualización.
  • La función de 1ª gen no existe.
  • La función de 1ª gen. tiene un estado de error.
  • La función de 1ª gen. no es una función de HTTP ni de Pub/Sub.
  • El emisor no tiene el permiso cloudfunctions.functions.generationUpgrade. Ten en cuenta que el emisor necesita el rol de roles/cloudfunctions.admin o uno equivalente en el proyecto.

Redirecciona el tráfico para la función de Pub/Sub

En este paso, se redirecciona el tráfico de la URL de Cloud Functions de 1ª gen. a la copia de la función de 2ª gen.

Consola

  1. En el panel Actualización en curso de la página de detalles de Cloud Run Functions, haz clic en Ir a Cloud Run.
  2. Haz clic en Probar función para probarla (es un paso opcional, pero muy recomendable).
  3. Cuando esté todo listo, haz clic en Redireccionar el tráfico.

gcloud

Sigue los pasos que se indican a continuación para ejecutar el comando gcloud beta functions upgrade con la marca --redirect-traffic:

gcloud beta functions upgrade FUNCTION_NAME --redirect-traffic

Después de redireccionar el tráfico, la función de 2ª gen. entrega tráfico a la URL de Cloud Functions y a la de Cloud Run.

Prueba Pub/Sub después de redireccionar el tráfico

  • Puedes verificar el entorno de la función:

    gcloud functions describe --region REGION_NAME FUNCTION_NAME
    

    El resultado muestra el entorno como 2nd gen.

    • La eventTrigger.retryPolicy coincide con la política de reintentos que se especificó mientras se creaba la función.
    • La dirección de correo electrónico eventTrigger.serviceAccountEmail es la cuenta de servicio predeterminada de Compute Engine o la cuenta de servicio personalizada especificada.
    • La publicación de un mensaje en el tema de destino ahora activa la copia de la función de 2ª gen.

Soluciona problemas de Pub/Sub relacionados con el redireccionamiento

El redireccionamiento falla cuando se dan las condiciones siguientes:

  • No ejecutaste el paso anterior (--setup-config).
  • Se borró de forma manual la función de Cloud Run.

Revierte el tráfico de una función de Pub/Sub

En este paso, se revierte el tráfico a la función de 1ª gen.

Consola

En el panel Actualización en curso de la página de detalles de Cloud Run Functions, haz clic en Revertir tráfico.

gcloud

Sigue los pasos que se indican a continuación para ejecutar el comando gcloud beta functions upgrade con la marca --rollback-traffic:

gcloud beta functions upgrade FUNCTION_NAME --rollback-traffic

Después de revertir el tráfico, sucede lo siguiente:

  • La función vuelve al estado en el que se encontraba inmediatamente después del paso de actualización inicial.
  • La función de 1ª gen. entrega tráfico a la URL de cloudfunctions.net.
  • La copia de 2ª gen. sigue disponible y puedes activarla con su URL de Cloud Run.

  • Puedes verificar el entorno de la función:

    gcloud functions describe --region REGION_NAME FUNCTION_NAME
    

    El resultado debería mostrar el entorno de la función como 1st gen.

  • La publicación de un mensaje en el tema de destino activa la función de 1ª generación.

La reversión falla si no redireccionaste el tráfico a la función de Cloud Run.

Confirma la actualización de la función de Pub/Sub

En este paso se finaliza la actualización, después de lo cual ya no podrás anular el proceso. Este paso no se puede revertir. Antes de llevar adelante este paso, asegúrate de haber probado de forma exhaustiva las funciones.

Consola

En el panel Actualización en curso de la página de detalles de Cloud Run Functions, haz clic en Confirmar actualización.

gcloud

Sigue los pasos que se indican a continuación para ejecutar el comando gcloud beta functions upgrade con la marca --commit:

gcloud beta functions upgrade FUNCTION_NAME --commit

Después de confirmar la actualización, sucede lo siguiente:

  • Se borra la función de 1ª gen.
  • La función de Cloud Run conserva la URL de cloudfunctions.net.
  • Puedes verificar que la función ya no aparezca en la lista:
    gcloud functions describe --region REGION_NAME FUNCTION_NAME
    
  • Puedes verificar los detalles del servicio de Cloud Run:
    gcloud run services describe FUNCTION_NAME --format yaml
    
    • El resultado indica que se creó una generación nueva. La etiqueta Goog-managed-by debe tener un valor vacío.
  • Si creaste la función de 1ª gen. sin activar Volver a intentar en caso de error, la suscripción a Pub/Sub para el activador tendrá una cola de mensajes no entregados (DLQ).
  • Publicar un mensaje en el tema de destino ahora activa la función de Cloud Run.

La confirmación falla en estas condiciones:

  • No se redireccionó el tráfico a la función de Cloud Run.
  • Se borró de forma manual la función de Cloud Run.

Anula la actualización

Esta acción cancela el proceso de actualización. Se borra la copia de la nueva función de 2ª gen., y la función de 1ª gen. sigue entregando tráfico a la URL original de cloudfunctions.net. Puedes hacer esto en cualquier momento durante el proceso de actualización antes de confirmar la actualización.

Si usas la consola de Google Cloud para llevar a cabo la actualización, la IU solo te permite anular el proceso inmediatamente después de la operación de actualización inicial. El botón Anular se encuentra en la esquina superior izquierda de la consola de Functions (1ª gen.). Si usas la Google Cloud CLI, puedes anular la actualización en cualquier momento antes de confirmarla. Después de eso, el proceso se vuelve irreversible.

Puedes usar la Google Cloud CLI para anular la actualización de una función incluso si usaste la consola de Google Cloud para llevar a cabo proceso de actualización:

gcloud beta functions upgrade FUNCTION_NAME --abort

Después de anular la actualización, ocurre lo siguiente:

  • Se borra la copia de la función de 2ª gen.
  • La función de 1ª gen. entrega tráfico a la URL de cloudfunctions.net.
  • En la consola deGoogle Cloud , el estado de actualización de la función cambia de Se copió la configuración a Listo para actualizar.
  • Puedes verificar que el servicio de Cloud Run ya no aparece en la lista:

    gcloud run services list
  • Puedes verificar el entorno de la función:

    gcloud functions describe --region REGION_NAME FUNCTION_NAME
    

El resultado muestra el entorno de la función como 1st gen.

La operación de anulación falla si ya confirmaste la actualización.

Verifica las políticas de IAM convertidas

Durante el proceso de actualización, la herramienta hace una conversión con el mayor esfuerzo posible de los roles y permisos entre Cloud Functions de 1ª gen. y las nuevas funciones de Cloud Run.

El proceso de actualización convierte los roles de IAM para Cloud Functions de 1ª gen. en roles equivalentes de Cloud Run.

Reglas de conversión:

  • roles/cloudfunctions.invoker se convierte en roles/run.invoker.
  • roles/cloudfunctions.developer se convierte en roles/run.sourceDeveloper.
  • roles/cloudfunctions.viewer se convierte en roles/run.sourceViewer.
  • roles/cloudfunctions.admin se convierte en roles/run.admin y roles/run.sourceDeveloper.

La actualización de la política de IAM falla si el emisor no tiene los permisos projects.getIamPolicy ni run.setIamPolicy. El emisor necesita el rol de roles/cloudfunctions.admin o uno equivalente en el proyecto.

Verifica la actualización de la política de IAM

Para verificar que tus políticas de IAM se actualicen de forma correcta, revísalas en cada etapa del proceso de actualización para confirmar que tengan los valores esperados:

  1. Inicia el proceso de actualización de la función:

    gcloud beta functions upgrade FUNCTION_NAME --setup-config
    

    El resultado muestra un mensaje de advertencia si se detectan vinculaciones de roles personalizados.

  2. Valida que las políticas de IAM establecidas en la función de 1ª gen. se hayan convertido y actualizado a la función de Cloud Run:

    gcloud functions get-iam-policy FUNCTION_NAME
    gcloud run services get-iam-policy FUNCTION_NAME
    
  3. Valida que la vinculación del rol de invocador de Cloud Run Functions a nivel de proyecto se haya convertido y actualizado a la función de Cloud Run:

    gcloud projects get-iam-policy PROJECT_ID | grep "roles/cloudfunctions.invoker"
    gcloud run services get-iam-policy FUNCTION_NAME
    

¿Qué sigue?