Impostare il timeout della richiesta per i servizi
Mantieni tutto organizzato con le raccolte
Salva e classifica i contenuti in base alle tue preferenze.
Se un servizio viene eseguito troppo a lungo, il sistema adotta misure per terminarlo o limitarlo.
Per i servizi Cloud Run, l'impostazione del timeout della richiesta specifica il
tempo entro il quale i servizi di cui è stato eseguito il deployment su
Cloud Run devono restituire una risposta. Se non viene restituita una risposta entro il tempo specificato, la
richiesta termina e viene restituito un errore 504. Tieni presente che l'istanza container che
ha gestito la richiesta non viene terminata. Il container o il codice potrebbero continuare
a elaborare la richiesta terminata e potrebbero elaborare altre richieste. Per
evitare questo problema, previeni i timeout nel tuo servizio con le seguenti tecniche:
Imposta un timeout superiore al tempo di esecuzione previsto.
Tieni traccia del tempo rimanente durante l'esecuzione. Quindi esegui la pulizia e
torna in anticipo.
Periodo di timeout
Il timeout è impostato per impostazione predefinita su 5 minuti
(300 secondi) e può essere esteso fino a
60 minuti
(3600 secondi).
Puoi modificare questa impostazione quando esegui il deployment di un'immagine container o aggiornando
la configurazione del servizio.
Oltre a modificare il timeout della richiesta Cloud Run, devi anche
controllare il framework del linguaggio per verificare se ha un'impostazione
di timeout della richiesta che devi aggiornare. Alcuni client del servizio Cloud Run
potrebbero anche imporre un timeout più restrittivo.
Ruoli obbligatori
Per ottenere le autorizzazioni necessarie per configurare ed eseguire il deployment dei servizi Cloud Run, chiedi all'amministratore di concederti i seguenti ruoli IAM:
Se esegui il deployment di un servizio o di una funzione dal codice sorgente, devi disporre anche di ruoli aggiuntivi concessi al tuo progetto e al account di servizio Cloud Build.
Impostazione e aggiornamento del timeout della richiesta
Qualsiasi modifica alla configurazione comporta la
creazione di una nuova revisione. Anche le revisioni successive riceveranno automaticamente
questa impostazione di configurazione, a meno che tu non apporti aggiornamenti espliciti per modificarla.
Seleziona Servizi dal menu e fai clic su Esegui il deployment del contenitore per
configurare un nuovo servizio.
Se stai configurando un servizio esistente, fai clic sul
servizio, quindi su Modifica ed esegui il deployment della nuova revisione.
Se stai configurando un nuovo servizio, compila la pagina iniziale delle impostazioni del servizio, quindi fai clic su Container, volumi, networking, sicurezza per espandere la pagina di configurazione del servizio.
Fai clic sulla scheda Contenitore.
Nel campo Timeout richiesta, inserisci il valore di timeout che vuoi utilizzare in secondi. Utilizza valori compresi tra 1 e 3600 secondi o tra 1 e 60 minuti.
TIMEOUT: il tempo entro il quale deve essere restituita una risposta, utilizzando un valore intero o un valore di durata assoluta, ad esempio 1m20s, ovvero 1 minuto e 20 secondi. Se
utilizzi un valore intero, l'unità è considerata secondi. Il valore che
specifichi deve essere inferiore a 60 minuti.
Puoi anche impostare il timeout della richiesta durante
il deployment utilizzando il comando:
gcloudrundeploy--imageIMAGE_URL--timeout=TIMEOUT
Sostituisci quanto segue:
IMAGE_URL: un riferimento all'immagine container, ad
esempio us-docker.pkg.dev/cloudrun/container/hello:latest. Se utilizzi Artifact Registry,
il repositoryREPO_NAME deve
essere già stato creato. L'URL segue il formato LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG
.
TIMEOUT: il tempo entro il quale deve essere restituita una risposta, utilizzando un valore intero o un valore di durata, ad esempio 1m20s, che corrisponde a 1 minuto e 20 secondi. Se utilizzi un valore intero, l'unità
viene considerata secondi. Il valore specificato deve essere inferiore a
60 minuti.
YAML
Se stai creando un nuovo servizio, salta questo passaggio.
Se stai aggiornando un servizio esistente, scarica la relativa configurazione YAML:
IMAGE_URL: un riferimento all'immagine container, ad
esempio us-docker.pkg.dev/cloudrun/container/hello:latest. Se utilizzi Artifact Registry,
il repositoryREPO_NAME deve
essere già stato creato. L'URL segue il formato LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG
.
VALUE: il timeout scelto, in secondi.
Crea o aggiorna il servizio utilizzando il seguente comando:
gcloudrunservicesreplaceservice.yaml
Terraform
Per scoprire come applicare o rimuovere una configurazione Terraform, consulta Comandi Terraform di base.
resource"google_cloud_run_v2_service""default"{name="cloudrun-service-request-timeout"location="us-central1"deletion_protection=false # set to "true" in productiontemplate{containers{image="us-docker.pkg.dev/cloudrun/container/hello"} # Timeouttimeout="300s"}}
Sostituisci 300s con il timeout della richiesta desiderato per il tuo servizio.
Visualizzare le impostazioni di timeout della richiesta
Per visualizzare le impostazioni correnti del timeout della richiesta per il tuo servizio Cloud Run:
[[["Facile da capire","easyToUnderstand","thumb-up"],["Il problema è stato risolto","solvedMyProblem","thumb-up"],["Altra","otherUp","thumb-up"]],[["Difficile da capire","hardToUnderstand","thumb-down"],["Informazioni o codice di esempio errati","incorrectInformationOrSampleCode","thumb-down"],["Mancano le informazioni o gli esempi di cui ho bisogno","missingTheInformationSamplesINeed","thumb-down"],["Problema di traduzione","translationIssue","thumb-down"],["Altra","otherDown","thumb-down"]],["Ultimo aggiornamento 2025-09-04 UTC."],[],[],null,["# Set request timeout for services\n\nIf a service runs for too long, the system takes steps to terminate or throttle\nit.\n\nFor Cloud Run services, the request timeout setting specifies the\ntime within which a response must be returned by services deployed to\nCloud Run. If a response isn't returned within the time specified, the\nrequest ends and an error 504 is returned. Note that the container instance that\nserved the request is not terminated. The container or code might keep\nprocessing the terminated request and might be processing other requests. To\navoid this, prevent timeouts in your service with the following techniques:\n\n- Set a timeout higher than your expected execution time.\n- Track the amount of time left during execution. Then perform cleanup and return early.\n\nTimeout period\n--------------\n\nThe timeout is set by default to 5 minutes\n(300 seconds) and can be extended up to\n60 minutes\n(3600 seconds).\n\nWhen triggering your service from [Eventarc events](/run/docs/triggering/trigger-with-events),\n[Pub/Sub push subscriptions](/run/docs/triggering/pubsub-triggers)\nor [Cloud Scheduler](/run/docs/triggering/using-scheduler), the timeout\nof these services apply.\n| **Important:** For a timeout longer than 15 minutes, Google recommends implementing retries and making sure the service is tolerant to clients re-connecting in case the connection is lost (either by ensuring requests are idempotent, or by designing request handlers in such a way that they can resume from the point where they left off). The longer the timeout is, the more likely the connection can be lost due to failures on the client side or the Cloud Run side. When a client re-connects, a new request is initiated and the client isn't guaranteed to connect to the same instance of the service.\n\nYou can change this setting when you deploy a container image or by updating\nthe service configuration.\n\nIn addition to changing the Cloud Run request timeout, you should also\ncheck your language framework to see whether it has its own request timeout\nsetting that you must also update. Some clients of the Cloud Run\nservice might also impose a more restrictive timeout.\n\nRequired roles\n--------------\n\n\nTo get the permissions that\nyou need to configure and deploy Cloud Run services,\n\nask your administrator to grant you the\nfollowing IAM roles:\n\n- [Cloud Run Developer](/iam/docs/roles-permissions/run#run.developer) (`roles/run.developer`) on the Cloud Run service\n- [Service Account User](/iam/docs/roles-permissions/iam#iam.serviceAccountUser) (`roles/iam.serviceAccountUser`) on the service identity\n\n\nIf you are deploying a [service](/run/docs/deploying-source-code#required_roles)\nor [function](/run/docs/deploy-functions#required-roles) from source code, you\nmust also have additional roles granted to you on your project and\nCloud Build service account.\n\nFor a list of IAM roles and permissions that are associated with\nCloud Run, see\n[Cloud Run IAM roles](/run/docs/reference/iam/roles)\nand [Cloud Run IAM permissions](/run/docs/reference/iam/permissions).\nIf your Cloud Run service interfaces with\nGoogle Cloud APIs, such as Cloud Client Libraries, see the\n[service identity configuration guide](/run/docs/configuring/services/service-identity).\nFor more information about granting roles, see\n[deployment permissions](/run/docs/reference/iam/roles#additional-configuration)\nand [manage access](/iam/docs/granting-changing-revoking-access).\n\nSetting and updating request timeout\n------------------------------------\n\nAny configuration change leads to the\ncreation of a new revision. Subsequent revisions will also automatically get\nthis configuration setting unless you make explicit updates to change it.\n\nYou can set request timeout using the Google Cloud console, the gcloud\ncommand line, or a YAML file when you [create a new service](/run/docs/deploying#service) or\n[deploy a new revision](/run/docs/deploying#revision). \n\n### Console\n\n\n1. In the Google Cloud console, go to Cloud Run:\n\n [Go to Cloud Run](https://console.cloud.google.com/run)\n2. Select **Services** from the menu, and click **Deploy container** to\n configure a new service.\n If you are configuring an existing service, click the\n service, then click **Edit and deploy new revision**.\n\n3. If you are configuring a new service, fill out the initial service\n settings page, then click **Container(s), Volumes, Networking, Security** to expand the\n service configuration page.\n\n4. Click the **Container** tab.\n\n - In the **Request timeout** field, enter the timeout value that you want to use in seconds. Use values ranging from `1` to `3600` seconds, or from 1 to `60` minutes.\n5. Click **Create** or **Deploy**.\n\n### gcloud\n\nYou can [update the request timeout](/sdk/gcloud/reference/run/services/update)\nfor a given revision at any time by using the following command: \n\n```bash\ngcloud run services update SERVICE --timeout=TIMEOUT\n```\n\nReplace the following:\n\n- \u003cvar translate=\"no\"\u003eSERVICE\u003c/var\u003e: the name of your service.\n- \u003cvar translate=\"no\"\u003eTIMEOUT\u003c/var\u003e: the time within which a response must be\n returned, using an integer value or an\n [absolute duration value](/sdk/gcloud/reference/topic/datetimes)---for\n example `1m20s` which is 1 minute, 20 seconds. If you\n use an integer value, the unit is assumed to be seconds. The value you\n specify must be less than 60 minutes.\n\n | **Note:** When you update your service with the new timeout value, a new revision is created.\n\nYou can also set the request timeout during\n[deployment](/sdk/gcloud/reference/run/deploy) using the command: \n\n```bash\ngcloud run deploy --image IMAGE_URL --timeout=TIMEOUT\n```\n\nReplace the following:\n\n- \u003cvar translate=\"no\"\u003eIMAGE_URL\u003c/var\u003e: a reference to the container image, for example, `us-docker.pkg.dev/cloudrun/container/hello:latest`. If you use Artifact Registry, the [repository](/artifact-registry/docs/repositories/create-repos#docker) \u003cvar translate=\"no\"\u003eREPO_NAME\u003c/var\u003e must already be created. The URL follows the format of \u003cvar translate=\"no\"\u003eLOCATION\u003c/var\u003e`-docker.pkg.dev/`\u003cvar translate=\"no\"\u003ePROJECT_ID\u003c/var\u003e`/`\u003cvar translate=\"no\"\u003eREPO_NAME\u003c/var\u003e`/`\u003cvar translate=\"no\"\u003ePATH\u003c/var\u003e`:`\u003cvar translate=\"no\"\u003eTAG\u003c/var\u003e .\n- \u003cvar translate=\"no\"\u003eTIMEOUT\u003c/var\u003e: the time within which a response must be returned, using an integer value or a duration value---for example, `1m20s` which is 1 minute, 20 seconds. If you use an integer value, the unit is assumed to be seconds. The value you specify must be less than 60 minutes.\n\n### YAML\n\n1. If you are creating a new service, skip this step.\n If you are updating an existing service, download its [YAML configuration](/run/docs/reference/yaml/v1):\n\n ```bash\n gcloud run services describe SERVICE --format export \u003e service.yaml\n ```\n2. Update the `timeoutSeconds` attribute:\n\n ```yaml\n apiVersion: serving.knative.dev/v1\n kind: Service\n metadata:\n name: SERVICE\n spec:\n template:\n spec:\n containers:\n - image: IMAGE\n timeoutSeconds: VALUE\n ```\n\n Replace the following:\n - \u003cvar translate=\"no\"\u003eSERVICE\u003c/var\u003e: the name of your Cloud Run service.\n - \u003cvar translate=\"no\"\u003eIMAGE_URL\u003c/var\u003e: a reference to the container image, for example, `us-docker.pkg.dev/cloudrun/container/hello:latest`. If you use Artifact Registry, the [repository](/artifact-registry/docs/repositories/create-repos#docker) \u003cvar translate=\"no\"\u003eREPO_NAME\u003c/var\u003e must already be created. The URL follows the format of \u003cvar translate=\"no\"\u003eLOCATION\u003c/var\u003e`-docker.pkg.dev/`\u003cvar translate=\"no\"\u003ePROJECT_ID\u003c/var\u003e`/`\u003cvar translate=\"no\"\u003eREPO_NAME\u003c/var\u003e`/`\u003cvar translate=\"no\"\u003ePATH\u003c/var\u003e`:`\u003cvar translate=\"no\"\u003eTAG\u003c/var\u003e .\n - \u003cvar translate=\"no\"\u003eVALUE\u003c/var\u003e: the chosen timeout, in seconds.\n3. Create or update the service using the following command:\n\n ```bash\n gcloud run services replace service.yaml\n ```\n\n### Terraform\n\n\nTo learn how to apply or remove a Terraform configuration, see\n[Basic Terraform commands](/docs/terraform/basic-commands).\nAdd the following to a [`google_cloud_run_v2_service`](https://registry.terraform.io/providers/hashicorp/google/latest/docs/resources/cloud_run_v2_service) resource in your Terraform configuration: \n\n\u003cbr /\u003e\n\n resource \"google_cloud_run_v2_service\" \"default\" {\n name = \"cloudrun-service-request-timeout\"\n location = \"us-central1\"\n\n deletion_protection = false # set to \"true\" in production\n\n template {\n containers {\n image = \"us-docker.pkg.dev/cloudrun/container/hello\"\n }\n # Timeout\n timeout = \"300s\"\n }\n }\n\nReplace `300s` with your service's desired request timeout.\n\nView request timeout settings\n-----------------------------\n\nTo view the current request timeout settings for your\nCloud Run service: \n\n### Console\n\n1. In the Google Cloud console, go to Cloud Run:\n\n [Go to Cloud Run](https://console.cloud.google.com/run)\n2. Click the service you are interested in to open the **Service details**\n page.\n\n3. Click the **Revisions** tab.\n\n4. In the details panel at the right, the request timeout setting\n is listed under the **Container** tab.\n\n### gcloud\n\n1. Use the following command:\n\n ```bash\n gcloud run services describe SERVICE\n ```\n2. Locate the request timeout setting in the returned\n configuration."]]