Résoudre les problèmes liés à Cloud Functions (2nd gen)

Ce document explique comment résoudre les problèmes liés aux messages d'erreur et à l'utilisation de Cloud Functions (2e génération).

Déploiement

Cette section répertorie les problèmes que vous pouvez rencontrer lors du déploiement et fournit des suggestions pour les résoudre. La plupart des problèmes que vous pouvez rencontrer lors du déploiement sont liés aux rôles et autorisations ou à une configuration incorrecte.

L'utilisateur ne dispose pas des autorisations nécessaires sur le compte de service d'exécution lors du déploiement d'une fonction

Chaque fonction est associée à un compte de service qui sert d'identité lorsque la fonction accède à d'autres ressources. Ce compte de service d'exécution peut être le compte de service par défaut ou un compte de service géré par l'utilisateur. Dans les environnements où plusieurs fonctions accèdent à des ressources différentes, il est courant d'utiliser des identités par fonction, avec des comptes de service d'exécution nommés plutôt que le compte de service d'exécution par défaut. (PROJECT_NUMBER-compute@developer.gserviceaccount.com).

Pour utiliser un compte de service d'exécution, l'utilisateur à l'origine du déploiement doit disposer de l'autorisation iam.serviceAccounts.actAs sur ce compte de service. Cette autorisation est automatiquement accordée à un utilisateur qui crée un compte de service d'exécution autre que celui par défaut. Pour que d'autres "déployeurs" puissent en disposer, elle doit leur être accordée par un utilisateur.

Attribuez l'autorisation iam.serviceAccounts.actAs sur le compte de service d'exécution pour l'utilisateur disposant du rôle de lecteur de projet, de développeur Cloud Functions ou d'administrateur Cloud Functions.

Message d'erreur

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

Compte de service par défaut :

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:'

Compte de service autre que celui par défaut:

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:'

Solution

Attribuez à l'utilisateur le rôle Utilisateur du compte de service (roles/iam.serviceAccountUser) sur le compte de service d'exécution par défaut ou sur le compte de service d'exécution autre que celui par défaut. Ce rôle inclut l'autorisation iam.serviceAccounts.actAs.

Le compte de service de déploiement ne dispose pas des autorisations Pub/Sub nécessaires lors du déploiement d'une fonction basée sur des événements

Le service Cloud Functions utilise le compte de service de l'agent de service Cloud Functions (service-PROJECT_NUMBER@gcf-admin-robot.iam.gserviceaccount.com) pour effectuer des tâches d'administration. Le rôle cloudfunctions.serviceAgent Cloud Functions est attribué par défaut à ce compte de service. Pour déployer des fonctions basées sur des événements, le service Cloud Functions doit accéder à Pub/Sub pour configurer les sujets et les abonnements. Si vous modifiez le rôle attribué au compte de service sans accorder les autorisations appropriées, le service Cloud Functions ne peut pas accéder à Pub/Sub et le déploiement échoue.

Message d'erreur

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"]

Solution

Vous pouvez réinitialiser votre compte de service pour rétablir le rôle cloudfunctions.serviceAgent par défaut.

Le compte de service d'exécution par défaut n'existe pas

Si vous ne spécifiez pas de compte de service d'exécution géré par l'utilisateur, Cloud Functions (2e génération) utilise le compte de service Compute par défaut comme compte de service d'exécution. Les déploiements échouent si vous supprimez le compte par défaut sans spécifier de compte géré par l'utilisateur.

Message d'erreur

gcloud

ERROR: (gcloud.functions.deploy) ResponseError: status=[404], code=[Ok], message=[Service account projects/-/serviceAccounts/PROJECT_NUMBER-compute@developer.gserviceaccount.com was not found.]

Solution

Pour résoudre ce problème, appliquez l'une des solutions suivantes:

Le compte de service de l'agent de service Cloud Functions ne dispose pas des autorisations nécessaires sur le bucket du projet lors du déploiement d'une fonction

