Soluciona problemas de Cloud Run Functions
En este documento, se muestra cómo solucionar problemas de mensajes de error y resolver problemas cuando usas Cloud Run Functions.
Implementación
En esta sección, se enumeran los errores que puedes encontrar con la implementación y se proporcionan sugerencias para solucionarlos. Muchos de los problemas que puedes encontrar durante la implementación están relacionados con roles y permisos o una configuración incorrecta.
Usas Identity and Access Management para autorizar identidades para realizar 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 Cómo autorizar el acceso con IAM.
Durante la implementación de una función, el usuario no tiene los permisos para la cuenta de servicio del entorno de ejecución
Cada función está asociada con una cuenta de servicio que funciona 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 administrada por el usuario. En entornos en los que varias funciones acceden a diferentes recursos, es una práctica común usar identidades por función, con cuentas de servicio del entorno de ejecución con nombre en lugar de la cuenta de servicio del entorno de ejecución predeterminada (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 del entorno de ejecución que no es predeterminada recibe de forma automática 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 con el rol de Visualizador de proyectos, desarrollador de Cloud Functions o administrador de Cloud Functions.
Mensaje de error
Console
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 cuenta de servicio (roles/iam.serviceAccountUser
) en la cuenta de servicio del entorno de ejecución predeterminada o no. Esta función incluye el permiso iam.serviceAccounts.actAs
.
La cuenta de servicio de implementación no tiene permisos de Pub/Sub cuando implementa una función controlada por 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 la función cloudfunctions.serviceAgent
de Cloud Functions. Para implementar funciones controladas por eventos, el servicio de Cloud Functions debe acceder a Pub/Sub a fin de 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á.
Mensaje de error
Console
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.
No existe una cuenta de servicio del entorno de ejecución predeterminada
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 como la cuenta de servicio del entorno de ejecución. Las implementaciones fallan si borras la cuenta predeterminada sin especificar una cuenta administrada 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.]
La solución
Para resolver este problema, sigue cualquiera de estas soluciones:
Especifica una cuenta de servicio del entorno de ejecución administrada por el usuario antes de implementar tu función.
Recupera la cuenta de servicio por ID numérico de la cuenta de servicio predeterminada.
Cuando se implementa una función, el agente de servicio de Cloud Functions no tiene permisos del bucket del proyecto
Cloud Run Functions solo se puede activar por eventos desde buckets de Cloud Storage en el mismo proyecto de Google Cloud Platform. Además, la cuenta de servicio del agente de servicio de Cloud Functions (service-PROJECT_NUMBER@gcf-admin-robot.iam.gserviceaccount.com
) necesita una función cloudfunctions.serviceAgent
en tu proyecto.
Mensaje de error
Console
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 dentro de un proyecto, pero no otorga de forma inherente la capacidad de hacer que Cloud Functions sea pública. El usuario o el servicio que implementa la función necesitaría 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).
La solución
Conócelas a continuación:
Asignar al implementador el rol de Propietario del proyecto o Administrador de Cloud Functions.
Crear una función personalizada para otorgar el permiso de forma manual
Verifica 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 restringe la política. 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.
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 se realice correctamente.
La implementación de la función falla mientras se ejecuta el permiso global de la función
Este error indica que hubo un problema con tu código. La canalización de implementación terminó de implementar la función, pero presentó una falla en el último paso. Envía una verificación de estado a la función. Esta verificación de estado tiene como objetivo ejecutar un permiso global de la función, que podría generar una excepción, fallar o agotar el tiempo de espera. El permiso global es donde comúnmente se cargan las bibliotecas y se inicializan los clientes.
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, sigue cualquiera de estas soluciones:
Para obtener un mensaje de error más detallado, revisa los registros de compilación y los registros del entorno de ejecución de la función.
Si no está claro por qué tu función no pudo ejecutar su permiso global, considera trasladar el código de manera temporal a la invocación de la solicitud mediante la inicialización diferida de las variables globales. Esto te permite agregar instrucciones de registro adicionales alrededor de tus bibliotecas cliente, las cuales pueden agotar 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 funciones de Cloud Run Functions 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 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 la función de Visualizador no puede implementar una función
Los usuarios con el rol de visualizador de proyectos o visualizador de Cloud Functions tienen acceso de solo lectura a las funciones y a los detalles de la función, y no pueden implementar funciones nuevas. La función Crear función está inhabilitada en la consola de Google Cloud con 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']
La solución
Asigna al usuario el rol de Desarrollador de Cloud Functions.
Faltan permisos de la cuenta de servicio compilada
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 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.
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 encuentres 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, usa cualquiera de estas soluciones:
- 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 de Compute predeterminada. - 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
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 encuentres 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, usa cualquiera de estas soluciones:
- Crea una cuenta de servicio de compilación personalizada para las implementaciones de funciones.
- Habilita la cuenta de servicio de Compute predeterminada.
- 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 de entrega que puedes encontrar y se proporcionan sugerencias para solucionarlos.
Error de permiso de entrega debido a la que función requiere autenticación
Las funciones de HTTP sin permitir invocaciones no autenticadas habilitaron el acceso restringido a los usuarios finales y las cuentas de servicio que no tienen permisos adecuados. Este mensaje de error indica que el emisor 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.
La solución
Para resolver este problema, sigue cualquiera de estas soluciones:
Asigna al usuario el rol de Cloud IAM de invocador de Cloud Functions para la función específica.
Vuelve a implementar la función para permitir invocaciones no autenticadas si esto es compatible con tu organización. Esto es útil para pruebas.
Error de publicación debido a la configuración de 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 del servicio de los Controles del servicio de VPC.
Cuando configuras la opción Solo permitir tráfico interno para las redes de entrada, este mensaje de error indica que solo se permiten solicitudes de redes de VPC en el mismo proyecto o perímetro de Controles del servicio de VPC. También puede ser un error 404 para la URL predeterminada de functions.net
.
Mensaje de error
Código de respuesta de error HTTP: 404 NO ENCONTRADO
La solución
Para resolver este error, sigue cualquiera de estas soluciones:
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.
Cambiar 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, métodos HTTP, errores lógicos, etc., incorrectos.
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.
Mensaje de error
Código de respuesta de error HTTP: 401 No autorizado
Cuerpo de la respuesta de error HTTP:
Your client does not have permission to the requested URL 'FUNCTION_NAME'
La solución
Para resolver este error, sigue cualquiera 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 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. Para obtener más información, consulta Autentica para la invocación.Invoca tu función de HTTP con credenciales de autenticación en el encabezado de tu solicitud. Por ejemplo, puedes obtener un token de identidad con
gcloud
de la siguiente manera: Para obtener más información, consulta Autentica para la invocación.curl -H "Authorization: Bearer $(gcloud auth print-identity-token)"
https://REGION-PROJECT_ID.cloudfunctions.net/FUNCTION_NAMEVuelve a implementar la función para permitir invocaciones no autenticadas si esto es compatible con tu organización. Esto es útil para pruebas.
La función se detiene durante la ejecución o sigue ejecutándose después de que finaliza tu código
Algunos entornos de ejecución de Cloud Run Functions permiten que los usuarios ejecuten tareas asíncronas. Si la función crea esas tareas, también debe esperar de manera explícita a que se completen. De lo contrario, tu función podría dejar de ejecutarse en el momento incorrecto.
El comportamiento del error
Tu función muestra uno de los siguientes comportamientos:
- La función finaliza mientras las tareas asíncronas aún se están ejecutando, pero antes de que haya transcurrido el período de 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 las tareas asíncronas de tu función se hayan completado antes de que la función realice alguna de las siguientes acciones:
- Mostrar un valor
- Resolver o rechazar un objeto
Promise
que se muestra (solo en funciones de Node.js) - Arrojar excepciones o errores no detectados
- Enviar una respuesta HTTP
- Llamar a una función de devolución de llamada
Si tu función no finaliza después de completar tareas asíncronas, debes verificar que la función le indique correctamente a las funciones de Cloud Run que se completó. En especial, asegúrate de realizar una de las operaciones enumeradas antes, ya que la función finalizó 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 tus funciones no están dentro de un perímetro de Controles del servicio de VPC, es posible que reciban respuestas HTTP 403 cuando se intenta acceder a los servicios de Google Cloud protegidos por Controles del servicio de VPC debido a las denegaciones del perímetro de servicio.
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" ...
La solución
Para resolver este error, sigue cualquiera de estas soluciones:
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.
De manera alternativa, otorga acceso al perímetro a la cuenta de servicio del entorno de ejecución de la función. Puedes hacerlo de las siguientes dos maneras: Crear un nivel de acceso y Agrega el nivel de acceso al perímetro del servicio o Crea una política de entrada en el perímetro. Consulta Usa los Controles del servicio de VPC con funciones fuera de un perímetro 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 siguientes situaciones:
- Un gran incremento repentino del tráfico.
- Tiempo de inicio en frío largo.
- Tiempo de procesamiento de solicitudes largo.
- Tasa alta de errores de función.
- Alcanzar el límite máximo de instancias y evitar que el sistema escale.
- Factores transitorios atribuidos al servicio de Cloud Run Functions.
En cada caso, es posible que Cloud Run Functions no escale verticalmente con suficiente rapidez como para administrar el tráfico.
Mensaje de error
The request was aborted because there was no available instance
severity=WARNING
(Código de respuesta: 429) Cloud Run Functions no se puede escalar debido al límitemax-instances
que 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 anteriormente.
Para las funciones basadas en activadores HTTP, haz que el cliente implemente una retirada exponencial y vuelva a intentar las solicitudes que no se deben descartar. Si activas funciones de Cloud Run Functions desde Workflows, puedes usar la sintaxis
try/retry
para lograrlo.Para las funciones en segundo plano o controladas por eventos, Cloud Run Functions admite la entrega al menos una vez. Incluso sin habilitar explícitamente el reintento, el evento se vuelve a entregar de manera automática y se vuelve a intentar la ejecución de la función. Consulta Reintenta las funciones controladas por 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 instancias mínimas para reducir la cantidad de inicios en frío con una implicación de facturación más alta.
Logging
En la siguiente sección, se abordan los problemas relacionados con el registro y cómo solucionarlos.
Las entradas de registro tienen niveles de gravedad de registro incorrectos o no tienen.
Cloud Run Functions incluye el registro del entorno de ejecución de forma predeterminada. Los registros escritos en stdout
o stderr
aparecen de forma automática en la Cloud Logging.
Sin embargo, estas entradas de registro de forma predeterminada contienen solo mensajes de string simples.
Mensaje de error
No hay niveles de gravedad en los registros o son incorrectos.
La solución
Para incluir la gravedad del registro, debes enviar una entrada de registro estructurada.
Controla o registra excepciones diferentes en caso de falla
Te recomendamos que personalices la manera en que administras y registras la información de las fallas.
La solución
Une tu función en un bloque try
para personalizar el manejo 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 inferiores a este límite.
Faltan registros a pesar de que Cloud Run Functions muestra errores
Cloud Run Functions transmite los registros de las funciones de Cloud Run a un bucket predeterminado. Cuando creas un proyecto, Cloud Run Functions crea y habilita el bucket predeterminado. Si el bucket predeterminado 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 a fin de limpiar 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 cuando se usa 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 se conecta a una base de datos, muchos de ellos asociados con exceder los límites de conexión o agotar 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 conexión. Para obtener más información, consulta las prácticas recomendadas de Cloud SQL.
Herramientas de redes
En esta sección, se enumeran los problemas de red y se proporcionan sugerencias para solucionarlos.
Conectividad de red
Si todas las solicitudes salientes de una función de Cloud Run Functions 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
dedicada al conector, lo que es obligatorio.
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 servicios 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.
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, sigue cualquiera de estas soluciones:
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 conector 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.com
yservice-SERVICE_PROJECT_NUMBER@gcp-sa-vpcaccess.iam.gserviceaccount.com
que usa el conector de VPC para aprovisionar recursos en el proyecto no tengan permisos faltantes. Estas cuentas de servicio deben tener el rolroles/compute.networkUser
en el proyecto host de la configuración de 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
Serverless VPC Access User
en 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 recommended
y 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.admin
a 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 a direcciones IP de destino externas que usan el puerto TCP 25 está bloqueado
Para 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 estas soluciones:
Conéctate a tu servidor SMTP en un puerto diferente, como el puerto TCP
587
o465
.
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 de solo permitir tráfico interno.
Mensaje de error
Código de respuesta de error 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 en la que annotations:run.googleapis.com/default-url-disabled: false