Solucionar problemas de Cloud Run Functions
En este documento se explica cómo solucionar mensajes de error y problemas al usar Cloud Run Functions. Si has creado o desplegado una función con Cloud Run, consulta Solucionar problemas de Cloud Run.
Implementación
En esta sección se enumeran los problemas que puede encontrar al implementar la aplicación y se ofrecen sugerencias para solucionarlos. Muchos de los problemas que puedes encontrar durante la implementación están relacionados con los roles y los permisos o con una configuración incorrecta.
Puedes usar Gestión de Identidades y Accesos para autorizar identidades a realizar acciones administrativas en funciones creadas con la API Cloud Functions v2. Por ejemplo, puedes usar gcloud functions
, la API REST o Terraform. Entre las acciones de administración se incluyen la creación, la actualización y la eliminación de funciones. Para obtener más información, consulta Autorizar el acceso con IAM.
Faltan permisos de usuario en la cuenta de servicio de tiempo de ejecución al desplegar una función
Cada función está asociada a una cuenta de servicio que actúa como su identidad cuando la función accede a otros recursos. Esta cuenta de servicio de tiempo de ejecución puede ser la cuenta de servicio predeterminada o una cuenta de servicio gestionada por el usuario. En entornos en los que varias funciones acceden a diferentes recursos, es habitual usar identidades por función con cuentas de servicio de entorno de ejecución con nombre en lugar de la cuenta de servicio de entorno de ejecución predeterminada (PROJECT_NUMBER-compute@developer.gserviceaccount.com
).
Para usar una cuenta de servicio de tiempo de ejecución, el implementador debe tener el permiso iam.serviceAccounts.actAs
en esa cuenta de servicio. A los usuarios que crean una cuenta de servicio de tiempo de ejecución no predeterminada se les concede automáticamente este permiso, pero otros implementadores deben obtenerlo de un usuario.
Asigna el permiso iam.serviceAccounts.actAs
a la cuenta de servicio del tiempo de ejecución del usuario que tenga el rol Lector de proyectos, Desarrollador de Cloud Functions o Administrador de Cloud Functions.
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:'
Solución
Asigna al usuario el rol Usuario de cuenta de servicio (roles/iam.serviceAccountUser
) en la cuenta de servicio de tiempo de ejecución predeterminada o no predeterminada. Este rol incluye el permiso iam.serviceAccounts.actAs
.
Faltan permisos de Pub/Sub en la cuenta de servicio de implementación al implementar una función basada en eventos
El servicio Cloud Functions usa la cuenta de servicio del agente de servicio de Cloud Functions (service-PROJECT_NUMBER@gcf-admin-robot.iam.gserviceaccount.com
) para realizar acciones administrativas. De forma predeterminada, a esta cuenta se le asigna el rol cloudfunctions.serviceAgent
de Cloud Functions. Para desplegar funciones basadas en eventos, el servicio Cloud Functions debe acceder a Pub/Sub para configurar temas y suscripciones. Si cambias el rol asignado a la cuenta de servicio sin conceder los permisos adecuados, el servicio Cloud Functions no podrá acceder a Pub/Sub y la implementación fallará.
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"]
Solución
Puedes restablecer tu cuenta de servicio al rol predeterminado cloudfunctions.serviceAgent.
No existe la cuenta de servicio de tiempo de ejecución predeterminada
Si no especificas una cuenta de servicio de entorno de ejecución gestionada por el usuario, Cloud Functions usará la cuenta de servicio de computación predeterminada como cuenta de servicio de entorno de ejecución. Las implementaciones fallarán si eliminas la cuenta predeterminada sin especificar una cuenta gestionada por el usuario.
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.]
Solución
Para solucionar este problema, sigue una de estas soluciones:
Especifica una cuenta de servicio de tiempo de ejecución gestionada por el usuario antes de implementar la función.
Faltan permisos de segmento de proyecto en la cuenta de servicio del agente de servicio de Cloud Functions al implementar una función
Las funciones de Cloud Run solo se pueden activar mediante eventos de segmentos de Cloud Storage del Google Cloud mismo proyecto de plataforma. Además, la cuenta de servicio del agente de servicio de Cloud Functions (service-PROJECT_NUMBER@gcf-admin-robot.iam.gserviceaccount.com
) necesita el rol cloudfunctions.serviceAgent
en tu proyecto.
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"]
Solución
Para solucionar este problema, restablece esta cuenta de servicio al rol predeterminado.
Un usuario con el rol Editor de proyecto no puede hacer pública una función
El rol Editor de proyecto tiene permisos amplios para gestionar los recursos de un proyecto, pero no concede la capacidad de hacer públicas las funciones de Cloud. El usuario o el servicio que implemente la función necesitará el permiso run.services.setIamPolicy
.
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).
Solución
Puedes hacer lo siguiente :
Asigna al usuario que va a realizar el despliegue el rol Propietario del proyecto o el rol Administrador de Cloud Functions.
Concede el permiso manualmente creando un rol personalizado.
Comprueba si se aplica el uso compartido restringido al dominio en el proyecto.
La implementación de funciones falla al usar la política de organización de restricción de ubicaciones de recursos
Si tu organización usa una política de restricción de ubicación de recursos, se restringe el despliegue de funciones en las regiones restringidas por la política. En la Google Cloud consola, la región restringida no estará disponible en el menú desplegable de regiones al implementar una función.
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".]
Solución
Puedes añadir o quitar ubicaciones de las listas allowed_values
o denied_values
de una restricción de ubicaciones de recursos para que la implementación se realice correctamente.
Fallo al desplegar una función durante la ejecución del ámbito global de la función
Este error indica que ha habido un problema con tu código. La canalización de implementación ha terminado de implementar la función, pero ha fallado en el último paso: enviar una comprobación del estado a la función. Esta comprobación del estado está diseñada para ejecutar el ámbito global de una función, que podría generar una excepción, fallar o agotar el tiempo de espera. El ámbito global es donde se suelen cargar las bibliotecas e inicializar los clientes.
Mensaje de error
En los registros de Cloud Logging:
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.
Solución
Para solucionar este problema, sigue una de estas soluciones:
Para ver un mensaje de error más detallado, consulta los registros de compilación de tu función.
Si no sabes por qué no se ha ejecutado el ámbito global de tu función, prueba a mover el código temporalmente a la invocación de la solicitud y usa la inicialización diferida de las variables globales. De esta forma, puedes añadir instrucciones de registro adicionales en tus bibliotecas de cliente, que podrían agotar el tiempo de espera en su creación de instancias (sobre todo si llaman a otros servicios), fallar o generar excepciones.
Además, prueba a aumentar el tiempo de espera de la función. Los límites de tiempo de espera más largos en las funciones de Cloud Run proporcionan más margen 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 los recursos.
El código fuente debe contener una función de punto de entrada que se haya especificado correctamente en la implementación, ya sea a través de la consola o de gcloud.
Un usuario con el rol Lector no puede implementar una función
Los usuarios con el rol Lector de proyectos o Lector de Cloud Functions tienen acceso de solo lectura a las funciones y a sus detalles, y no pueden desplegar funciones nuevas. La función Crear función está atenuada en la consolaGoogle Cloud y aparece el siguiente error:
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']
Solución
Asigna el rol Desarrollador de Cloud Functions al usuario.
Faltan permisos de la cuenta de servicio de compilación
Mensaje de error
En el error de implementación de la función o en los registros de compilación, puede que veas uno de los siguientes errores:
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.
Solución
La cuenta de servicio de compilación necesita permiso para leer del segmento de origen y permisos de lectura y escritura para el repositorio de Artifact Deployment. Es posible que se produzca este error debido a un cambio en el comportamiento predeterminado de cómo usa Cloud Build las cuentas de servicio, que se detalla en el artículo Cambio en la cuenta de servicio de Cloud Build.
Para solucionar este problema, utiliza cualquiera de estas soluciones:
- Crea una cuenta de servicio de compilación personalizada para las implementaciones de funciones.
- Añade el rol de cuenta de servicio de Cloud Build
(
roles/cloudbuild.builds.builder
) a la cuenta de servicio predeterminada de Compute. - Consulta las directrices de Cloud Build sobre los cambios en la cuenta de servicio predeterminada y rechaza estos cambios.
Cuenta de servicio de compilación inhabilitada
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.
Solución
La cuenta de servicio de compilación debe estar habilitada para desplegar una función. Puede que se produzca este error debido a un cambio en el comportamiento predeterminado de cómo usa Cloud Build las cuentas de servicio, que se describe en el artículo Cambio en la cuenta de servicio de Cloud Build.
Para solucionar este problema, utiliza cualquiera de estas soluciones:
- Crea una cuenta de servicio de compilación personalizada para las implementaciones de funciones.
- Habilita la cuenta de servicio predeterminada de Compute.
- Consulta las directrices de Cloud Build sobre los cambios en la cuenta de servicio predeterminada y rechaza estos cambios.
sirviendo
En esta sección se enumeran los problemas de publicación que puede encontrar y se ofrecen sugerencias para solucionarlos.
Error de permiso de publicación debido a que la función requiere autenticación
Las funciones HTTP sin la opción Permitir invocaciones sin autenticar habilitada restringen el acceso a los usuarios finales y a las cuentas de servicio que no tienen los permisos adecuados. Este mensaje de error indica que la persona que llama no tiene permiso para invocar la función.
Mensaje de error
Código de respuesta de error HTTP: 403 Prohibido
Cuerpo de la respuesta de error HTTP:
Error: Forbidden Your client does not have permission
to get URL /FUNCTION_NAME from this server.
Solución
Para solucionar este problema, sigue una de estas soluciones:
Asigna al usuario el rol Invocador de Cloud Run de Cloud IAM para la función específica.
Vuelve a implementar tu función para permitir invocaciones sin autenticar si tu organización lo admite. Esto resulta útil para hacer pruebas.
Error de publicación debido a la configuración de allow internal traffic only
Los ajustes de entrada restringen si una función HTTP puede invocarse mediante recursos que estén fuera de tu proyecto de Google Cloud o de tu perímetro de servicio de Controles de Servicio de VPC.
Cuando configuras el ajuste Permitir solo el tráfico interno para la red de entrada, este mensaje de error indica que solo se permiten las solicitudes de redes VPC del mismo proyecto o perímetro de Controles de Servicio de VPC. También puede tratarse de un error 404 de la functions.net
URL predeterminada.
Mensaje de error
Código de respuesta de error HTTP: 404 NOT FOUND
Solución
Para solucionar este error, siga una de estas soluciones:
Asegúrate de que la solicitud proceda de tu Google Cloud proyecto o perímetro de servicio de Controles de Servicio de VPC.
Cambia los ajustes de entrada para permitir todo el tráfico de la función.
El código fuente de las funciones de Cloud Run también puede dar como resultado un error 404 debido a una URL de función incorrecta, métodos HTTP, errores de lógica, etc.
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 haya configurado con acceso restringido, se necesita un token de ID. Los tokens de acceso o los tokens de actualización no funcionan.
Mensaje de error
Código de respuesta de error HTTP: 401 Unauthorized
Cuerpo de la respuesta de error HTTP:
Your client does not have permission to the requested URL 'FUNCTION_NAME'
Solución
Para solucionar este error, siga una de estas soluciones:
Asegúrate de que tus solicitudes incluyan un encabezado
Authorization: Bearer ID_TOKEN
y de que el token sea un token de ID, no un token de acceso o de actualización. Si generas este token manualmente con la clave privada de una cuenta de servicio, debes intercambiar el token JWT autofirmado por un token de identidad firmado por Google.Invoca tu función HTTP usando las credenciales de autenticación en el encabezado de la solicitud. Por ejemplo, puedes obtener un token de identidad mediante
gcloud
de la siguiente manera:curl -H "Authorization: Bearer $(gcloud auth print-identity-token)"
https://REGION-PROJECT_ID.cloudfunctions.net/FUNCTION_NAMEVuelve a implementar tu función para permitir invocaciones no autenticadas si tu organización lo admite. Esto resulta útil para hacer pruebas.
La función se detiene a mitad de la ejecución o sigue ejecutándose después de que finalice el código
Algunos tiempos de ejecución de Cloud Run Functions permiten a los usuarios ejecutar tareas asíncronas. Si tu función crea estas tareas, también debe esperar explícitamente a que se completen. Si no lo haces, es posible que tu función deje de ejecutarse en el momento incorrecto.
Comportamiento de error
Tu función presenta uno de los siguientes comportamientos:
- Tu función finaliza mientras las tareas asíncronas siguen ejecutándose, pero antes de que haya transcurrido el periodo de tiempo de espera especificado.
- Tu función no deja de ejecutarse cuando finalizan estas tareas, sino que continúa hasta que transcurre el periodo de tiempo de espera.
Solución
Si tu función finaliza antes de tiempo, debes asegurarte de que todas las tareas asíncronas de la función se completen antes de que la función realice alguna de las siguientes acciones:
- Devolver un valor
- Resolver o rechazar un objeto
Promise
devuelto (solo funciones de Node.js) - Lanzar excepciones o errores no detectados
- Enviar una respuesta HTTP
- Llamar a una función de retrollamada
Si tu función no se finaliza después de completar las tareas asíncronas, debes verificar que la función esté señalando correctamente las funciones de Cloud Run después de que se haya completado. En concreto, asegúrate de realizar una de las operaciones indicadas anteriormente en cuanto tu función haya terminado sus tareas asíncronas.
Error de tiempo de ejecución al acceder a recursos protegidos por Controles de Servicio de VPC
De forma predeterminada, Cloud Run functions usa direcciones IP públicas para enviar solicitudes salientes a otros servicios. Si tus funciones no están dentro de un perímetro de Controles de Servicio de VPC, es posible que reciban respuestas HTTP 403 al intentar acceder a servicios protegidos por Controles de Servicio de VPC debido a denegaciones de perímetros de servicio. Google Cloud
Mensaje de error
En los registros de recursos auditados, 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" ...
Solución
Para solucionar este error, siga una de estas soluciones:
La función debe dirigir todo el tráfico saliente a través de la red de VPC. Para obtener más información, consulta la sección Implementar funciones que cumplan los requisitos de Controles de Servicio de VPC.
También puedes conceder acceso al perímetro a la cuenta de servicio de tiempo de ejecución de la función. Para ello, puedes crear un nivel de acceso y añadirlo al perímetro de servicio o crear una política de entrada en el perímetro. Para obtener más información, consulta Usar Controles de Servicio de VPC.
Escalabilidad
En esta sección se enumeran los problemas de escalabilidad y se ofrecen sugerencias para solucionarlos.
Errores de Cloud Logging relacionados con cancelaciones de solicitudes de colas pendientes
Los errores de escalado pueden producirse en los siguientes casos:
- Un aumento repentino y enorme del tráfico.
- Tiempo de arranque en frío prolongado.
- Tiempo de procesamiento de solicitudes largo.
- Tasa de errores de función alta.
- Alcanzar el límite máximo de instancias e impedir que el sistema se escale.
- Factores transitorios atribuidos al servicio de Cloud Run Functions.
En ambos casos, es posible que las funciones de Cloud Run no se escalen lo suficientemente rápido para gestionar el tráfico.
Mensaje de error
The request was aborted because there was no available instance
severity=WARNING
( Código de respuesta: 429) Las funciones de Cloud Run no se pueden escalar debido al límitemax-instances
que has definido durante la configuración.severity=ERROR
( Código de respuesta: 500) Las funciones de Cloud Run no pueden gestionar la tasa de tráfico de forma intrínseca.
Solución
Para solucionar este problema, aborda las causas que se han indicado anteriormente.
En el caso de las funciones basadas en activadores HTTP, el cliente debe implementar un tiempo de espera exponencial y reintentos para las solicitudes que no se deban descartar. Si activas funciones de Cloud Run desde Workflows, puedes usar la sintaxis
try/retry
para hacerlo.En el caso de las funciones en segundo plano o basadas en eventos, Cloud Run Functions admite la entrega al menos una vez. Aunque no habilites explícitamente los reintentos, el evento se vuelve a enviar automáticamente y se vuelve a intentar la ejecución de la función. Para obtener más información, consulta el artículo sobre cómo volver a probar funciones basadas en eventos.
Si la causa principal del problema es un periodo de errores transitorios elevados atribuidos únicamente a las funciones de Cloud Run o si necesitas ayuda con tu problema, ponte en contacto con el equipo de Asistencia.
Si tienes problemas con los arranques en frío, configura las instancias mínimas para reducir el número de arranques en frío con una implicación de facturación mayor.
Almacenamiento de registros
En la siguiente sección se tratan los problemas relacionados con el registro y cómo solucionarlos.
Las entradas de registro no tienen niveles de gravedad o son incorrectos
Cloud Run Functions incluye el registro de tiempo de ejecución de forma predeterminada. Los registros escritos en stdout
o stderr
aparecen automáticamente en Cloud Logging.
Sin embargo, estas entradas de registro solo contienen mensajes de cadena de forma predeterminada.
Mensaje de error
Niveles de gravedad incorrectos o inexistentes en los registros.
Solución
Para incluir gravedades de registro, debes enviar una entrada de registro estructurada.
Gestionar o registrar excepciones de forma diferente en caso de fallo
Puede que quieras personalizar cómo gestionas y registras la información sobre los fallos.
Solución
Encierra tu función en un bloque try
para personalizar la gestión de excepciones y
registrar los rastreos 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 tiempos de ejecución es de 105 KiB.
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 los registros de las funciones de Cloud Run a un segmento predeterminado. Cuando creas un proyecto, Cloud Run Functions crea y habilita el bucket predeterminado. Si el bucket predeterminado está inhabilitado o los registros de funciones de Cloud Run están en el filtro de exclusión, los registros no aparecerán en el explorador de registros.
Solución
Habilita los registros predeterminados.
Los registros de las funciones de Cloud Run no aparecen en el explorador de registros
Algunas bibliotecas de cliente de Cloud Logging usan un proceso asíncrono para escribir entradas de registro. Si una función falla o se termina de otro modo, es posible que algunas entradas de registro aún no se hayan escrito y puedan aparecer más adelante. Es posible que se pierdan algunos registros y no se puedan ver en el explorador de registros.
Solución
Usa la interfaz de la biblioteca de cliente para vaciar 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 funciones de Cloud Run al usar un receptor de Log Router
Los sumideros del router de registros enrutan las entradas de registro a varios destinos.
Los filtros de exclusión definen las entradas que puedes descartar.
Solución
Quita el conjunto de filtros de exclusión de resource.type = "cloud_run_revision"
.
Conexiones de bases de datos
Al conectarse a una base de datos, pueden surgir varios problemas, muchos de ellos relacionados con la superación de los límites de conexión o con el tiempo de espera agotado. Si ves una advertencia de Cloud SQL en tus registros, como Context deadline exceeded
, puede que tengas que ajustar la configuración de tu 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 de redes y se ofrecen sugerencias para solucionarlos.
Conectividad de red
Si todas las solicitudes salientes de una función de Cloud Run fallan incluso después de configurar los ajustes de salida, puedes ejecutar pruebas de conectividad para identificar cualquier problema de conectividad de red subyacente. Para obtener más información, consulta Crear y ejecutar pruebas de conectividad.
El conector de Acceso a VPC sin servidor no está preparado o no existe
Si falla un conector de acceso a VPC sin servidor, es posible que no esté usando una /28
máscara de subred dedicada al conector como obligatorio.
Mensaje de error
Problem connecting to VPC Connector projects/xxxxx/locations/REGION/connectors/xxxx: Serverless VPC Access is not found.
Cuando se implementan funciones de Cloud Run con un conector en mal estado debido a que falta un permiso en la cuenta de servicio del agente de servicio de las APIs de Google PROJECT_NUMBER@cloudservices.gserviceaccount.com
, se produce el siguiente error:
Mensaje de error
Failed to prepare VPC connector. Please try again later.
Solución
Enumera tus subredes para comprobar si tu conector usa una máscara de subred /28
. Si tu conector no usa la máscara de subred /28
, vuelve a crear o crea un conector.
Para solucionar este problema, sigue una de estas soluciones:
Si vuelve a crear el conector, no es necesario que vuelva a implementar otras funciones. Es posible que se produzca una interrupción de la red mientras se vuelve a crear el conector.
Si creas un conector alternativo, vuelve a implementar tus funciones para usar el nuevo conector y, a continuación, elimina el conector original. Este método evita las interrupciones de la red.
Asegúrate de que las funciones de Cloud Run y su conector asociado se hayan desplegado en la misma región.
En la configuración de VPC compartida:
Asegúrate de que las cuentas de servicio
SERVICE_PROJECT_NUMBER@cloudservices.gserviceaccount.com
yservice-SERVICE_PROJECT_NUMBER@gcp-sa-vpcaccess.iam.gserviceaccount.com
que usa el conector VPC para aprovisionar recursos en el proyecto no tengan permisos que falten. Estas cuentas de servicio deben tener el rolroles/compute.networkUser
en 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 el rol
Serverless VPC Access User
esté concedido en 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 recommended
y el agente de servicio de las APIs de Google no tiene los permisos necesarios para aprovisionar recursos de computación en el proyecto del conector, concederoles/compute.admin
a la cuenta de servicioPROJECT_NUMBER@cloudservices.gserviceaccount.com
. En algunos casos, es posible que tengas que volver a crear el conector después de añadir estos permisos.
Se bloquea el tráfico SMTP a direcciones IP de destino externas mediante el puerto TCP 25
Para aumentar la seguridad, Google Cloud bloquea las conexiones al puerto de destino TCP 25
al enviar correos desde funciones.
Solución
Para desbloquear estas conexiones, sigue cualquiera de estas soluciones:
Conéctate a tu servidor SMTP en otro puerto, como el puerto TCP
587
o465
.
Error 404 en la URL functions.net
predeterminada
Si inhabilitas la URL run.app
en Cloud Run, también se impedirá el acceso a la URL cloudfunctions.net
predeterminada de las funciones de Cloud Run (2.ª gen.). Este error también puede deberse a un error de publicación por la configuración de permitir solo el tráfico interno.
Mensaje de error
Código de respuesta de error HTTP: 404 NOT FOUND
Solución
Para volver a habilitar la URL cloudfunctions.net
predeterminada de Cloud Run Functions (2.ª gen.),
debes volver a habilitar la URL run.app
en Cloud Run
sustituyendo el archivo service.yaml
por una nueva configuración en la que
annotations:run.googleapis.com/default-url-disabled: false