Les fonctions Cloud Functions ne peuvent être déclenchées par des événements qu'à partir de buckets Cloud Storage situés dans le même projet Google Cloud Platform. En outre, le compte de service de l'agent de service Cloud Functions (service-PROJECT_NUMBER@gcf-admin-robot.iam.gserviceaccount.com) doit disposer d'un rôle cloudfunctions.serviceAgent sur votre projet.

Message d'erreur

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"]

Solution

Pour résoudre ce problème, réinitialisez ce compte de service sur le rôle par défaut.

Un utilisateur doté du rôle d'éditeur de projet ne peut pas rendre une fonction disponible publiquement

Le rôle Éditeur de projet dispose d'autorisations étendues pour gérer les ressources d'un projet, mais il ne permet pas intrinsèquement de rendre Cloud Functions public. L'utilisateur ou le service déployant la fonction a besoin de l'autorisation run.services.setIamPolicy.

Message d'erreur

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).

Solution

avec la gestion des correctifs :

Échec du déploiement de la fonction lors de l'utilisation de la règle d'administration Restriction d'emplacement des ressources

Si votre organisation utilise une règle de contrainte d'emplacement des ressources, elle limite le déploiement des fonctions dans les régions restreintes par la règle. Dans la console Google Cloud, la région restreinte n'est pas disponible dans la liste déroulante de région lors du déploiement d'une fonction.

Message d'erreur

gcloud

ResponseError: status=[400], code=[Ok], message=["LOCATION" violates constraint "constraints/gcp.resourceLocations" on the resource "projects/PROJECT_ID/locations/LOCATION/functions/FUNCTION_NAME".]

Solution

Vous pouvez ajouter ou supprimer des emplacements dans les listes allowed_values ou denied_values d'une contrainte d'emplacement de ressources en fonction de la réussite du déploiement.

Échec du déploiement de la fonction lors de l'exécution du champ d'application global de la fonction

Cette erreur indique qu'un problème est lié au code. Le pipeline de déploiement a fini de déployer la fonction, mais a échoué à la dernière étape en envoyant une vérification d'état à la fonction. Cette vérification d'état est destinée à exécuter le champ d'application global d'une fonction, ce qui peut générer une exception, un plantage ou un dépassement de délai. Le champ d'application global est l'endroit où vous chargez généralement les bibliothèques et initialisez les clients.

Message d'erreur

Dans les journaux 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.

Solution

Pour résoudre ce problème, appliquez l'une des solutions suivantes:

  • Pour afficher un message d'erreur plus détaillé, consultez les journaux des builds de votre fonction, ainsi que les journaux d'exécution de la fonction.

  • Si vous ne comprenez pas pourquoi votre fonction n'a pas réussi à exécuter son champ d'application global, envisagez de déplacer temporairement le code dans l'appel de la requête, en utilisant l'initialisation différée des variables globales. Cela vous permet d'ajouter des entrées de journal supplémentaires à vos bibliothèques clientes, qui pourraient expirer lors de leur instanciation (surtout si elles appellent d'autres services), ou pour éviter tout plantage/toute génération d'exceptions.

  • En outre, essayez d'augmenter le délai avant expiration de la fonction. Des délais avant expiration plus longs dans Cloud Functions (2nd gen) offrent davantage de place à l'initialisation et offrent une allocation des ressources plus évolutive dans un environnement Cloud Run, ce qui peut limiter ce problème si celui-ci est causé par l'épuisement des ressources.

  • Le code source doit contenir un point d'entrée de fonction qui a été correctement spécifié dans le déploiement via la console ou gcloud.

Un utilisateur disposant du rôle de lecteur ne peut pas déployer une fonction

Les utilisateurs disposant du rôle de lecteur de projet ou de lecteur Cloud Functions disposent d'un accès en lecture seule aux fonctions et aux détails des fonctions, et ne peuvent pas déployer de nouvelles fonctions. La fonctionnalité Créer une fonction est grisée dans la console Google Cloud avec l'erreur suivante:

Message d'erreur

gcloud

ERROR: (gcloud.functions.deploy) ResponseError: status=[403], code=[Ok], message=[Permission 'cloudfunctions.functions.generateUploadUrl' denied on 'projects/PROJECT_ID/locations/LOCATION/functions']

