Actualizar funciones de 1.ª gen. a Cloud Run Functions

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

Una vez completada la actualización, solo podrás interactuar con la función actualizada mediante la API Admin de Cloud Run 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:

Información general sobre cómo actualizar una función de 1.ª gen. a Cloud Run.
Imagen 1. Resumen 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.

Resumen de la actualización

  • Cuando inicies la actualización (con la CLI de Google Cloud o la Google Cloud consola), la herramienta de actualización creará una función de segunda generación temporal que será una copia de tu función de primera generación original. Esta función de segunda generación:
    • Actúa como puente entre la función original de primera generación y la función final totalmente actualizada.
    • Tiene el mismo nombre, código y configuración que la función original de 1.ª gen.
      • Si actualizas una función HTTP, tiene la misma URL cloudfunctions.net que la función original de 1.ª gen. y también tiene una URL de run.app 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 cloudfunctions.net. Cuando se envían solicitudes a la URL cloudfunctions.net, el tráfico sigue dirigiéndose a la función de primera generación. La copia de la función de 2.ª gen. también tiene una URL de Cloud Runrun.app. Las URLs de función de la segunda generación no recibirán tráfico hasta que lo redirijas en el siguiente paso.
      • Si actualizas una función de Pub/Sub, usa el mismo tema de Pub/Sub que la función de primera generación, pero aún no tiene una suscripción.
    • Ten en cuenta que, si no has fijado tus dependencias a una versión específica, la copia de la función de segunda generación que has creado puede usar una versión más reciente de la dependencia.
  • La función de 1.ª gen. sigue apareciendo en la Google Cloud consola de 1.ª gen. y su copia temporal de 2.ª gen. aparece por primera vez en la consola de Cloud Run.

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

Functions ¿Servir tráfico? ¿Visible 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 cloudfunctions.net y run.app, pero no servirá tráfico hasta que se complete el paso de redirección. Sí, en la consola de Cloud Run.

Descripción general del tráfico de redirección

  • Cuando redirijas el tráfico, el resultado dependerá de si la función que vas a actualizar es una función HTTP o una función Pub/Sub:
    • Si actualizas una función HTTP, el tráfico dirigido a la URL cloudfunctions.net se enviará a la función de segunda generación. Tu función de 1.ª gen. seguirá existiendo, pero no recibirá tráfico.
    • Si actualizas una función de Pub/Sub, el activador de la función de segunda generación usa el mismo tema de Pub/Sub, pero crea una nueva suscripción que envía un mensaje a la función de Cloud Run. La suscripción antigua se elimina.
  • La función de 1.ª gen. desaparece de la consola de 1.ª gen.
  • Si ejecutas el comando gcloud functions describe, verás que el entorno de la función es ahora de segunda generación.
  • Ten en cuenta que hay riesgos durante esta fase de transición, especialmente para las funciones de Pub/Sub:
    • Mensajes duplicados: se crea una nueva suscripción antes de que se elimine la antigua. Durante este periodo de transición, es posible que se envíe el mismo mensaje de Pub/Sub tanto a tu función antigua como a la nueva.
    • Pérdida de mensajes: si actualizas una función de Pub/Sub y la nueva función no puede gestionar los mensajes después de que se redirija el tráfico, corres el riesgo de perder mensajes de Pub/Sub. Esto es especialmente cierto si la función tiene los reintentos inhabilitados. Consulta Actualizar Pub/Sub para obtener más información.

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

Functions ¿Servir tráfico? ¿Visible 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 cloudfunctions.net y desde la URL de run.app Cloud Run. Sí, en la consola de Cloud Run.

Información general sobre 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 segunda generación a la función original de primera generación, que ahora es la que gestiona todo el tráfico. La función de segunda generación sigue disponible para las pruebas.
  • Si revierte una función de Pub/Sub, se volverá a crear la suscripción de la función de primera generación y se eliminará la suscripción de la función de segunda generación.
  • Si quieres continuar con la actualización después de revertir el tráfico, primero debes redirigir el tráfico de nuevo a la función de segunda generación para continuar.

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

