Soluciona problemas de Cloud Run Functions
En este documento, se muestra cómo solucionar problemas de mensajes de error y resolver los inconvenientes que surgen cuando usas Cloud Run Functions. Si creaste o implementaste una función con Cloud Run, consulta Soluciona problemas de Cloud Run.
Implementación
En esta sección, se enumeran los errores que pueden ocurrir durante la implementación y se proporcionan sugerencias para solucionarlos. La mayoría de los problemas que pueden ocurrir durante la implementación están relacionados con los roles y permisos o con una configuración incorrecta.
Identity and Access Management se usa para autorizar identidades y llevar a cabo
acciones administrativas en funciones creadas con la
API de Cloud Functions v2, por ejemplo, con
gcloud functions, la API de REST o Terraform. Las acciones de administración incluyen
la creación, actualización y eliminación de funciones. Para obtener más información, consulta
Autoriza el acceso con la IAM.
El usuario no tiene permisos en la cuenta de servicio del entorno de ejecución mientras se implementa una función
Cada función está asociada a una cuenta de servicio que hace las veces de su identidad
cuando la función accede a otros recursos. Esta cuenta de
servicio de entorno de ejecución puede
ser la cuenta de servicio predeterminada o una cuenta de servicio administrada por el usuario. En entornos
en los que varias funciones acceden a diferentes recursos, una práctica común
consiste en usar identidades
por función
con cuentas de servicio del entorno de ejecución con nombre, en lugar de la cuenta de servicio predeterminada del entorno de ejecución (PROJECT_NUMBER-compute@developer.gserviceaccount.com).
Para usar una cuenta de servicio del entorno de ejecución, el implementador
debe tener el permiso iam.serviceAccounts.actAs en esa cuenta de servicio. Un usuario que
crea una cuenta de servicio no predeterminada del entorno de ejecución recibe automáticamente este
permiso, pero un usuario deberá otorgar este permiso a otros implementadores.
Asigna el permiso iam.serviceAccounts.actAs en la cuenta de servicio del entorno de ejecución
al usuario que tiene el rol de visualizador de proyectos, desarrollador de Cloud Functions o
administrador de Cloud Functions.
El mensaje de error
Consola
You must have the iam.serviceAccounts.actAs permission on the selected service account. To obtain this permission, you can grant a role that includes it like the Service Account User role, on the project.
gcloud
Cuenta de servicio predeterminada:
ERROR: (gcloud.functions.deploy) ResponseError: status=[403], code=[Ok], message=[Caller is missing permission 'iam.serviceaccounts.actAs' on service account projects/-/serviceAccounts/PROJECT_NUMBER-compute@developer.gserviceaccount.com.Grant the role 'roles/iam.serviceAccountUser' to the caller on the service account projects/-/serviceAccounts/PROJECT_NUMBER-compute@developer.gserviceaccount.com.You can do that by running 'gcloud iam service-accounts add-iam-policy-binding projects/-/serviceAccounts/PROJECT_NUMBER-compute@developer.gserviceaccount.com --member MEMBER --role roles/iam.serviceAccountUser'where MEMBER has a prefix like 'user:' or 'serviceAccount:'
Cuenta de servicio no predeterminada:
ERROR: (gcloud.functions.deploy) ResponseError: status=[403], code=[Ok], message=[Caller is missing permission 'iam.serviceaccounts.actAs' on service account projects/-/serviceAccounts/
SERVICE_ACCOUNT_NAME@PROJECT_ID
.iam.gserviceaccount.com.Grant the role 'roles/iam.serviceAccountUser' to the caller on the service account projects/-/serviceAccounts/
SERVICE_ACCOUNT_NAME@PROJECT_ID
.iam.gserviceaccount.com.You can do that by running 'gcloud iam service-accounts add-iam-policy-binding projects/-/serviceAccounts/
SERVICE_ACCOUNT_NAME@PROJECT_ID
.iam.gserviceaccount.com --member MEMBER --role roles/iam.serviceAccountUser'where MEMBER has a prefix like 'user:' or 'serviceAccount:'
La solución
Asigna al usuario
el rol de usuario de la cuenta de servicio (roles/iam.serviceAccountUser) tanto en la cuenta de servicio predeterminada como en la no predeterminada del entorno de ejecución. Este rol incluye el permiso iam.serviceAccounts.actAs.
La cuenta de servicio de implementación no tiene permisos de Pub/Sub cuando implementa una función basada en eventos
El servicio de Cloud Functions usa la cuenta
de servicio del agente de servicio de Cloud Functions (service-PROJECT_NUMBER@gcf-admin-robot.iam.gserviceaccount.com)
cuando realiza acciones administrativas. De forma predeterminada, a esta cuenta se le
asigna el rol de cloudfunctions.serviceAgent de Cloud Functions. Con el objetivo de implementar
funciones basadas en eventos,
el servicio de Cloud Functions debe acceder a Pub/Sub
para configurar temas y suscripciones. Si cambias el rol asignado a la cuenta
de servicio sin otorgar los permisos adecuados,
el servicio de Cloud Functions no podrá acceder a Pub/Sub y la implementación
fallará.
El mensaje de error
Consola
Validation failed for trigger projects/PROJECT_ID/locations/LOCATION/triggers/FUNCTION_NAME-EVENTARC_ID: Permission "iam.serviceAccounts.ActAs" denied on "EndUserCredentials to PROJECT_NUMBER-compute@developer.gserviceaccount.com"
gcloud
ERROR: (gcloud.functions.deploy) ResponseError: status=[403], code=[Ok], message=[Validation failed for trigger projects/test-project-356312/locations/LOCATION/triggers/FUNCTION_NAME-EVENTARC_ID: Permission "iam.serviceAccounts.ActAs" denied on "EndUserCredentials to PROJECT_NUMBER-compute@developer.gserviceaccount.com"]
La solución
Puedes restablecer tu cuenta de servicio al rol predeterminado cloudfunctions.serviceAgent.
La cuenta de servicio predeterminada del entorno de ejecución no existe
Cuando no especificas una cuenta de servicio del entorno de ejecución administrada por el usuario, Cloud Functions usa la cuenta de servicio de procesamiento predeterminada. Las implementaciones fallan si borras la cuenta predeterminada sin especificar una cuenta administrada por el usuario.
El mensaje de error
gcloud
ERROR: (gcloud.functions.deploy) ResponseError: status=[404], code=[Ok], message=[Service account projects/-/serviceAccounts/PROJECT_NUMBER-compute@developer.gserviceaccount.com was not found.]
La solución
Para resolver este problema, aplica cualquiera de las soluciones que se indican a continuación:
Especifica una cuenta de servicio del entorno de ejecución administrada por el usuario antes de implementar la función.
Recupera la cuenta de servicio por ID numérico de la cuenta de servicio predeterminada.
La cuenta de servicio del agente de servicio de Cloud Functions no tiene permisos para el bucket del proyecto mientras se implementa una función
Cloud Run Functions solo se puede activar por
eventos desde los buckets de Cloud Storage en el
mismo proyecto Google Cloud de Platform. Además, la cuenta de servicio del agente
de servicio de Cloud Functions (service-PROJECT_NUMBER@gcf-admin-robot.iam.gserviceaccount.com)
requiere
un rol de cloudfunctions.serviceAgent en el proyecto.
El mensaje de error
Consola
ERROR: (gcloud.functions.deploy) ResponseError: status=[403], code=[Ok], message=[Validation failed for trigger projects/PROJECT_ID/locations/LOCATION/triggers/FUNCTION_NAME-EVENTARC_ID: Permission "iam.serviceAccounts.ActAs" denied on "EndUserCredentials to PROJECT_NUMBER-compute@developer.gserviceaccount.com"]
gcloud
ERROR: (gcloud.functions.deploy) ResponseError: status=[403], code=[Ok], message=[Validation failed for trigger projects/<project-id>/locations/LOCATION/triggers/FUNCTION_NAME-EVENTARC_ID: Permission "iam.serviceAccounts.ActAs" denied on "EndUserCredentials to PROJECT_NUMBER-compute@developer.gserviceaccount.com"]
La solución
Para resolver este problema, restablece esta cuenta de servicio al rol predeterminado.
El usuario con el rol de editor de proyectos no puede hacer pública una función
El rol de editor de proyectos tiene permisos amplios para administrar recursos en un proyecto, pero no otorga de forma inherente la capacidad de hacer públicas las funciones de Cloud Functions. El usuario o el servicio que implementa la función necesitaría
el permiso run.services.setIamPolicy.
El mensaje de error
gcloud
ERROR: (gcloud.run.services.add-iam-policy-binding) PERMISSION_DENIED: Permission 'run.services.setIamPolicy' denied on resource 'projects/PROJECT_ID/locations/LOCATION/functions/FUNCTION_NAME' (or resource may not exist).
La solución
Puedes hacer lo siguiente:
Asignar al implementador el rol de Propietario del proyecto o administrador de Cloud Functions
Crear un rol personalizado para otorgar el permiso de forma manual
Verificar si el uso compartido restringido del dominio se aplica en el proyecto
La implementación de la función falla cuando se usa la política de la organización de restricción de ubicación de recursos
Si tu organización usa una política de restricción de ubicación de recursos, se restringe la implementación de funciones en las regiones que la política restringe. En la consola de Google Cloud , la región restringida no estará disponible en el menú desplegable de regiones mientras se implemente una función.
El mensaje de error
gcloud
ResponseError: status=[400], code=[Ok], message=["LOCATION" violates constraint "constraints/gcp.resourceLocations" on the resource "projects/PROJECT_ID/locations/LOCATION/functions/FUNCTION_NAME".]
La solución
Puedes agregar o quitar ubicaciones de las listas de allowed_values o denied_values
de una restricción de ubicaciones de recursos para que la implementación tenga éxito.
La implementación de la función falla mientras se ejecuta el alcance global de la función
Este error indica que hubo un problema con el código. La canalización de la implementación terminó de implementar la función, pero presentó una falla en el último paso: enviar una verificación de estado a la función. Esta verificación de estado tiene como objetivo ejecutar un alcance global para la función, lo que podría generar una excepción, fallar o agotar el tiempo de espera. El alcance global es donde se suelen cargar las bibliotecas y se inicializan los clientes.
El mensaje de error
En los registros de Cloud Logging, haz lo siguiente:
Could not create or update Cloud Run service FUNCTION_NAME, Container Healthcheck failed. Revision REVISION_NAMEE is not ready and cannot serve traffic. The user-provided container failed to start and listen on the port defined provided by the PORT=8080 environment variable. Logs for this revision might contain more information.
La solución
Para resolver este problema, aplica cualquiera de las soluciones que se indican a continuación:
Para obtener un mensaje de error más detallado, revisa los registros de compilación de la función.
Si no está claro por qué la función no pudo ejecutar su alcance global, considera trasladar el código temporalmente a la invocación de la solicitud con la inicialización diferida de las variables globales. Esto permite agregar instrucciones de registro adicionales a las bibliotecas cliente, las cuales podrían estar agotando el tiempo de espera de creación de la instancia (en especial si llaman a otros servicios) o si fallan o arrojan excepciones.
Además, intenta aumentar el tiempo de espera de la función. Los límites de tiempo de espera más largos en Cloud Run Functions proporcionan un margen mayor para la inicialización y ofrecen una asignación de recursos más escalable en un entorno de Cloud Run, lo que podría mitigar este problema si se debe al agotamiento de recursos.
El código fuente debe incluir una función de punto de entrada que se haya especificado de forma correcta en la implementación a través de la consola o gcloud.
El usuario con el rol de visualizador no puede implementar una función
Los usuarios con el rol de visualizador de proyectos o de visualizador de Cloud Functions tienen acceso solo de lectura a las funciones y sus detalles y no pueden implementar funciones nuevas. La opción Crear función está inhabilitada en la consola de Google Cloud con el error siguiente:
El mensaje de error
gcloud
ERROR: (gcloud.functions.deploy) ResponseError: status=[403], code=[Ok], message=[Permission 'cloudfunctions.functions.generateUploadUrl' denied on 'projects/PROJECT_ID/locations/LOCATION/functions']
La solución
Asigna al usuario el rol de desarrollador de Cloud Functions.
La cuenta de servicio de compilación no tiene permisos
El mensaje de error
En el error de implementación de la función o en los registros de compilación, es posible que veas uno de los errores siguientes:
The service account running this build does not have permission to write logs. To fix this, grant the Logs Writer (roles/logging.logWriter) role to the service account.
Step #0 - "fetch": failed to Fetch: failed to download archive gs://gcf-v2-sources-PROJECT_NUMBER-LOCATION/FUNCTION_NAME/version-VERSION_NUMBER/function-source.zip: Access to bucket gcf-v2-sources-PROJECT_NUMBER-LOCATION denied. You must grant Storage Object Viewer permission to PROJECT_NUMBER-compute@developer.gserviceaccount.com.
Step #2 - "build": ERROR: failed to create image cache: accessing cache image "LOCATION-docker.pkg.dev/PROJECT/gcf-artifacts/FUNCTION_NAME/cache:latest": connect to repo store "LOCATION-docker.pkg.dev/PROJECT/gcf-artifacts/FUNCTION_NAME/cache:latest": GET https://LOCATION-docker.pkg.dev/v2/token?scope=repository%3APROJECT%2Fgcf-artifacts%2FFUNCTION_NAME%2Fcache%3Apull&service=: DENIED: Permission "artifactregistry.repositories.downloadArtifacts" denied on resource "projects/PROJECT/locations/LOCATION/repositories/gcf-artifacts" (or it may not exist)
Could not build the function due to a missing permission on the build service account. If you didn't revoke that permission explicitly, this could be caused by a change in the organization policies.
La solución
La cuenta de servicio de compilación necesita permiso para leer desde el bucket de origen y permisos de lectura y escritura para el repositorio de Artifact Deployment. Es posible que aparezca este error debido a un cambio en el comportamiento predeterminado de la forma en que Cloud Build usa las cuentas de servicio, que se detalla en Cambio de cuenta de servicio de Cloud Build.
Para resolver este problema, implementa cualquiera de las soluciones que se indican a continuación:
- Crea una cuenta de servicio de compilación personalizada para las implementaciones de funciones.
- Agrega el
rol de cuenta de servicio de Cloud Build
(
roles/cloudbuild.builds.builder) a la cuenta de servicio predeterminada de Compute. - Revisa la guía de Cloud Build sobre los cambios en la cuenta de servicio predeterminada y, también, inhabilita estos cambios.
Cuenta de servicio de compilación inhabilitada
El mensaje de error
Could not build the function due to disabled service account used by Cloud Build. Please make sure that the service account is active.
La solución
La cuenta de servicio de compilación debe estar habilitada para implementar una función. Es posible que aparezca este error debido a un cambio en el comportamiento predeterminado de la forma en que Cloud Build usa las cuentas de servicio, que se detalla en Cambio de cuenta de servicio de Cloud Build.
Para resolver este problema, implementa cualquiera de las soluciones que se indican a continuación:
- Crea una cuenta de servicio de compilación personalizada para las implementaciones de funciones.
- Habilita la cuenta de servicio predeterminada de Compute.
- Revisa la guía de Cloud Build sobre los cambios en la cuenta de servicio predeterminada y, también, inhabilita estos cambios.
Entrega
En esta sección, se enumeran los errores que puedes encontrar relacionados con la entrega y se proporcionan sugerencias para solucionarlos.
Error de permiso de entrega debido a que la función requiere autenticación
Las funciones de HTTP que no tienen habilitada la opción Permitir invocaciones no autenticadas restringen el acceso a los usuarios finales y las cuentas de servicio que no tienen los permisos adecuados. Este mensaje de error indica que el emisor no tiene permiso para invocar la función.
El mensaje de error
Código de respuesta del error de HTTP: 403 Prohibido
Cuerpo de la respuesta del error de HTTP:
Error: Forbidden Your client does not have permission
to get URL /FUNCTION_NAME from this server.
La solución
Para resolver este problema, aplica cualquiera de las soluciones que se indican a continuación:
Asigna al usuario el rol de Cloud IAM de invocador de Cloud Run para la función específica.
Vuelve a implementar la función para permitir el acceso público si esto es compatible con tu organización. Esto es útil para las pruebas.
Error de entrega debido a la configuración del parámetro allow internal traffic only
La configuración de entrada
restringe si se puede invocar una función de HTTP con recursos
fuera de tu proyecto de Google Cloud o del perímetro de servicio de los Controles del servicio de VPC.
Cuando configuras el parámetro Permitir solo el tráfico interno para las redes de entrada,
este mensaje de error indica que solo se permiten las solicitudes
provenientes de redes de VPC del mismo proyecto o del perímetro de Controles del servicio de VPC. También puede ser un
error 404 para la URL predeterminada de functions.net.
El mensaje de error
Código de respuesta del error de HTTP: 404 NO ENCONTRADO
La solución
Para resolver este error, aplica cualquiera de las soluciones que se indican a continuación:
Asegúrate de que la solicitud provenga de tu proyecto de Google Cloud o del perímetro de servicio de Controles del servicio de VPC.
Cambia la configuración de entrada a Permitir todo el tráfico para la función.
El código fuente de Cloud Run Functions también puede generar un error 404 debido a una URL de función incorrecta y métodos HTTP incorrectos y errores lógicos, entre otros.
La invocación de la función no tiene credenciales de autenticación válidas
Para invocar una función de Cloud Run Functions que se configuró con acceso restringido, se requiere un token de ID. Los tokens de acceso o los tokens de actualización no funcionan.
El mensaje de error
Código de respuesta del error de HTTP: 401 No autorizado
Cuerpo de la respuesta del error de HTTP:
Your client does not have permission to the requested URL 'FUNCTION_NAME'
La solución
Para resolver este error, aplica cualquiera de las soluciones que se indican a continuación:
Asegúrate de que las solicitudes incluyan un encabezado
Authorization: Bearer ID_TOKENy de que el token sea de ID, no de acceso ni de actualización. Si generas este token de forma manual con la clave privada de una cuenta de servicio, debes intercambiar el token JWT autofirmado por un token de identidad firmado por Google.Invoca la función de HTTP con credenciales de autenticación en el encabezado de la solicitud. Por ejemplo, puedes obtener un token de identidad con
gcloudde la manera siguiente:curl -H "Authorization: Bearer $(gcloud auth print-identity-token)"
https://REGION-PROJECT_ID.cloudfunctions.net/FUNCTION_NAMEVuelve a implementar la función para permitir las invocaciones no autenticadas si esto es compatible con tu organización. Esto es útil para las pruebas.
Asegúrate de que el campo
audience (aud)del token web JSON (JWT) coincida exactamente con la URL de la función que se muestra en la consola de Google Cloud . Cualquier discrepancia, incluida una ruta de acceso relativa adicional, provoca una falla en la autenticación y una respuesta 401.
La función se detiene durante la ejecución o sigue ejecutándose después de que el código finalice
Algunos entornos de ejecución de Cloud Run Functions permiten que los usuarios ejecuten tareas asíncronas. Si tu función crea este tipo de tareas, también debe esperar de manera explícita a que se completen. De lo contrario, podría dejar de ejecutarse en el momento incorrecto.
El comportamiento del error
La función muestra uno de los comportamientos siguientes:
- La función finaliza mientras las tareas asíncronas aún se están ejecutando, pero antes de que haya transcurrido el tiempo de espera especificado.
- La función no deja de ejecutarse cuando finalizan estas tareas y continúa ejecutándose hasta que haya transcurrido el tiempo de espera.
La solución
Si la función finaliza antes, debes asegurarte de que todas sus tareas asíncronas se hayan completado antes de que realice alguna de las acciones siguientes:
- Devolver un valor
- Resolver o rechazar un objeto
Promiseque se devuelve (solo en funciones de Node.js) - Generar excepciones o errores no detectados
- Enviar una respuesta HTTP
- Llamar a una función de devolución de llamada
Si la función no finaliza después de completar tareas asíncronas, debes verificar que le indique correctamente a Cloud Run Functions que se completó. En especial, asegúrate de realizar una de las operaciones mencionadas más arriba ni bien la función finalice sus tareas asíncronas.
Error del entorno de ejecución cuando se accede a recursos protegidos por los Controles del servicio de VPC
De forma predeterminada, Cloud Run Functions usa direcciones IP públicas para realizar solicitudes salientes a otros servicios. Si las funciones no se encuentran en un perímetro de Controles del servicio de VPC, es posible que reciban respuestas HTTP 403 cuando intenten acceder a los servicios de Google Cloud protegidos por estos controles debido a las denegaciones del perímetro de servicio.
El mensaje de error
En los registros de recursos auditados, hay una entrada como la siguiente:
"protoPayload": {
"@type": "type.googleapis.com/google.cloud.audit.AuditLog",
"status": {
"code": 7,
"details": [
{
"@type": "type.googleapis.com/google.rpc.PreconditionFailure",
"violations": [
{
"type": "VPC_SERVICE_CONTROLS",
...
"authenticationInfo": {
"principalEmail": "CLOUD_FUNCTION_RUNTIME_SERVICE_ACCOUNT",
...
"metadata": {
"violationReason": "NO_MATCHING_ACCESS_LEVEL",
"securityPolicyInfo": {
"organizationId": "ORGANIZATION_ID",
"servicePerimeterName": "accessPolicies/NUMBER/servicePerimeters/SERVICE_PERIMETER_NAME"
...
La solución
Para resolver este error, aplica cualquiera de las soluciones que se indican a continuación:
La función debe enrutar todo el tráfico saliente a través de la red de VPC. Consulta la sección Implementa funciones que cumplan con los Controles del servicio de VPC para obtener más información.
Como alternativa, otorga acceso al perímetro a la cuenta de servicio del entorno de ejecución de la función. Para esto, puedes crear un nivel de acceso y agregarlo al perímetro de servicio o crear una política de entrada en el perímetro. Consulta Usa los Controles del servicio de VPC para obtener más información.
Escalabilidad
En esta sección, se enumeran los problemas de escalabilidad y se proporcionan sugerencias para solucionarlos.
Errores de Cloud Logging relacionados con la anulación de solicitudes pendientes en cola
Los errores de escalamiento pueden ocurrir en las situaciones siguientes:
- Cuando hay un gran incremento repentino del tráfico.
- Cuando se produce un tiempo de inicio en frío prolongado.
- Cuando se produce un tiempo de procesamiento de solicitudes prolongado.
- Cuando la tasa de errores de las funciones es alta.
- Cuando se alcanza el límite máximo de instancias y se previene el escalamiento del sistema.
- Cuando se dan factores transitorios que se atribuyen al servicio de Cloud Run Functions.
En cada caso, es posible que Cloud Run Functions no se escale verticalmente con suficiente rapidez como para administrar el tráfico.
El mensaje de error
The request was aborted because there was no available instanceseverity=WARNING(Código de respuesta: 429) Cloud Run Functions no se puede escalar debido al límitemax-instancesque estableciste durante la configuración.severity=ERROR(Código de respuesta: 500) Cloud Run Functions no puede administrar la tasa de tráfico de forma intrínseca.
La solución
Para resolver este problema, resuelve las causas mencionadas más arriba.
Para las funciones basadas en activadores HTTP, haz que el cliente implemente una retirada exponencial y reintente ejecutar las solicitudes que no se deben descartar. Si activas funciones de Cloud Run desde flujos de trabajo, puedes usar la sintaxis
try/retrypara lograrlo.Para las funciones en segundo plano o las basadas en eventos, Cloud Run Functions admite la entrega al menos una vez. Incluso sin habilitar explícitamente el reintento, el evento se vuelve a entregar automáticamente y se reintenta la ejecución de la función. Consulta Reintenta las funciones basadas en eventos para obtener más información.
Si la causa raíz del problema es un período de errores transitorios prolongados atribuidos solo a Cloud Run Functions o si necesitas ayuda con tu problema, comunícate con el equipo de asistencia.
Para los problemas relacionados con los inicios en frío, configura una cantidad mínima de instancias con el objetivo de reducir la cantidad de inicios en frío con una implicación de facturación más alta.
Registro
En la sección siguiente, se abordan los problemas relacionados con el registro y se explica cómo solucionarlos.
Las entradas de registros no tienen niveles de gravedad de registro o son incorrectos
De forma predeterminada, Cloud Run Functions incluye registros del entorno de ejecución. Los registros escritos en
stdout o stderr aparecen automáticamente en Cloud Logging.
Sin embargo, según la configuración predeterminada, estas entradas solo contienen mensajes de cadena.
El mensaje de error
No hay niveles de gravedad de registro o son incorrectos.
La solución
Para incluir la gravedad de los registros, debes enviar una entrada de registro estructurada.
Controla o registra excepciones de manera diferente en caso de falla
Te recomendamos que personalices la manera en que administras y registras la información de las fallas.
La solución
Envuelve la función en un bloque try para personalizar la administración de excepciones y
registrar seguimientos de pila.
Ejemplo
import logging
import traceback
def try_catch_log(wrapped_func):
def wrapper(*args, **kwargs):
try:
response = wrapped_func(*args, **kwargs)
except Exception:
# Replace new lines with spaces so as to prevent several entries which
# would trigger several errors.
error_message = traceback.format_exc().replace('\n', ' ')
logging.error(error_message)
return 'Error';
return response;
return wrapper;
#Example hello world function
@try_catch_log
def python_hello_world(request):
request_args = request.args
if request_args and 'name' in request_args:
1 + 's'
return 'Hello World!'
Registros demasiado grandes en Node.js 10+, Python 3.8, Go 1.13 y Java 11
El tamaño máximo de una entrada de registro normal en estos entornos de ejecución es de 105 KiB.
La solución
Envía entradas de registro que no superen este límite.
Faltan registros a pesar de que Cloud Run Functions devuelve errores
Cloud Run Functions transmite sus registros a un bucket predeterminado. Cuando creas un proyecto, Cloud Run Functions crea y habilita el bucket predeterminado. Si este bucket está inhabilitado o si los registros de Cloud Run Functions están en el filtro de exclusión, los registros no aparecerán en el Explorador de registros.
La solución
Habilita los registros predeterminados.
Los registros de Cloud Run Functions no aparecen en el Explorador de registros
Algunas bibliotecas cliente de Cloud Logging usan un proceso asíncrono para escribir entradas de registro. Si una función falla o finaliza de alguna otra manera, es posible que algunas entradas de registro aún no se hayan escrito y puedan aparecer más adelante. Es posible que algunos registros se pierdan y no se puedan ver en el Explorador de registros.
La solución
Usa la interfaz de la biblioteca cliente y limpia las entradas de registro almacenadas en búfer
antes de salir de la función o usa la biblioteca para escribir entradas de registro de forma síncrona. También puedes
escribir registros de forma síncrona directamente en stdout o stderr.
Faltan registros de Cloud Run Functions a la hora de usar el receptor del enrutador de registros
Los receptores del enrutador de registros enrutan las entradas de registro a varios destinos.

Los filtros de exclusión definen las entradas que puedes descartar.
La solución
Quita el filtro de exclusión establecido para resource.type = "cloud_run_revision".
Conexiones de base de datos
Existen varios problemas que pueden surgir cuando te conectas a una base de datos, y muchos
de ellos se deben a que se exceden los límites de conexión o se agota el tiempo de espera. Si ves una advertencia de Cloud SQL en los registros, por ejemplo, Context deadline exceeded, es posible que debas ajustar
la configuración de la conexión. Para obtener más información, consulta las
prácticas recomendadas de Cloud SQL.
Redes
En esta sección, se enumeran los problemas relacionados con las redes y se proporcionan sugerencias para solucionarlos.
Conectividad de red
Si todas las solicitudes salientes de una función de Cloud Run fallan incluso después de establecer la configuración de salida, puedes ejecutar pruebas de conectividad para identificar cualquier problema de conectividad de red subyacente. Para obtener más información, consulta Crea y ejecuta pruebas de conectividad.
El conector de Acceso a VPC sin servidores no está listo o no existe
Si un conector de Acceso a VPC sin servidores falla, es posible que no use
una máscara de subred /28 exclusiva para el conector, lo que es obligatorio.
El mensaje de error
Problem connecting to VPC Connector projects/xxxxx/locations/REGION/connectors/xxxx: Serverless VPC Access is not found.
Cuando Cloud Run Functions se implementa con un conector en mal estado debido a que falta el permiso en la cuenta de servicio del Agente de servicio de las APIs de Google PROJECT_NUMBER@cloudservices.gserviceaccount.com, se produce el error siguiente:
El mensaje de error
Failed to prepare VPC connector. Please try again later.
La solución
Enumera tus subredes
para verificar si el conector usa una máscara de subred /28. Si el conector
no usa la máscara de subred /28, vuelve a crearlo o crea uno nuevo.
Para resolver este problema, aplica cualquiera de las soluciones que se indican a continuación:
Si vuelves a crear el conector, no necesitas volver a implementar otras funciones. Es posible que experimentes una interrupción de la red mientras se vuelve a crear el conector.
Si creas un conector alternativo nuevo, vuelve a implementar las funciones para usar el conector nuevo y, luego, borra el original. Este método evita la interrupción de la red.
Asegúrate de que Cloud Run Functions y su conector asociado se implementen en la misma región.
Para la configuración de la VPC compartida, haz lo siguiente:
Asegúrate de que las cuentas de servicio
SERVICE_PROJECT_NUMBER@cloudservices.gserviceaccount.comyservice-SERVICE_PROJECT_NUMBER@gcp-sa-vpcaccess.iam.gserviceaccount.comque usa el conector de VPC para aprovisionar recursos en el proyecto no tengan permisos faltantes. Estas cuentas de servicio deben tener el rol deroles/compute.networkUseren el proyecto host de la configuración de la VPC compartida cuando el conector está en el proyecto de servicio.Si el conector se crea en el proyecto host, asegúrate de que se otorgue el rol de
Serverless VPC Access Useren el agente de servicio de Cloud Run en tu proyecto host.
Si el estado del conector muestra un error
Connector is in a bad state, manual deletion recommendedy al Agente de servicio de las APIs de Google le faltan los permisos necesarios para aprovisionar recursos de procesamiento en el proyecto del conector, otorgaroles/compute.admina la cuenta de servicioPROJECT_NUMBER@cloudservices.gserviceaccount.com. En algunos casos, es posible que debas volver a crear el conector después de agregar estos permisos.
El tráfico SMTP que se dirige a direcciones IP de destino externas que usan el puerto TCP 25 está bloqueado
Para una mayor seguridad, Google Cloud bloquea las conexiones al puerto de destino TCP 25
cuando envía correos electrónicos desde las funciones.
La solución
Para desbloquear estas conexiones, sigue cualquiera de las soluciones que se indican a continuación:
Conéctate a tu servidor SMTP en un puerto diferente, como el puerto TCP
587o465.
Error 404 para la URL predeterminada de functions.net
Inhabilitar la URL de run.app en Cloud Run también impide el acceso a
la URL predeterminada de cloudfunctions.net para Cloud Run Functions (2ª gen.). Este error
también puede deberse a un error de entrega debido a la configuración del parámetro Permitir solo el tráfico interno.
El mensaje de error
Código de respuesta del error de HTTP: 404 NO ENCONTRADO
La solución
Para volver a habilitar la URL predeterminada cloudfunctions.net de Cloud Run Functions (2ª gen.),
debes volver a habilitar la URL run.app en Cloud Run
reemplazando el archivo service.yaml por una configuración nueva con estos ajustes:
annotations:run.googleapis.com/default-url-disabled: false