Solution

Attribuez le rôle de développeur Cloud Functions à l'utilisateur.

Autorisations manquantes pour le compte de service de compilation

Message d'erreur

Dans l'erreur de déploiement de la fonction ou dans les journaux de compilation, l'une des erreurs suivantes peut s'afficher :

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.

Solution

Le compte de service de compilation doit être autorisé à lire à partir du bucket source, ainsi qu'à lire et écrire des données pour le dépôt Artifact Deployment. Vous pouvez rencontrer cette erreur en raison d'un changement du comportement par défaut d'utilisation des comptes de service Cloud Build, détaillé dans la section Modification du compte de service Cloud Build.

Pour résoudre ce problème, appliquez l'une des solutions suivantes :

Compte de service de compilation désactivé

Message d'erreur

Could not build the function due to disabled service account used by Cloud Build. Please make sure that the service account is active.

Solution

Le compte de service de compilation doit être activé pour pouvoir déployer une fonction. Vous pouvez rencontrer cette erreur en raison d'une modification du comportement par défaut de la manière dont Cloud Build utilise les comptes de service, détaillé dans la section Modification du compte de service Cloud Build.

Pour résoudre ce problème, appliquez l'une des solutions suivantes :

Diffusion

Cette section répertorie les problèmes que vous pouvez rencontrer et fournit des suggestions pour les résoudre.

Erreur d'autorisation de diffusion due à la fonction nécessitant une authentification

Les fonctions HTTP sans l'option Autoriser les appels non authentifiés activée limitent l'accès aux utilisateurs finaux et aux comptes de service qui ne disposent pas des autorisations appropriées. Ce message d'erreur indique que le demandeur n'est pas autorisé à appeler la fonction.

Message d'erreur

Code de réponse d'erreur HTTP : 403 Forbidden

Corps de la réponse d'erreur HTTP:

Error: Forbidden Your client does not have permission
to get URL /FUNCTION_NAME from this server.

Solution

Pour résoudre ce problème, appliquez l'une des solutions suivantes:

Erreur de diffusion due à la configuration de allow internal traffic only

Les paramètres d'entrée limitent les appels d'une fonction HTTP par des ressources extérieures à votre projet Google Cloud ou au périmètre de service VPC Service Controls. Lorsque vous configurez le paramètre autoriser le trafic interne uniquement pour le trafic réseau entrant, ce message d'erreur indique que seules les requêtes provenant des réseaux VPC du même projet ou du même périmètre VPC Service Controls sont autorisées.

Message d'erreur

Code de réponse d'erreur HTTP: 404 NOT FOUND

Solution

Pour résoudre cette erreur, appliquez l'une des solutions suivantes:

  • Vous assurer que la requête provient bien de votre projet Google Cloud ou de votre périmètre de service VPC Service Controls

  • Modifier les paramètres d'entrée pour autoriser tout le trafic pour la fonction

  • Le code source de Cloud Functions peut également entraîner une erreur 404 en raison d'une URL de fonction, de méthodes HTTP, d'erreurs logiques, etc. incorrectes.

L'appel de fonction ne contient pas d'identifiants d'authentification valides

L'appel d'une fonction Cloud Functions configurée avec un accès restreint nécessite un jeton d'ID. Les jetons d'accès ou les jetons d'actualisation ne fonctionnent pas.

Message d'erreur

Code de réponse d'erreur HTTP : 401 (Non autorisé)

Corps de la réponse d'erreur HTTP:

Your client does not have permission to the requested URL 'FUNCTION_NAME'

Solution

