Risolvi i problemi di Cloud Run Functions (1ª gen.)

Questo documento mostra come risolvere i problemi e i messaggi di errore quando utilizzi Cloud Run Functions (1ª gen.).

Deployment

Questa sezione elenca i problemi che potresti riscontrare con il deployment e fornisce suggerimenti su come risolverli. Molti dei problemi che potresti riscontrare durante il deployment sono correlati a ruoli e autorizzazioni o a una configurazione errata.

Il service account di deployment non ha le autorizzazioni Pub/Sub richieste durante il deployment di una funzione basata su eventi

Il servizio Cloud Functions utilizza il service account del service agent Cloud Functions (service-PROJECT_NUMBER@gcf-admin-robot.iam.gserviceaccount.com) per eseguire azioni amministrative. Per impostazione predefinita, a questo account viene assegnato il ruolo cloudfunctions.serviceAgent di Cloud Functions. Per eseguire il deployment delle funzioni basate su eventi, il servizio Cloud Functions deve accedere a Pub/Sub per configurare argomenti e sottoscrizioni. Se il ruolo assegnato al service account cambia e le autorizzazioni appropriate non vengono aggiornate, il servizio Cloud Functions non può accedere a Pub/Sub e il deployment non riesce.

Messaggio di errore

Console

Failed to configure trigger PubSub projects/PROJECT_ID/topics/FUNCTION_NAME

gcloud

ERROR: (gcloud.functions.deploy) OperationError: code=13, message=Failed to configure trigger PubSub projects/PROJECT_ID/topics/FUNCTION_NAME

La soluzione

Puoi reimpostare il service account al ruolo cloudfunctions.serviceAgent predefinito.

Il service account di runtime predefinito non esiste

Quando non viene specificato un service account gestito dall'utente, Cloud Run Functions (1ª gen.) utilizza per impostazione predefinita il service account App Engine. I deployment non riescono se elimini l'account predefinito senza specificare un service account gestito dall'utente.

Messaggio di errore

gcloud

ERROR: (gcloud.functions.deploy) ResponseError: status=[400], code=[Ok], message=[Default service account 'test-project-356312@appspot.gserviceaccount.com' doesn't exist. Please recreate this account or specify a different account. Please visit https://cloud.google.com/functions/docs/troubleshooting for in-depth troubleshooting documentation.]

La soluzione

Per risolvere il problema, prova una delle seguenti soluzioni:

L'utente non dispone delle autorizzazioni per il service account di runtime durante il deployment di una funzione

Ogni funzione è associata a un service account che funge da identità quando la funzione accede ad altre risorse. Questo service account di runtime può essere il service account predefinito o un service account gestito dall'utente. Per consentire a Cloud Functions di utilizzare un service account di runtime, il deployer deve disporre dell'autorizzazione iam.serviceAccounts.actAs su quel service account. Questa autorizzazione viene concessa automaticamente a un utente che crea un service account di runtime non predefinito, ma deve essere concessa da un utente con le autorizzazioni corrette agli altri deployer.

A un utente con il ruolo Project Viewer, Cloud Functions Developer o Cloud Functions Admin deve essere assegnata anche l'autorizzazione iam.serviceAccounts.actAs sul service account di runtime.

Messaggio di errore

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

Per il service account predefinito si verifica il seguente errore:

ERROR: (gcloud.functions.deploy) ResponseError: status=[403], code=[Ok], message=[Caller USER is missing permission 'iam.serviceaccounts.actAs' on service account PROJECT_ID@appspot.gserviceaccount.com. Grant the role 'roles/iam.serviceAccountUser' to the caller on the service account PROJECT_ID@appspot.gserviceaccount.com. You can do that by running 'gcloud iam service-accounts add-iam-policy-binding
PROJECT_ID@appspot.gserviceaccount.com --member MEMBER --role roles/iam.serviceAccountUser' where MEMBER has a prefix like 'user:' or 'serviceAccount:'.

Per il service account non predefinito si verifica il seguente errore:

ERROR: (gcloud.functions.deploy) ResponseError: status=[403], code=[Ok], message=[Caller USER is missing permission 'iam.serviceaccounts.actAs' on service account SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com. Grant the role 'roles/iam.serviceAccountUser' to the caller on the service account SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com. You can do that by running 'gcloud iam service-accounts add-iam-policy-binding SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com --member MEMBER --role roles/iam.serviceAccountUser' where MEMBER has a prefix like 'user:' or 'serviceAccount:'.

La soluzione

Assegna all'utente il ruolo roles/iam.serviceAccountUser sul service account predefinito o gestito dall'utente. Questo ruolo include l'autorizzazione iam.serviceAccounts.actAs.

Il service account Service agent Cloud Run Functions non dispone delle autorizzazioni sul bucket del progetto durante il deployment di una funzione

Le funzioni Cloud Run possono essere attivate solo da eventi provenienti da bucket Cloud Storage nello stesso progetto Google Cloud . Inoltre, il service account Service agent Cloud Functions (service-PROJECT_NUMBER@gcf-admin-robot.iam.gserviceaccount.com) deve disporre del ruolo cloudfunctions.serviceAgent sul tuo progetto.

Messaggio di errore

Console

Deployment failure: Insufficient permissions to (re)configure a trigger
(permission denied for bucket BUCKET_ID). Please, give owner permissions
to the editor role of the bucket and try again.

gcloud

ERROR: (gcloud.functions.deploy) OperationError: code=7, message=Insufficient
permissions to (re)configure a trigger (permission denied for bucket BUCKET_ID).
Please, give owner permissions to the editor role of the bucket and try again.

La soluzione

Per risolvere questo errore, reimposta il service account del service agent al ruolo predefinito.

Un utente con il ruolo Project Editor non può rendere pubblica una funzione

Il ruolo Project Editor dispone di ampie autorizzazioni per gestire le risorse all'interno di un progetto, ma non concede intrinsecamente la possibilità di rendere pubbliche le funzioni Cloud Run. Devi concedere l'autorizzazione cloudfunctions.functions.setIamPolicy all'utente o al servizio che esegue il deployment della funzione.

Messaggio di errore

gcloud

 ERROR: (gcloud.functions.add-iam-policy-binding) ResponseError: status=[403], code=[Forbidden], message=[Permission 'cloudfunctions.functions.setIamPolicy' denied on resource 'projects/PROJECT_ID/locations/LOCATION/functions/FUNCTION_NAME (or resource may not exist).]

La soluzione

Per risolvere questo errore, prova una delle seguenti soluzioni:

Il deployment della funzione non riesce quando utilizzi la policy dell'organizzazione Restrizione sulla località delle risorse

Se la tua organizzazione utilizza una policy Restrizione sulla località delle risorse, limiterà il deployment delle funzioni nelle regioni limitate dalla policy. Nella console Google Cloud , la regione limitata non sarà disponibile nel menu a discesa delle regioni durante il deployment di una funzione.

Messaggio di errore

gcloud

  ERROR: (gcloud.functions.deploy) ResponseError: status=[400], code=[Ok], message=[The request has violated one or more Org Policies. Please refer to the respective violations for more information. violations {
    type: "constraints/gcp.resourceLocations"
    subject: "orgpolicy:projects/PROJECT_ID"
    description: "Constraint constraints/gcp.resourceLocations violated for projects/PROJECT_ID attempting GenerateUploadUrlActionV1 with location set to RESTRICTED_LOCATION. See https://cloud.google.com/resource-manager/docs/organization-policy/org-policy-constraints for more information."
  }

La soluzione

Aggiungi o rimuovi località negli elenchi allowed_values o denied_values del vincolo delle località delle risorse per far riuscire il deployment.

Il deployment della funzione non riesce durante l'esecuzione dell'ambito globale della funzione

Questo errore indica che si è verificato un problema con il codice. La pipeline di deployment ha terminato il deployment della funzione, ma l'ultimo passaggio, ovvero l'invio di un controllo di integrità alla funzione, non è riuscito. Questo controllo di integrità ha lo scopo di eseguire l'ambito globale di una funzione, che potrebbe generare un'eccezione, avere un arresto anomalo o un timeout. L'ambito globale è dove in genere carichi le librerie e inizializzi i client.

Messaggio di errore

Console

Deployment failure: Function failed on loading user code. This is likely due to a bug in the user code.

gcloud

ERROR: (gcloud.functions.deploy) OperationError: code=3, message=Function
failed on loading user code. This is likely due to a bug in the user code.

Nei log di Cloud Logging:

  "Function failed on loading user code. This is likely due to a bug in the user code."

La soluzione

Per risolvere il problema, prova una delle seguenti soluzioni:

  • Per un messaggio di errore più dettagliato, esamina i log di build della funzione.

  • Se non è chiaro perché la funzione non è riuscita a eseguire il suo ambito globale, valuta la possibilità di spostare temporaneamente il codice nella chiamata della richiesta, utilizzando l'inizializzazione lazy delle variabili globali. In questo modo puoi aggiungere ulteriori istruzioni di log intorno alle librerie client, che potrebbero andare in timeout durante l'istanziazione (soprattutto se chiamano altri servizi), arrestarsi in modo anomalo o generare eccezioni.

  • Aumenta il timeout della funzione.

  • Il codice sorgente deve contenere una funzione entry point specificata correttamente nel deployment, tramite la console o gcloud.

Un utente con il ruolo Visualizzatore non può eseguire il deployment di una funzione

Gli utenti con il ruolo Project Viewer o Cloud Functions Viewer hanno accesso di sola lettura alle funzioni e ai relativi dettagli e non possono eseguire il deployment di nuove funzioni. La funzionalità Crea funzione non è selezionabile nella consoleGoogle Cloud con il seguente errore:

Messaggio di errore

gcloud

ERROR: (gcloud.functions.deploy) PERMISSION_DENIED: Permission
'cloudfunctions.functions.sourceCodeSet' denied on resource
'projects/PROJECT_ID/locations/LOCATION` (or resource may not exist)

La soluzione

Assegna all'utente il ruolo Cloud Functions Developer.

Autorizzazioni mancanti per il service account di build

Messaggio di errore

Nell'errore di deployment della funzione o nei log di build, potresti visualizzare uno dei seguenti errori:

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-sources-PROJECT_NUMBER-LOCATION/FUNCTION_NAME/version-VERSION_NUMBER/function-source.zip: Access to bucket gcf-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 soluzione

Il service account di build deve disporre dell'autorizzazione di lettura per il bucket di origine e delle autorizzazioni di lettura e scrittura per il repository di deployment degli artefatti. Potresti riscontrare questo errore a causa di una modifica del comportamento predefinito di utilizzo dei service account di Cloud Build, descritta in Modifica del service account Cloud Build.

Per risolvere il problema, utilizza una delle seguenti soluzioni:

Service account di build disattivato

Messaggio di errore

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

La soluzione

Per eseguire il deployment di una funzione, il service account di build deve essere attivato. Potresti riscontrare questo errore a causa di una modifica del comportamento predefinito di utilizzo dei service account di Cloud Build, descritta in Modifica del service account Cloud Build.

Per risolvere il problema, utilizza una delle seguenti soluzioni:

Gestione

Questa sezione elenca i problemi di gestione che potresti riscontrare e fornisce suggerimenti su come risolverli.

Errore di autorizzazione della gestione perché la funzione richiede l'autenticazione

Le funzioni HTTP per cui non è abilitata l'opzione Consenti chiamate non autenticate limitano l'accesso per utenti finali e service account che non dispongono delle autorizzazioni appropriate.

Quando visiti l'URL delle funzioni Cloud Run in un browser, non viene aggiunta automaticamente un'intestazione di autenticazione.

Messaggio di errore

Codice di risposta di errore HTTP: 403 - Non consentito

Corpo della risposta di errore HTTP:

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

La soluzione

Per risolvere questo errore, prova una delle due soluzioni seguenti:

Errore di autorizzazione della gestione a causa della configurazione allow internal traffic only

Le impostazioni in entrata limitano la possibilità di richiamare una funzione HTTP da risorse all'esterno del tuo progetto Google Cloud o del perimetro di servizio dei Controlli di servizio VPC. Quando configuri l'impostazione Consenti solo traffico interno per il networking in entrata, questo messaggio di errore indica che sono consentite solo le richieste provenienti da reti VPC nello stesso progetto o perimetro dei Controlli di servizio VPC.

Messaggio di errore

Codice di risposta di errore HTTP: 404 - Non trovato

Corpo della risposta di errore HTTP:

404 Page not found

La soluzione

Per risolvere questo errore, prova una delle due soluzioni seguenti:

  • Assicurati che la richiesta provenga dal tuo progetto Google Cloud o dal perimetro di servizio dei Controlli di servizio VPC.

  • Modifica le impostazioni di traffico in entrata per consentire tutto il traffico per la funzione.

  • Il codice sorgente delle funzioni Cloud Run può generare un errore 404 a causa di un errore nell'URL, nei metodi HTTP o nella logica della funzione.

La chiamata della funzione non dispone di credenziali di autenticazione valide

Le funzioni configurate con accesso limitato richiedono un token ID. La chiamata della funzione non riesce se utilizzi token di accesso o token di aggiornamento.

Messaggio di errore

Codice di risposta di errore HTTP: 401 - Non autorizzato

Corpo della risposta di errore HTTP:

Your client does not have permission to the requested URL </FUNCTION_NAME>

La soluzione

Per risolvere questo errore, prova una delle due soluzioni seguenti:

  • Assicurati che le richieste includano un'intestazione Authorization: Bearer ID_TOKEN e che il token sia un token ID, non un token di accesso o di aggiornamento. Se generi questo token manualmente con la chiave privata di un service account, devi scambiare il token JWT autofirmato con un token di identità firmato da Google. Per saperne di più, consulta Esegui l'autenticazione per le chiamate.

  • Richiama la funzione HTTP utilizzando le credenziali di autenticazione nell'intestazione della richiesta. Ad esempio, puoi ottenere un token di identità utilizzando gcloud come segue:

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

    Per saperne di più, consulta Autenticazione per le chiamate.

La funzione si interrompe durante l'esecuzione o continua a essere eseguita dopo il completamento del codice

Alcuni runtime di Cloud Run Functions consentono agli utenti di eseguire attività asincrone. Se la tua funzione crea queste attività, deve anche attendere esplicitamente che vengano completate. In caso contrario, la funzione potrebbe interrompersi al momento sbagliato.

Comportamento di errore

La funzione presenta uno dei seguenti comportamenti:

  • La funzione termina mentre le attività asincrone sono ancora in esecuzione, ma prima che sia trascorso il periodo di timeout specificato.
  • L'esecuzione della funzione non termina al completamento di queste attività e continua fino allo scadere del periodo di timeout.

La soluzione

Se la funzione termina in anticipo, assicurati che tutte le attività asincrone della funzione siano completate prima che la funzione esegua una di queste azioni:

  • Restituzione di un valore
  • Risoluzione o rifiuto di un oggetto Promise restituito (solo funzioni Node.js)
  • Generazione di eccezioni non rilevate ed errori
  • Invio di una risposta HTTP
  • Chiamata di una funzione di callback

Se la funzione non viene terminata dopo aver completato le attività asincrone, devi verificare che segnali correttamente a Cloud Run Functions dopo il completamento. In particolare, assicurati di eseguire una delle operazioni elencate nell'elenco precedente non appena la funzione ha terminato le attività asincrone.

Errore di runtime durante l'accesso alle risorse protette dai Controlli di servizio VPC

Per impostazione predefinita, Cloud Run Functions utilizza indirizzi IP pubblici per inviare richieste in uscita ad altri servizi. Le funzioni che non si trovano all'interno del perimetro dei Controlli di servizio VPC potrebbero ricevere risposte HTTP 403 quando tentano di accedere ai servizi Google Cloud protetti da Controlli di servizio VPC, a causa di rifiuti del perimetro di servizio.

Messaggio di errore

Nei log delle risorse controllate, una voce simile alla seguente:

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

Per risolvere questo errore, prova una delle due soluzioni seguenti:

Scalabilità

Questa sezione elenca i problemi di scalabilità e fornisce suggerimenti su come risolverli.

Errori di Cloud Logging relativi agli annullamenti delle richieste in coda in sospeso

Le seguenti condizioni possono essere associate a errori di scalabilità.

  • Un improvviso e notevole aumento del traffico.
  • Tempo di avvio a freddo lungo.
  • Tempi di elaborazione delle richieste lunghi.
  • Percentuale di errori della funzione elevata.
  • Raggiungimento del limite massimo di istanze.
  • Fattori temporanei attribuiti al servizio Cloud Run Functions.

In ciascun caso, Cloud Run Functions potrebbe non fare lo scale up abbastanza rapidamente per gestire il traffico.

Messaggio di errore

 The request was aborted because there was no available instance.

Cloud Run Functions ha i seguenti livelli di gravità:

* `severity=WARNING` ( Response code: 429 ) Cloud Run functions cannot scale due
  to the [`max-instances`](/functions/docs/configuring/max-instances) limit you set
  during configuration.
* `severity=ERROR` ( Response code: 500 ) Cloud Run functions intrinsically
  cannot manage the rate of traffic.

La soluzione

Logging

La sezione seguente è dedicata ai problemi di logging e a come risolverli.

I livelli di gravità delle voci di log sono assenti o errati

Per impostazione predefinita, Cloud Run Functions include il logging di runtime. I log scritti in stdout o stderr vengono visualizzati automaticamente nella consoleGoogle Cloud . Tuttavia, per impostazione predefinita, queste voci di log contengono solo messaggi stringa.

La soluzione

Per includere le gravità dei log, devi inviare una voce di log strutturata.

Gestisci o registra le eccezioni in modo diverso in caso di arresto anomalo

Potresti voler personalizzare la modalità di gestione e logging delle informazioni sugli arresti anomali.

La soluzione

Racchiudi la funzione in un blocco try per personalizzare la gestione delle eccezioni e il logging delle analisi dello stack.

L'aggiunta di un blocco try può comportare un effetto collaterale indesiderato nelle funzioni basate su eventi con la configurazione retry on failure. I nuovi tentativi di invio degli eventi non riusciti potrebbero a loro volta non riuscire.

Esempio

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

Log troppo grandi in Node.js 10+, Python 3.8, Go 1.13 e Java 11

La dimensione massima per una normale voce di log in questi runtime è 105 KiB.

La soluzione

Invia voci di log inferiori a questo limite.

Log mancanti nonostante Cloud Run Functions restituisca errori

Cloud Run Functions trasmette i log delle funzioni Cloud Run a un bucket predefinito. Quando crei un progetto, Cloud Run Functions crea e abilita il bucket predefinito. Se il bucket predefinito viene disabilitato o se i log della funzione Cloud Run sono nel filtro di esclusione, non verranno visualizzati in Esplora log.

La soluzione

Attiva i log predefiniti e assicurati che non sia impostato alcun filtro di esclusione.

I log Cloud Run Functions non vengono visualizzati in Esplora log

Alcune librerie client di Cloud Logging utilizzano un processo asincrono per scrivere le voci di log. Se una funzione si arresta in modo anomalo o termina in altro modo, è possibile che alcune voci di log non siano state ancora scritte e potrebbero essere visualizzate in un secondo momento. È anche possibile che alcuni log vengano persi e non possano essere visualizzati in Esplora log.

La soluzione

Utilizza l'interfaccia della libreria client per fare il flush delle voci di log memorizzate nel buffer prima di uscire dalla funzione o utilizza la libreria per scrivere le voci di log in modo sincrono. Puoi anche scrivere i log in modo sincrono direttamente in stdout o stderr.

I log Cloud Run Functions non vengono visualizzati utilizzando il sink del router dei log

I sink del router dei log instradano le voci di log a varie destinazioni.

Screenshot del Router dei log nella console con l&#39;opzione Visualizza dettagli sink evidenziata

Le impostazioni includono i Filtri di esclusione, che definiscono le voci che possono essere eliminate.

Screenshot della finestra di dialogo Dettagli sink del router dei log nella console che mostra il filtro di esclusione

La soluzione

Rimuovi il filtro di esclusione impostato per resource.type="cloud_functions".

Connessioni al database

Molti errori del database sono associati al superamento dei limiti di connessione o al timeout. Se nei log viene visualizzato un avviso di Cloud SQL, ad esempio Context deadline exceeded, potrebbe essere necessario modificare la configurazione della connessione. Per saperne di più, consulta le best practice di Cloud SQL.

Networking

Questa sezione elenca i problemi di networking e fornisce suggerimenti su come risolverli.

Connettività di rete

Se tutte le richieste in uscita da una funzione Cloud Run non vanno a buon fine anche dopo aver configurato le impostazioni di traffico in uscita, puoi eseguire Connectivity Tests per identificare eventuali problemi di connettività di rete sottostanti. Per saperne di più, consulta Crea ed esegui Connectivity Tests.

Il connettore di accesso VPC serverless non è pronto o non esiste

Se un connettore di accesso VPC serverless non funziona, potrebbe non utilizzare una maschera di subnet /28 dedicata al connettore come richiesto.

Messaggio di errore

VPC connector projects/xxxxx/locations/REGION/connectors/xxxx
is not ready yet or does not exist.

Quando viene eseguito il deployment di Cloud Run Functions con un connettore in stato non valido a causa dell'autorizzazione mancante per il service account Google APIs Service Agent PROJECT_NUMBER@cloudservices.gserviceaccount.com, viene visualizzato il seguente errore:

Messaggio di errore

Failed to prepare VPC connector. Please try again later.

La soluzione

Elenca le tue subnet per verificare se il connettore utilizza una subnet mask /28. Se il connettore non utilizza la subnet mask /28, ricrealo o creane uno nuovo.

Per risolvere il problema, prova una delle seguenti soluzioni:

  • Se ricrei il connettore, non devi rieseguire il deployment di altre funzioni. Potresti riscontrare un'interruzione di rete mentre il connettore viene ricreato.

  • Se crei un nuovo connettore alternativo, riesegui il deployment delle funzioni per utilizzare il nuovo connettore, quindi elimina quello originale. Questo metodo evita l'interruzione della rete.

  • Assicurati che il deployment di Cloud Run Functions e del connettore associato sia eseguito nella stessa regione.

  • Per la configurazione del VPC condiviso:

    • Assicurati che i service account SERVICE_PROJECT_NUMBER@cloudservices.gserviceaccount.com e service-SERVICE_PROJECT_NUMBER@gcp-sa-vpcaccess.iam.gserviceaccount.com utilizzati dal connettore VPC per il provisioning delle risorse nel progetto dispongano di tutte le autorizzazioni richieste. Questi service account devono avere il ruolo roles/compute.networkUser nel progetto host della configurazione VPC condiviso quando il connettore si trova nel progetto di servizio. In caso contrario, è obbligatorio roles/compute.networkAdmin.

    • Se il connettore viene creato nel progetto host, assicurati che il ruolo Serverless VPC Access User sia concesso su Cloud Run functions Service Agent nel progetto host.

    • Se lo stato del connettore mostra l'errore Connector is in a bad state, manual deletion recommended e Google APIs Service Agent non dispone delle autorizzazioni necessarie per eseguire il provisioning delle risorse di calcolo nel progetto del connettore, concedi roles/compute.admin al service account PROJECT_NUMBER@cloudservices.gserviceaccount.com. In alcuni casi, potrebbe essere necessario ricreare il connettore dopo aver aggiornato le autorizzazioni.

Il traffico SMTP verso indirizzi IP di destinazione esterni che utilizzano la porta TCP 25 è bloccato

Per una maggiore sicurezza, Google Cloud blocca le connessioni alla porta di destinazione TCP 25 durante l'invio di email da Cloud Run Functions.

La soluzione

Per sbloccare queste connessioni, scegli una delle seguenti opzioni:

Altro

Questa sezione descrive problemi aggiuntivi che non rientrano in altre categorie e offre soluzioni per ciascuno.

Errore dei Controlli di servizio VPC sul metodo google.storage.buckets.testIamPermissions in Cloud Audit Logs

Quando apri la pagina Dettagli funzione nella consoleGoogle Cloud , Cloud Run Functions verifica se puoi modificare il repository di archiviazione dell'immagine container e accedervi pubblicamente. Per la verifica, Cloud Run Functions invia una richiesta al bucket Container Registry utilizzando il metodo google.storage.buckets.testIamPermissions con il seguente formato: [REGION].artifacts.[PROJECT_ID].appspot.com. L'unica differenza tra i controlli è che uno viene eseguito con l'autenticazione per verificare le autorizzazioni dell'utente a modificare il bucket, mentre l'altro viene eseguito senza autenticazione per verificare se il bucket è accessibile pubblicamente.

Se il perimetro dei Controlli di servizio VPC limita l'API storage.googleapis.com, la console Google Cloud mostra un errore nel metodo google.storage.buckets.testIamPermissions in Cloud Audit Logs.

Messaggio di errore

Per il controllo dell'accesso pubblico senza informazioni di autenticazione, gli audit log Policy di negazione VPC SC mostrano una voce simile alla seguente:

"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": {},
  "requestMetadata": {
    "callerIp": "END_USER_IP"
  },
  "serviceName": "storage.googleapis.com",
  "methodName": "google.storage.buckets.testIamPermissions",
  "resourceName": "projects/PROJECT_NUMBER",
  "metadata": {
    "ingressViolations": [
      {
        "servicePerimeter": "accessPolicies/ACCESS_POLICY_ID/servicePerimeters/VPC_SC_PERIMETER_NAME",
        "targetResource": "projects/PROJECT_NUMBER"
      }
    ],
    "resourceNames": [
      "projects/_/buckets/REGION.artifacts.PROJECT_ID.appspot.com"
    ],
    "securityPolicyInfo": {
      "servicePerimeterName": "accessPolicies/ACCESS_POLICY_ID/servicePerimeters/VPC_SC_PERIMETER_NAME",
      "organizationId": "ORG_ID"
    },
    "violationReason": "NO_MATCHING_ACCESS_LEVEL",
  ...

Per il controllo dell'accesso pubblico con informazioni di autenticazione, gli audit log Policy di negazione VPC SC mostrano una voce che consente all'utente di modificare le impostazioni del bucket in modo simile al seguente esempio:

"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": "END_USER_EMAIL"
  },
  "requestMetadata": {
    "callerIp": "END_USER_IP",
    "requestAttributes": {},
    "destinationAttributes": {}
  },
  "serviceName": "storage.googleapis.com",
  "methodName": "google.storage.buckets.testIamPermissions",
  "resourceName": "projects/PROJECT_NUMBER",
  "metadata": {
    "ingressViolations": [
      {
        "servicePerimeter": "accessPolicies/ACCESS_POLICY_ID/servicePerimeters/VPC_SC_PERIMETER_NAME",
        "targetResource": "projects/PROJECT_NUMBER"
      }
    ],
    "resourceNames": [
      "projects/_/buckets/REGION.artifacts.PROJECT_ID.appspot.com"
    ],
    "securityPolicyInfo": {
      "servicePerimeterName": "accessPolicies/ACCESS_POLICY_ID/servicePerimeters/VPC_SC_PERIMETER_NAME",
      "organizationId": "ORG_ID"
    },
    "violationReason": "NO_MATCHING_ACCESS_LEVEL",
  ...

La soluzione

Se il bucket Container Registry non è accessibile pubblicamente, puoi ignorare gli errori dei Controlli di servizio VPC.

In alternativa, puoi aggiungere una regola in entrata dei Controlli di servizio VPC per consentire il metodo google.storage.buckets.testIamPermissions, come mostrato nell'esempio seguente:

ingress_from {
  sources {
    access_level: "*"
  }
  identity_type: ANY_IDENTITY
}
ingress_to {
  operations {
    service_name: "storage.googleapis.com"
    method_selectors {
      method: "google.storage.buckets.testIamPermissions"
    }
  }
  resources: "projects/PROJECT_NUMBER"
}

Dove possibile, puoi perfezionare ulteriormente la regola in entrata definendo il livello di accesso con gli indirizzi IP utente.