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:
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.netque la función original de 1ª gen. y, también, una URL derun.appde 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 decloudfunctions.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 derun.appde Cloud Run. Las URLs de funciones de 2ª gen. no recibirán tráfico hasta que lo redirecciones en el paso siguiente.
- 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
- 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.
- Si se actualiza una función de HTTP, tiene la misma URL
de
- 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.netse 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.
- Si actualizas una función de HTTP, el tráfico que se dirige a la URL
de
- 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
detachen una función de 2ª gen. El comandodetachdesvincula 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.
- Esto equivale a ejecutar el comando
- 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
describede 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.appde 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.serviceAccountUserconfigurado en la cuenta de servicio de la función. - Tienes el rol de
roles/cloudfunctions.admino 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 deroles/serviceusage.consumero uno personalizado con el permiso deserviceusage.services.user. También necesitarás los roles depubub.topic.getIAMPermissionsypubsub.topic.setIAMPermissions. - Para confirmar la actualización de una función de Pub/Sub, debes tener el rol
roles/pubsub.admin. El rol deroles/pubsub.adminse 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
- Tienes
Debes tener el rol de
roles/cloudfunctions.adminasignado en la cuenta de servicio de la función. Para otorgar el rol deroles/cloudfunctions.admin, usa el comandogcloud 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
En la consola de Google Cloud , accede a la página Functions (1st gen):
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.
Haz clic en el nombre de la función para abrir su página de detalles.
En la página de detalles de la función, haz clic en Actualizar, en Actualización apta.
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.netque la función de 1ª gen., así como una nueva URL derun.appde 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 deroles/cloudfunctions.admino 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
- En el panel Actualización en curso de la página de detalles de Cloud Run Functions, haz clic en Ir a Cloud Run.
- Haz clic en Probar función para probarla (es un paso opcional, pero muy recomendable).
- 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.netjunto con la nueva URL derun.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
En la consola de Google Cloud , accede a la página Cloud Functions (1ª gen.):
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.
Haz clic en el nombre de la función para abrir su página de detalles.
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:
- Elige la función en la consola de Cloud Run y abre la pestaña Activadores.
- 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.
- En el panel Actualización en curso, haz clic en Probar función.
- 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.
- 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 deroles/cloudfunctions.admino 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
- En el panel Actualización en curso de la página de detalles de Cloud Run Functions, haz clic en Ir a Cloud Run.
- Haz clic en Probar función para probarla (es un paso opcional, pero muy recomendable).
- 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.retryPolicycoincide con la política de reintentos que se especificó mientras se creaba la función. - La dirección de correo electrónico
eventTrigger.serviceAccountEmailes 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.
- La
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-bydebe tener un valor vacío.
- El resultado indica que se creó una generación nueva. La
etiqueta
- 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.invokerse convierte enroles/run.invoker.roles/cloudfunctions.developerse convierte enroles/run.sourceDeveloper.roles/cloudfunctions.viewerse convierte enroles/run.sourceViewer.roles/cloudfunctions.adminse convierte enroles/run.adminyroles/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:
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.
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
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?
- Obtén más información sobre Cloud Run Functions.