Pour résoudre cette erreur, choisissez l'une des solutions suivantes:

  • Assurez-vous que vos requêtes incluent un en-tête Authorization: Bearer ID_TOKEN et qu'il s'agit d'un jeton d'ID, et non d'un jeton d'accès ou d'actualisation. Si vous générez ce jeton manuellement avec la clé privée d'un compte de service, vous devez remplacer le jeton JWT autosigné par un jeton d'identité signé par Google. Pour en savoir plus, consultez Authentification pour l'appel.

    Appelez votre fonction HTTP à l'aide des identifiants d'authentification dans votre en-tête de requête. Par exemple, vous pouvez obtenir un jeton d'identité via gcloud comme suit :

      curl  -H "Authorization: Bearer $(gcloud auth print-identity-token)" 
    https://REGION-PROJECT_ID.cloudfunctions.net/FUNCTION_NAME
    Pour en savoir plus, consultez la section Authentification pour l'appel .

  • Redéployez votre fonction pour autoriser les appels non authentifiés si votre organisation le permet. Cette approche est utile pour les tests.

La fonction s'arrête en cours d'exécution ou continue de s'exécuter une fois votre code terminé

Certains environnements d'exécution Cloud Functions permettent aux utilisateurs d'exécuter des tâches asynchrones. Si votre fonction crée des tâches de ce type, elle doit également attendre explicitement que ces tâches se terminent. À défaut, votre fonction peut cesser de s'exécuter au mauvais moment.

Comportement de l'erreur

Votre fonction présente l'un des comportements suivants :

  • Votre fonction s'arrête pendant l'exécution des tâches asynchrones, mais avant la fin du délai avant expiration spécifié.
  • Votre fonction ne s'arrête pas une fois ces tâches terminées et continue de s'exécuter jusqu'à la fin du délai d'expiration.

Solution

Si votre fonction s'arrête prématurément, vous devez vous assurer que toutes les tâches asynchrones de votre fonction sont terminées avant qu'elle n'effectue l'une des actions suivantes:

  • Renvoi d'une valeur
  • Résolution ou refus d'un objet Promise renvoyé (fonctions Node.js uniquement)
  • Génération d'exceptions ou d'erreurs non interceptées
  • Envoi d'une réponse HTTP
  • Appel d'une fonction de rappel

Si votre fonction ne s'arrête pas une fois toutes les tâches asynchrones terminées, vous devez vérifier qu'elle signale correctement Cloud Functions une fois l'opération terminée. Veillez en particulier à effectuer l'une des opérations répertoriées ci-dessus dès que votre fonction a terminé ses tâches asynchrones.

Erreur d'exécution lors de l'accès aux ressources protégées par VPC Service Controls

Par défaut, Cloud Functions utilise des adresses IP publiques pour envoyer des requêtes sortantes à d'autres services. Si vos fonctions ne se trouvent pas dans un périmètre VPC Service Controls, elles risquent de recevoir des réponses HTTP 403 lorsqu'elles tentent d'accéder aux services Google Cloud protégés par VPC Service Controls, en raison de refus du périmètre de service.

Message d'erreur

Dans les journaux des ressources auditées, une entrée de ce type se présente comme suit :

"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"
  ...

Solution

Pour résoudre cette erreur, choisissez l'une des solutions suivantes:

Évolutivité

Cette section répertorie les problèmes d'évolutivité et fournit des suggestions pour les résoudre.

Erreurs Cloud Logging liées à l'abandon de requêtes en file d'attente

Des échecs de scaling peuvent survenir dans les scénarios suivants:

  • Une augmentation soudaine et importante du trafic
  • Temps de démarrage à froid long.
  • Temps de traitement des requêtes long.
  • Un taux d'erreur de la fonction élevé
  • Vous avez atteint la limite maximale d'instances et le système ne peut plus évoluer.
  • Des facteurs temporaires attribuables au service Cloud Functions

Dans chacun de ces cas, Cloud Functions peut ne pas évoluer assez rapidement pour gérer le trafic.

Message d'erreur

  • The request was aborted because there was no available instance
    • severity=WARNING (Code de réponse : 429) Cloud Functions ne peut pas évoluer en raison de la limite max-instances que vous avez définie lors de la configuration.
    • severity=ERROR (Code de réponse : 500) Cloud Functions ne peut intrinsèquement pas gérer le débit du trafic.

