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

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

Una vez que se complete 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 siguientes secciones.

Descripción general de Iniciar actualización

  • Cuando inicias la actualización (con 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 tu función original de 1ª gen. Esta función de 2ª gen.:
    • 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 HTTP, tiene la misma URL de cloudfunctions.net que la función original de 1ª gen. y también tiene una URL de run.app de Cloud Run.
        • Después de iniciar la actualización, tanto tu función de 1ª gen. como la copia de tu 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 Cloud Runrun.app. Las URLs de la función de 2ª gen. no recibirán tráfico hasta que lo redirecciones en el siguiente paso.
      • Si se actualiza una función de Pub/Sub, usa el mismo tema de Pub/Sub que la función de 1ª gen., pero aún no tiene 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. que se creó recientemente 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 HTTP durante el paso de actualización inicial.

Funciones ¿Se procesa el tráfico? ¿Se ve en la consola?
Función original de 1ª gen. Sí, desde la URL cloudfunctions.net Sí, 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 el paso de redireccionamiento. Sí, 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 HTTP, el tráfico dirigido a la URL cloudfunctions.net se dirigirá a la función de 2ª gen. Tu 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. usa el mismo tema de Pub/Sub, pero crea una suscripción nueva que envía un mensaje a la función de Cloud Run. Se borra la suscripción anterior.
  • La función de 1ª gen. desaparece de la consola de 1ª gen.
  • Si ejecutas el comando gcloud functions describe, puedes 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 suscripción anterior. Durante este tiempo de transición, es posible que el mismo mensaje de Pub/Sub se envíe a tu función anterior y a la nueva.
    • Pérdida de mensajes: Si actualizas una función de Pub/Sub y la nueva función no controla los mensajes después de que se redirecciona el tráfico, corres el riesgo de perder mensajes de Pub/Sub. Esto es especialmente cierto 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 ¿Se procesa el 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í, 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 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á 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 deseas continuar con la actualización después de revertir el tráfico, primero debes redireccionarlo nuevamente a la nueva función de 2ª gen. para continuar.

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

Funciones ¿Se procesa el tráfico? ¿Se ve en la consola?
Función original de 1ª gen. Sí. Sí, 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 confirmes la actualización, esta será irreversible.

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

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

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

  • Cuando confirmes la actualización, se completará 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 separa 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 dirige a la Cloud Run Function actualizada.

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

Funciones ¿Se procesa el 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í, la consola de Cloud Run.
Función original de 1ª gen. No. No, ya no existe.
Texto de 2ª gen. No. No, ya no existe.

Sugerencias para las pruebas

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 constantes, podrás comenzar a mejorar las funciones de producción.

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

  • Cada vez que tus funciones cambien de estado, usa los comandos describe de 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 siguientes opciones

    • Cloud Run:

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

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

  • Usa la consola de Cloud Run para ver y probar la copia de la función de 2ª gen. a medida que avanza 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 ver detalles sobre la función, incluida su URL de run.app de Cloud Run.

Antes de comenzar

Antes de comenzar la actualización, asegúrate de cumplir con estos requisitos previos:

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

    • Debes tener roles/iam.serviceAccountUser configurado en la cuenta de servicio de la función.
    • Debes tener el rol de roles/cloudfunctions.admin o un rol equivalente en el proyecto para realizar 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 un rol personalizado con el permiso de serviceusage.services.user.
    • Para confirmar una actualización de la función de Pub/Sub, debes tener el rol roles/pubsub.admin. El rol roles/pubsub.admin es un rol a nivel del proyecto que otorga acceso administrativo a todos los recursos de Pub/Sub dentro de un proyecto.

    Puedes ver las políticas de IAM de tu función de la siguiente manera:

    gcloud functions get-iam-policy FUNCTION_NAME
  • Debes tener el permiso roles/cloudfunctions.admin otorgado en la cuenta de servicio de la función. Para otorgar el rol 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 tu función cumpla con las políticas de tu organización. Por ejemplo, es posible que tu organización no permita funciones de HTTP no autenticadas.

Para obtener más información sobre los miembros y los roles, consulta Cómo agregar principales y otorgar roles.

Actualiza funciones de HTTP

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

Después de redireccionar el tráfico y confirmar la actualización, como se describe en las siguientes secciones, la URL de cloudfunctions.net asociada con 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 tu función de 1ª gen.

Console

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

    Ir a Functions (1ª gen.)

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

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

  4. En la página de detalles de la función, haz clic en Actualizar en Apto para actualización.

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

Después de completar este paso, aparecerá 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

Ejecuta 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 tu función de 1ª gen.

Después de iniciar la actualización, haz lo siguiente:

  • La función de 1ª gen. sigue entregando tráfico a su URL original. Para ver esta URL, ve a la página de detalles de la función en la consola de Functions (1ª gen.) y abre la pestaña Activador.
  • Se crea una función temporal de 2ª gen. que es una copia de la función de 1ª gen. Tiene la misma URL cloudfunctions.net que la función de 1ª gen., así como una nueva URL 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 tu función de 1ª gen., haz lo siguiente:

    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 mostrar el entorno de la función como 1st gen:

    gcloud functions describe --region REGION_NAME FUNCTION_NAME
    

Soluciona problemas del paso de inicio de la actualización

La actualización falla en las siguientes condiciones:

  • 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 la entidad llamadora necesita el rol de roles/cloudfunctions.admin o un rol equivalente en el proyecto.

Redirecciona el tráfico para la función 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 en la función de 1ª gen.

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

Console

  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 probar tu función (opcional, pero muy recomendable).
  3. Cuando todo esté listo, haz clic en Redirigir tráfico.

gcloud

Ejecuta 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 URL de Cloud Run (run.app).

Prueba tu 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 tu función de 2ª gen. con la función original de 1ª gen.

Soluciona problemas de redireccionamiento

El redireccionamiento falla en las siguientes condiciones:

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

Revertir el tráfico de la función HTTP

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

Console

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 Revierte el tráfico.

gcloud

Ejecuta 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, haz lo siguiente:

  • La función de 1ª gen. entrega tráfico a la URL 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 siguiente manera. 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 HTTP

Este paso finaliza la actualización, después de lo cual ya no podrás anular el proceso. Antes de realizar este paso, asegúrate de haber probado a fondo tus funciones.

Console

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

Ejecuta el comando gcloud beta functions upgrade con la marca --commit:

gcloud beta functions upgrade FUNCTION_NAME --commit

Después de confirmar la actualización, haz 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 1st 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 muestra que se creó una nueva generación y que la etiqueta Goog-managed-by tiene un valor vacío.

La confirmación falla cuando el tráfico no se redireccionó a la Cloud Run Function.

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 función 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, pero hay algunas consideraciones adicionales:

  • Inhabilitar el reintento en caso de falla no es una función compatible con Cloud Run, pero es el parámetro de configuración predeterminado en 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 tu función de 1ª gen. tiene inhabilitados los reintentos (el parámetro de configuración predeterminado 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 nueva suscripción a la cola de mensajes no entregados.
    • Si tu función de 1ª gen. tiene habilitado el reintento, la herramienta de actualización crea 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 tu función de 1ª gen.

Console

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

    Ir a Functions (1ª gen.)

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

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

  4. En la página de detalles de la función, haz clic en Actualizar en Apto para actualización.

Cuando finalice esta fase, aparecerá 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

Ejecuta 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 tu 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 (cuenta de servicio predeterminada de Compute Engine o cuenta de servicio personalizada especificada) no tiene el permiso run.route.invoke, el sistema te solicitará que vincules el rol roles/run.invoker.

Después de iniciar la actualización, haz lo siguiente:

  • La función de 1ª gen. sigue entregando tráfico a su URL original.
  • Se crea una copia de 2ª gen. de tu 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 tu función de Pub/Sub después del paso de inicio de la actualización

  • Para verificar que existe la copia de 2ª gen. de tu función de 1ª gen., haz lo siguiente:

    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 mostrar 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 nueva función, agrégale un activador de Pub/Sub y confirma que la función responda al activador según lo esperado:

    1. Selecciona 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, selecciona 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 Triggers.
    5. En la consola de Cloud Run, ve a Observabilidad > Registros para confirmar que tu función publicó el mensaje. Como alternativa, puedes usar la línea de comandos en Cloud Code para Cloud Shell para 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 nuevo activador, puedes probarlo en Cloud Code para Cloud Shell de la siguiente manera:

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

Soluciona problemas del paso de inicio de la actualización de Pub/Sub

La actualización falla en las siguientes condiciones:

  • 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. está en estado de error.
  • La función de 1ª gen. no es una función de HTTP ni de Pub/Sub.
  • El llamador no tiene el permiso cloudfunctions.functions.generationUpgrade. Ten en cuenta que la entidad llamadora necesita el rol de roles/cloudfunctions.admin o un rol 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.

Console

  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 probar tu función (opcional, pero muy recomendable).
  3. Cuando todo esté listo, haz clic en Redirigir tráfico.

gcloud

Ejecuta 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 URL 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.

    • El eventTrigger.retryPolicy coincide con la política de reintentos especificada durante la creación de la función.
    • El valor 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 para el redireccionamiento

El redireccionamiento falla en las siguientes condiciones:

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

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

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

Console

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

gcloud

Ejecuta 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, haz 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 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 redirigiste el tráfico a la Cloud Run Function.

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

Este paso finaliza la actualización, después de lo cual ya no podrás anular el proceso. Este paso no se puede revertir. Antes de realizar este paso, asegúrate de haber probado a fondo tus funciones.

Console

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

gcloud

Ejecuta el comando gcloud beta functions upgrade con la marca --commit:

gcloud beta functions upgrade FUNCTION_NAME --commit

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

  • Se borra la función de 1ª gen.
  • La Cloud Run Function 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 muestra que se creó una nueva generación. La etiqueta Goog-managed-by debe tener un valor vacío.
  • Si creaste la función de 1ª gen. sin marcar Retry on Failures, la suscripción de Pub/Sub para el activador tiene 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 las siguientes condiciones:

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

Cómo anular 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 realizar esta acción en cualquier momento durante el proceso de actualización antes de confirmar la actualización.

Si usas la consola de Google Cloud para realizar 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 Abort se encuentra en la esquina superior izquierda de la consola de Functions (1ª gen.). Si usas 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 Google Cloud CLI para anular una actualización de la función, incluso si usaste la consola de Google Cloud para realizar el proceso de actualización:

gcloud beta functions upgrade FUNCTION_NAME --abort

Después de anular la actualización, ocurrirá 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 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 realiza 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 de 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 llamador no tiene permisos de projects.getIamPolicy o run.setIamPolicy. El llamador necesita el rol roles/cloudfunctions.admin o un rol equivalente en el proyecto.

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

Para verificar que tus políticas de IAM se actualicen correctamente, 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 tu función:

    gcloud beta functions upgrade FUNCTION_NAME --setup-config
    

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

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