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:

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:

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:

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:

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:

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_TOKEN y 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 gcloud de la manera siguiente:

      curl  -H "Authorization: Bearer $(gcloud auth print-identity-token)" 
    https://REGION-PROJECT_ID.cloudfunctions.net/FUNCTION_NAME

  • Vuelve 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 Promise que 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:

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 instance
    • severity=WARNING (Código de respuesta: 429) Cloud Run Functions no se puede escalar debido al límite max-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 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/retry para 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.

Captura de pantalla del enrutador de registros de la consola con el texto Ver detalles del receptor resaltado

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.com y service-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 rol de roles/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 se otorgue el rol de 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, otorga roles/compute.admin a la cuenta de servicio PROJECT_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:

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