Solution

  • Pour résoudre ce problème, corrigez les causes répertoriées précédemment.

  • Pour les fonctions basées sur un déclencheur HTTP, faites en sorte que le client mette en œuvre un intervalle exponentiel entre les tentatives et que les nouvelles tentatives pour les requêtes ne soient pas supprimées. Si vous déclenchez Cloud Functions à partir de Workflows, vous pouvez utiliser pour ce faire la syntaxe try/retry.

  • Pour les fonctions en arrière-plan ou basées sur des événements, Cloud Functions est compatible avec la distribution de type "au moins une fois". Même si vous n'activez pas explicitement les nouvelles tentatives, l'événement est automatiquement redistribué et l'exécution de la fonction est relancée. Pour en savoir plus, consultez la section Effectuer de nouvelles tentatives d'exécution des fonctions basées sur des événements.

  • Lorsque le problème est lié à une période d'augmentation temporaire du nombre d'erreurs attribuables uniquement à Cloud Functions, ou si vous avez besoin d'aide pour résoudre votre problème, veuillez contacter l'assistance.

  • Pour les problèmes liés aux démarrages à froid, configurez le nombre minimal d'instances afin de réduire le nombre de démarrages à froid ayant des implications de facturation plus élevées.

Journalisation

La section suivante traite des problèmes de journalisation et de la façon de les résoudre.

Les entrées de journal n'ont pas de niveaux de gravité des journaux, ou ceux-ci sont incorrects.

Par défaut, Cloud Functions inclut la journalisation d'exécution. Les journaux écrits dans stdout ou stderr s'affichent automatiquement dans Cloud Logging. Par défaut, ces entrées de journal ne contiennent que des messages de chaîne.

Message d'erreur

Les niveaux de gravité sont absents ou incorrects dans les journaux.

Solution

Pour inclure les niveaux de gravité dans les journaux, vous devez envoyer une entrée de journal structurée.

Gérer ou consigner les exceptions différemment en cas de plantage

Vous souhaiterez peut-être personnaliser la manière dont vous gérez et consignez les informations sur les plantages.

Solution

Encapsulez votre fonction dans un bloc try pour personnaliser la gestion des exceptions et les traces de la pile de journalisation.

Exemple

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!'

Journaux trop volumineux dans Node.js 10 et versions ultérieures, Python 3.8, Go 1.13 et Java 11

La taille maximale d'une entrée de journal standard dans ces environnements d'exécution est de 105 Kio.

Solution

Envoyez des entrées de journal qui ne dépassent pas cette limite

Journals manquants alors que Cloud Functions renvoie des erreurs

Cloud Functions diffuse les journaux de fonction Cloud Functions vers un bucket par défaut. Lorsque vous créez un projet, Cloud Functions crée et active le bucket par défaut. Si le bucket par défaut est désactivé ou si les journaux de la fonction Cloud se trouvent dans le filtre d'exclusion, les journaux n'apparaissent pas dans l'Explorateur de journaux.

Solution

Activez les journaux par défaut.

Les journaux Cloud Functions n'apparaissent pas dans l'explorateur de journaux

Certaines bibliothèques clientes Cloud Logging utilisent un processus asynchrone pour écrire des entrées de journal. Si une fonction plante ou s'arrête, il est possible que certaines entrées de journal n'aient pas encore été écrites et qu'elles apparaissent ultérieurement. Certains journaux peuvent être perdus et ne pas être visibles dans l'explorateur de journaux.

Solution

Utilisez l'interface de bibliothèque cliente pour vider les entrées de journal mises en mémoire tampon avant de quitter la fonction ou utilisez la bibliothèque pour écrire des entrées de journal de manière synchrone. Vous pouvez également écrire des journaux de manière synchrone directement dans stdout ou stderr.

Journaux Cloud Functions manquants lors de l'utilisation d'un récepteur du routeur de journaux

Les récepteurs du routeur de journaux acheminent les entrées de journal vers différentes destinations.

Capture d&#39;écran du routeur de journaux dans Cloud Console avec l&#39;option &quot;Afficher les détails du récepteur&quot; encadrée