Functions ¿Servir tráfico? ¿Visible en la consola?
Función original de 1.ª gen. Sí. Sí, consola de 1.ª gen.
Nueva copia de 2.ª gen. No. Ya no se muestra en la consola de Cloud Run, pero sigue existiendo.

Abortar resumen

Puedes cancelar la actualización en cualquier momento antes de confirmarla. Una vez que confirmes la acción, la actualización será irreversible.

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

Functions ¿Servir tráfico? ¿Visible en la consola?
Función original de 1.ª gen. Sí. Sí, consola de 1.ª gen.
2nd gen copy No. Ya no se muestra en la consola de Cloud Run y ya no existe.

Resumen de la confirmación (irreversible)

  • Al confirmar 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 segunda generación se convierte en una función de Cloud Run completa basada en la API Admin de Cloud Run.
    • Es el equivalente a ejecutar el comando detach en una función de 2.ª gen. El comando detach desvincula una función de Cloud Functions (versión 2) de su entorno de API.
    • A partir de ahora, solo podrás interactuar con la función actualizada mediante la API Cloud Run Admin y las herramientas de Cloud Run.
  • La función de 1.ª gen. se elimina y todo el tráfico se dirige a la función de Cloud Run actualizada.

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

Functions ¿Servir tráfico? ¿Visible en la consola?
Nueva función de Cloud Run basada en la API Admin de Cloud Run. Sí, desde la URL cloudfunctions.net y desde la URL de run.app Cloud Run. Sí, en la consola de Cloud Run.
Función original de 1.ª gen. No. No, ya no existe.
2nd gen copy No. No, ya no existe.

Consejos para hacer 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. Cuando domines el proceso y obtengas resultados positivos de forma constante, podrás empezar 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 cambie el estado de tus funciones, usa los comandos de la CLI de Google Cloud describe para verificar que la función existe y que su entorno y su versión son los esperados. En función del estado actual de la función que se va a actualizar, usa una de las 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 Logging de las consolas de primera generación y Cloud Run para ver los detalles del tráfico de la función.

  • Usa la consola de Cloud Run para ver y probar la copia de la función de segunda generación a medida que avanza el proceso de actualización:

    • Usa la pestaña Activadores para probar la copia de la función de segunda generación después de iniciar la actualización.
    • Usa la pestaña YAML para ver los detalles de la función, incluida su URL de run.app de Cloud Run.

Antes de empezar

Antes de empezar la actualización, asegúrate de que cumples estos requisitos previos:

  • Has habilitado la API Cloud Run:

    gcloud services enable run.googleapis.com
  • Tienes una función HTTP o Pub/Sub de primera generación.

  • Tienes los roles de gestión de identidades y accesos necesarios:

    • Debes tener roles/iam.serviceAccountUser configurado en la cuenta de servicio de la función.
    • Para realizar la actualización, debes tener el rol roles/cloudfunctions.admin o un rol equivalente en el proyecto.
    • En el caso de una función de Pub/Sub con el ajuste no-retry, tienes el rol roles/serviceusage.consumer o un rol personalizado con el permiso serviceusage.services.user.
    • Para confirmar una actualización de una función de Pub/Sub, debes tener el rol roles/pubsub.admin. El rol roles/pubsub.admin es un rol a nivel de proyecto que concede acceso de administrador a todos los recursos de Pub/Sub de un proyecto.

    Para ver las políticas de gestión de identidades y accesos de tu función, sigue estos pasos:

    gcloud functions get-iam-policy FUNCTION_NAME
  • Debes tener roles/cloudfunctions.admin concedido en la cuenta de servicio de la función. Para asignar 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 al intentar ejecutar este comando, asegúrate de que tu función cumpla las políticas de tu organización. Por ejemplo, es posible que tu organización no permita funciones HTTP no autenticadas.

Para obtener más información sobre los miembros y los roles, consulta Añadir principales y conceder roles.

Actualizar funciones HTTP

En esta sección se describe cómo actualizar una función HTTP de primera generación a una función de Cloud Run. Para saber cómo actualizar una función de Pub/Sub de primera generación, consulta la sección posterior.

Una vez que hayas redirigido el tráfico y confirmado la actualización, tal como se describe en las secciones siguientes, la URL cloudfunctions.net asociada a la función HTTP de primera generación original seguirá funcionando y dirigirá el tráfico a la nueva función de Cloud Run.

Iniciar la actualización de la función HTTP

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

Consola

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

    Ir a Functions (1.ª gen.)

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

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

  4. En la página de detalles de la función, haz clic en Actualizar en Se puede actualizar.

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

Después de completar este paso, aparecerá el panel Actualización en curso, que te pedirá que hagas clic en el enlace 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

Sustituye FUNCTION_NAME por el nombre de tu función de 1.ª gen.

Después de iniciar la actualización:

  • La función de la primera generación sigue enviando 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 Funciones (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 cloudfunctions.net URL que la función de 1.ª gen., así como una nueva URL de Cloud Run run.app. Para ver ambas URLs, ve a la página de detalles de la función en la consola de Cloud Run y abre la pestaña YAML. También puedes usar este comando:

    gcloud run services describe YOUR_SERVICE_NAME \
        --region YOUR_REGION \
        --format="value(status.url)"
  • Puedes comprobar que existe la copia de 2.ª generación de tu función de 1.ª generación:

    gcloud run services describe FUNCTION_NAME --format yaml
    
  • Puedes verificar el entorno de la función de primera generación, donde el resultado debería mostrar el entorno de la función como 1st gen:

    gcloud functions describe --region REGION_NAME FUNCTION_NAME
    

Solucionar problemas en el paso de inicio de la actualización

La actualización falla en estas condiciones:

  • Ya existe una función con el mismo nombre en la misma región y proyecto.
  • La función de 1.ª gen. usa un tiempo de ejecución retirado, por lo que no se puede actualizar hasta que la vuelvas a desplegar con un tiempo de ejecución compatible.
  • El método llamador no tiene el permiso cloudfunctions.functions.generationUpgrade. Ten en cuenta que el llamante necesita el rol roles/cloudfunctions.admin o un rol equivalente en el proyecto.

Redirigir el tráfico de una función HTTP

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

En el paso de redirección, se redirige el tráfico de la URL de Cloud Functions (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 Functions, haz clic en Ir a Cloud Run.
  2. Haz clic en Probar función para probarla (opcional, pero muy recomendable).
  3. Cuando lo tengas todo 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 redirigir el tráfico, la copia de la función de segunda generación sirve tráfico tanto a la URL de la función (cloudfunctions.net) como a la URL de Cloud Run (run.app).

Probar la función HTTP después de la redirección

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

Solucionar problemas de redirección

La redirección falla en las siguientes condiciones:

  • No has completado el paso anterior (--setup-config).

Restaurar el tráfico de una función HTTP

Si no quieres confirmar la actualización, puedes volver a la función de primera generación.

Consola

En el panel Actualización en curso de la página de detalles de las funciones de Cloud Run de la consola de Cloud Run, haz clic en Restaurar 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:

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

Puedes verificar el entorno de la función de la siguiente manera. La salida 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 has redirigido el tráfico a la función de segunda generación.

Confirmar la actualización de la función HTTP

Con este paso se finaliza la actualización, por lo que ya no podrás cancelar el proceso. Antes de llevar a cabo este paso, asegúrate de haber probado a fondo tus funciones.

Consola

En el panel Actualización en curso de la página de detalles de Cloud Run Functions de 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:

  • La función de primera generación se elimina y la copia de la función de segunda generación se desvincula para convertirse en una función de Cloud Run completa.
  • La función de Cloud Run conserva la URL cloudfunctions.net junto con la nueva URL run.app.
  • Puedes comprobar que la función de la 1.ª gen. ya no existe:

    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
    

En el resultado se muestra una nueva generación creada y la etiqueta Goog-managed-by tiene un valor vacío.

La confirmación falla cuando el tráfico no se ha redirigido a la función de Cloud Run.

Actualizar funciones de Pub/Sub

En esta sección se describe cómo actualizar una función de Pub/Sub de primera generación a una función de Cloud Run.

El proceso de actualización de una función de Pub/Sub de primera generación sigue el mismo patrón básico que el de una función HTTP, pero hay algunas consideraciones adicionales:

  • Inhabilitar los reintentos en caso de fallo no es una función compatible con Cloud Run, pero es el ajuste predeterminado en la primera generación. Por lo tanto, es posible que tengas funciones de ambos tipos. Lo que hace la herramienta de actualización depende de este ajuste:

    • Si la función de 1.ª gen. tiene los reintentos inhabilitados (el ajuste predeterminado de 1.ª gen.), la herramienta de actualización crea un activador de Pub/Sub de Eventarc junto con una cola de mensajes fallidos (DLQ). La herramienta de actualización define la política de gestión de identidades y accesos (IAM) de las suscripciones y sus temas. Cuando se complete la actualización, el tema de la cola de mensajes fallidos almacenará los mensajes que no se hayan entregado, que podrás recuperar creando una nueva suscripción a la cola de mensajes fallidos.
    • Si tu función de 1.ª gen. tiene habilitada la opción de reintento, la herramienta de actualización crea un activador de Eventarc Pub/Sub con la configuración predeterminada.

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

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

Consola

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

    Ir a Functions (1.ª gen.)

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

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

  4. En la página de detalles de la función, haz clic en Actualizar en Se puede actualizar.

Cuando se complete esta fase, aparecerá el panel Actualización en curso, que te pedirá que hagas clic en el enlace 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

Sustituye FUNCTION_NAME por el nombre de tu función de 1.ª gen.

Opcionalmente, especifica una cuenta de servicio para el activador:

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

Sustituye CUSTOM_SA_EMAIL por el correo 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 pedirá que asignes el rol roles/run.invoker.

Después de iniciar la actualización:

  • La función de la primera generación sigue enviando tráfico a su URL original.
  • Se crea una copia de segunda generación de tu función de primera generación. Puedes activarlo con su URL de Cloud Run.
  • La función de primera generación sigue enviando tráfico a su URL cloudfunctions.net.

Probar la función de Pub/Sub después del paso de inicio de la actualización

  • Puedes comprobar que existe la copia de 2.ª generación de tu función de 1.ª generación:

    gcloud run services describe FUNCTION_NAME --format yaml
    
  • Puedes verificar el entorno de la función de primera generación, donde 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 primera generación.

  • Para probar la nueva función, añádele un activador de Pub/Sub y confirma que la función responde al activador como se espera:

    1. Selecciona la función en la consola de Cloud Run y abre la pestaña Triggers (Activadores).
    2. Haz clic en Añadir 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 Cloud Code para Cloud Shell que se abre, publica un mensaje en el tema que has añadido en la pestaña Activadores.
    5. En la consola de Cloud Run, ve a Observabilidad > Registros para confirmar que tu función ha publicado el mensaje. También puedes usar la línea de comandos de Cloud Code para Cloud Shell para ver el resultado del registro.

    Por ejemplo, supongamos que tienes una función básica de Hola, mundo 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
    

Solucionar problemas en el paso de inicio de la actualización de Pub/Sub

La actualización falla en estas condiciones:

  • Ya existe una función de Cloud Run con el mismo nombre en la misma región y proyecto.
  • Has intentado actualizar una función de segunda generación.
  • 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 un estado de error.
  • La función de 1.ª generación no es una función HTTP ni Pub/Sub.
  • El llamador no tiene el permiso cloudfunctions.functions.generationUpgrade. Ten en cuenta que el llamante necesita el rol roles/cloudfunctions.admin o un rol equivalente en el proyecto.

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

En este paso, se redirige el tráfico de la URL de Cloud Functions (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 Functions, haz clic en Ir a Cloud Run.
  2. Haz clic en Probar función para probarla (opcional, pero muy recomendable).
  3. Cuando lo tengas todo 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 redirigir el tráfico, la función de segunda generación sirve tráfico tanto a la URL de Cloud Functions como a la de Cloud Run.

Probar Pub/Sub después de redirigir 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 reintento especificada durante la creación de la función.
    • eventTrigger.serviceAccountEmail es la cuenta de servicio predeterminada de Compute Engine o la cuenta de servicio personalizada especificada.
    • Al publicar un mensaje en el tema de destino, se activa la copia de la función de segunda generación.

Solucionar problemas de Pub/Sub para redirecciones

La redirección falla en las siguientes condiciones:

  • No has completado el paso anterior (--setup-config).
  • La función de Cloud Run se ha eliminado manualmente.

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

De esta forma, el tráfico volverá a la función de 1.ª gen.

Consola

En el panel Actualización en curso de la página de detalles de las funciones de Cloud Run, haz clic en Restaurar 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:

  • 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. sirve tráfico a la URL cloudfunctions.net.
  • La copia de la segunda generación sigue estando disponible y puedes activarla mediante su URL de Cloud Run.

  • Puedes verificar el entorno de la función:

    gcloud functions describe --region REGION_NAME FUNCTION_NAME
    

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

  • Al publicar un mensaje en el tema de destino, se activa la función de primera generación.

La restauración falla si no has redirigido el tráfico a la función de Cloud Run.

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

Con este paso se finaliza la actualización, por lo que ya no podrás cancelar el proceso. Este paso no se puede deshacer. Antes de llevar a cabo este paso, asegúrate de que has probado a fondo tus funciones.

Consola

En el panel Actualización en curso de la página de detalles de las funciones 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:

  • Se elimina la función de 1.ª gen.
  • La función de Cloud Run conserva la URL cloudfunctions.net.
  • Para comprobar que la función ya no aparece en la lista, sigue estos pasos:
    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 ha creado una nueva generación. La etiqueta Goog-managed-by debe tener un valor vacío.
  • Si has creado la función de primera generación sin marcar la opción Reintentar si falla, la suscripción de Pub/Sub del activador tiene una cola de mensajes fallidos (DLQ).
  • Al publicar un mensaje en el tema de destino, se activará la función de Cloud Run.

El envío falla en las siguientes condiciones:

  • El tráfico no se ha redirigido a la función de Cloud Run.
  • La función de Cloud Run se ha eliminado manualmente.

Abortar la actualización

Esta acción cancela el proceso de actualización. La copia de la función de segunda generación se elimina y la función de primera generación sigue atendiendo el tráfico de la URL cloudfunctions.net original. Puedes realizar esta acción en cualquier momento durante el proceso de actualización antes de confirmar la actualización.

Si usas la consola Google Cloud para llevar a cabo la actualización, la interfaz de usuario solo te permitirá abortar el proceso inmediatamente después de la operación de actualización inicial. El botón Abort (Abortar) se encuentra en la esquina superior izquierda de la consola Functions (1.ª gen.). Si usas la CLI de Google Cloud, puedes cancelar la actualización en cualquier momento antes de confirmarla. Una vez que lo hagas, el proceso será irreversible.

Puedes usar la CLI de Google Cloud para cancelar una actualización de una función, aunque hayas usado la Google Cloud consola para llevar a cabo el proceso de actualización:

gcloud beta functions upgrade FUNCTION_NAME --abort

Después de cancelar la actualización:

  • Se elimina la copia de la función de 2.ª gen.
  • La función de 1.ª gen. sirve tráfico a la URL cloudfunctions.net.
  • En la Google Cloud consola, el estado de actualización de la función cambia de Configuración copiada a Lista para actualizar.
  • Puedes comprobar 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 cancelación falla si ya has confirmado la actualización.

Consultar las políticas de gestión de identidades y accesos convertidas

Durante el proceso de actualización, la herramienta hace todo lo posible para convertir los roles y los permisos de Cloud Functions (1.ª gen.) a las nuevas funciones de Cloud Run.

El proceso de actualización convierte los roles de gestión de identidades y accesos de Cloud Functions (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 gestión de identidades y accesos falla si el llamante no tiene los permisos projects.getIamPolicy o run.setIamPolicy. El llamante necesita el rol roles/cloudfunctions.admin o un rol equivalente en el proyecto.

Verificar la actualización de la política de gestión de identidades y accesos

Para verificar que tus políticas de IAM se actualizan correctamente, comprueba en cada fase del proceso de actualización que tienen 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 enlaces de roles personalizados.

  2. Valida que las políticas de gestión de identidades y accesos definidas 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 el enlace de rol de invocador de Cloud Run Functions a nivel de proyecto se ha 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
    

Siguientes pasos