Les filtres d'exclusion définissent les entrées que vous pouvez supprimer.

Solution

Supprimez l'ensemble de filtres d'exclusion défini pour resource.type = "cloud_run_revision".

Connexions à la base de données

Un certain nombre de problèmes peuvent survenir lors de la connexion à une base de données, la plupart étant liés au dépassement des limites de connexion ou à l'expiration du délai. Si un avertissement Cloud SQL s'affiche dans vos journaux (par exemple, Context deadline exceeded), vous devrez peut-être ajuster votre configuration de connexion. Pour en savoir plus, consultez les bonnes pratiques relatives à Cloud SQL.

Mise en réseau

Cette section répertorie les problèmes de réseau et fournit des suggestions pour les résoudre.

Connectivité réseau

Si toutes les requêtes sortantes d'une fonction Cloud échouent même après la configuration des paramètres de sortie, vous pouvez exécuter le module Tests de connectivité pour identifier les problèmes de connectivité réseau sous-jacents. Pour plus d'informations, consultez la page Créer et exécuter des tests de connectivité.

Le connecteur d'accès au VPC sans serveur n'est pas prêt ou n'existe pas.

Si un connecteur d'accès au VPC sans serveur échoue, il risque de ne pas utiliser un masque de sous-réseau /28 dédié au connecteur, comme requis.

Message d'erreur

Problem connecting to VPC Connector projects/xxxxx/locations/REGION/connectors/xxxx: Serverless VPC Access is not found.

Lorsque Cloud Functions est déployé avec un connecteur dans un état incorrect en raison d'une autorisation manquante sur le compte de service de l'agent de service des API Google PROJECT_NUMBER@cloudservices.gserviceaccount.com, l'erreur suivante est renvoyée:

Message d'erreur

Failed to prepare VPC connector. Please try again later.

Solution

Listez vos sous-réseaux pour vérifier si votre connecteur utilise un masque de sous-réseau /28. Si votre connecteur n'utilise pas le masque de sous-réseau /28, recréez ou créez un connecteur.

Pour résoudre ce problème, appliquez l'une des solutions suivantes:

  • Si vous recréez le connecteur, vous n'avez pas besoin de redéployer les autres fonctions. Vous risquez de subir une interruption du réseau lors de la recréation du connecteur.

  • Si vous créez un autre connecteur, redéployez vos fonctions pour qu'elles utilisent le nouveau connecteur, puis supprimez le connecteur d'origine. Cette méthode évite toute interruption du réseau.

  • Vérifiez que Cloud Functions et le connecteur associé sont déployés dans la même région.

  • Pour la configuration du VPC partagé:

    • Assurez-vous que les comptes de service SERVICE_PROJECT_NUMBER@cloudservices.gserviceaccount.com et service-SERVICE_PROJECT_NUMBER@gcp-sa-vpcaccess.iam.gserviceaccount.com utilisés par le connecteur VPC pour provisionner des ressources dans le projet ne manquent pas d'autorisations. Ces comptes de service doivent disposer du rôle roles/compute.networkUser dans le projet hôte de la configuration du VPC partagé lorsque le connecteur se trouve dans le projet de service.

    • Si le connecteur est créé dans le projet hôte, assurez-vous que le rôle Serverless VPC Access User est accordé sur l'agent de service Cloud Run dans votre projet hôte.

  • Si l'état du connecteur indique l'erreur Connector is in a bad state, manual deletion recommended et que l'agent de service des API Google ne dispose pas des autorisations requises pour provisionner des ressources de calcul dans le projet du connecteur, accordez roles/compute.admin au compte de service PROJECT_NUMBER@cloudservices.gserviceaccount.com. Dans certains cas, il peut être nécessaire de recréer le connecteur après avoir ajouté ces autorisations.

Le trafic SMTP vers des adresses IP de destination externes via le port TCP 25 est bloqué

Pour plus de sécurité, Google Cloud bloque les connexions au port de destination TCP 25 lors de l'envoi d'e-mails à partir de fonctions.

Solution

Pour débloquer ces connexions, suivez l'une des solutions suivantes: