Deployment delle versioni dell'app in App Engine

ID regione

REGION_ID è un codice abbreviato assegnato da Google in base all'area geografica selezionata al momento della creazione dell'app. Il codice non corrisponde a un paese o a una provincia, anche se alcuni ID regione possono sembrare simili ai codici paese e provincia di uso comune. Per le app create dopo febbraio 2020, REGION_ID.r è incluso negli URL di App Engine. Per le app esistenti create prima di questa data, l'ID regione è facoltativo nell'URL.

Scopri di più sugli ID regione.

Utilizza l'API Admin di Google App Engine per eseguire il deployment in modo programmatico delle versioni delle tue app nell'applicazione App Engine tramite richieste POST HTTP.

Prima di iniziare

Prima di poter inviare la richiesta di deployment HTTP, devi essere in grado di autorizzare la richiesta HTTP, accedere ai file temporanei della tua app e disporre di un file di configurazione in formato JSON. Consulta i seguenti argomenti che ti aiutano a soddisfare questi prerequisiti:

Deployment dell'app in App Engine con l'API Admin

Per eseguire il deployment di una versione dell'app nell'applicazione in App Engine:

  1. Autorizza le tue richieste HTTP, ad esempio ottieni un token di accesso.

    L'autorizzazione dell'accesso all'API Admin può essere eseguita con flussi OAuth diversi, a seconda delle esigenze dell'app API. Per ulteriori informazioni, consulta la sezione Accesso all'API.

  2. Invia una richiesta HTTP POST utilizzando il token di accesso e l'API Admin per eseguire il deployment della versione nell'applicazione App Engine:

    Per eseguire il deployment di una versione, invia una richiesta HTTP POST che specifica il file di configurazione JSON e definisce una Version risorsa del servizio di destinazione e dell'applicazione App Engine.

    Ad esempio, puoi utilizzare la seguente richiesta POST HTTP per eseguire il deployment della versione specificata nel file di configurazione JSON nel servizio default dell'applicazione MY_PROJECT_ID:

    POST https://appengine.googleapis.com/v1/apps/[MY_PROJECT_ID]/services/default/versions app.json
    

    Esempio di comando cURL:

    curl -X POST -T "app.json" -H "Content-Type: application/json" -H "Authorization: Bearer [MY_ACCESS_TOKEN]" https://appengine.googleapis.com/v1/apps/[MY_PROJECT_ID]/services/default/versions
    

    Dove:

    • [MY_ACCESS_TOKEN] è il token di accesso che hai ottenuto per autorizzare le richieste HTTP.
    • [MY_PROJECT_ID] è l'ID del progetto in cui vuoi eseguire il deployment della versione.

    Esempio di risposta:

    {
      "metadata": {
        "@type": "type.googleapis.com/google.appengine.v1.OperationMetadataV1",
        "insertTime": "2015-05-29T17:12:44.679Z",
        "method": "google.appengine.v1.Versions.CreateVersion",
        "target": "apps/[MY_PROJECT_ID]/services/default/versions/v1",
        "user": "me@example.com"
      }
      "name": "apps/[MY_PROJECT_ID]/operations/89729825-ef1f-4ffa-b3e3-e2c25eb66a85"
    }
    
  3. Verifica che sia stato eseguito il deployment della versione nell'applicazione App Engine:

    1. Visualizza lo stato dell'operazione di deployment effettiva:

      La richiesta HTTP POST che hai utilizzato nel passaggio precedente ha restituito il nome dell'operazione nel campo name, che utilizzi con il metodo GET della raccolta apps.operations per verificare lo stato dell'operazione di deployment.

      Ad esempio, se il campo name della risposta è:

      "name": "apps/[MY_PROJECT_ID]/operations/89729825-ef1f-4ffa-b3e3-e2c25eb66a85"
      

      Quindi, invia la seguente richiesta HTTP GET:

      GET https://appengine.googleapis.com/v1/apps/[MY_PROJECT_ID]/operations/89729825-ef1f-4ffa-b3e3-e2c25eb66a85
      

      Esempio di comando cURL:

      curl -H "Authorization: Bearer [MY_ACCESS_TOKEN]" https://appengine.googleapis.com/v1/apps/[MY_PROJECT_ID]/operations/89729825-ef1f-4ffa-b3e3-e2c25eb66a85
      

      Dove [MY_ACCESS_TOKEN] è il tuo token di accesso e [MY_PROJECT_ID] è l'ID del progetto in cui hai eseguito il deployment della versione.

      Esempio di risposta:

      {
        "done": true,
        "metadata": {
          "@type": "type.googleapis.com/google.appengine.v1.OperationMetadataV1",
          "endTime": "2015-05-29T17:13:20.424Z",
          "insertTime": "2015-05-29T17:12:44.679Z",
          "method": "google.appengine.v1.Versions.CreateVersion",
          "target": "apps/[MY_PROJECT_ID]/services/default/versions/v1",
          "user": "me@example.com"
        },
        "name": "apps/[MY_PROJECT_ID]/operations/89729825-ef1f-4ffa-b3e3-e2c25eb66a85",
        "response": {
          "@type": "type.googleapis.com/google.appengine.v1.Version",
          "creationTime": "2015-05-29T17:12:46.000Z",
          "deployer": "me@example.com",
          "id": "v1",
          "name": "apps/[MY_PROJECT_ID]/services/default/versions/v1",
          "runtime": "python27",
          "servingStatus": "SERVING",
          "threadsafe": true,
        }
      }
      

      Per saperne di più sul polling delle operazioni a lunga esecuzione, consulta la pagina di riferimento RPC google.longrunning.

    2. Verifica che la versione sia stata creata nella tua applicazione App Engine:

      Per visualizzare i dettagli della versione, utilizza il metodo GET della raccolta apps.services.versions. Devi specificare la versione di cui hai eseguito il deployment nella richiesta HTTP GET, ad esempio:

      GET https://appengine.googleapis.com/v1/apps/[MY_PROJECT_ID]/services/default/versions/v1
      

      Esempio di comando cURL:

      curl -H "Authorization: Bearer [MY_ACCESS_TOKEN]" https://appengine.googleapis.com/v1/apps/[MY_PROJECT_ID]/services/default/versions/v1
      

      Dove [MY_ACCESS_TOKEN] è il tuo token di accesso e [MY_PROJECT_ID] è l'ID del progetto in cui hai eseguito il deployment della versione.

      Esempio di risposta:

      {
        "creationTime": "2015-05-29T17:12:46.000Z",
        "deployer": "me@example.com",
        "deployment": {
          "files": {
            "my-python-app.py": {
              "sha1Sum": "7cffbdaa9fcfa46e5e58269bfe336dd815de0566",
              "sourceUrl": "https://storage.googleapis.com/[YOUR_BUCKET_ID]/my-application/logo.jpg",
            },
            "logo.jpg": {
              "sha1Sum": "13f7ea1e24f7cd2de5c66660525f2b509da37c14",
              "sourceUrl": "https://storage.googleapis.com/[YOUR_BUCKET_ID]/my-application/my-python-app.py"
            }
          }
        },
        "handlers": [
          {
            "authFailAction": "AUTH_FAIL_ACTION_REDIRECT",
            "login": "LOGIN_OPTIONAL",
            "script": {
              "scriptPath": "my-python-app.application",
            },
            "securityLevel": "SECURE_OPTIONAL",
            "urlRegex": "/.*"
          }
        ]
        "id": "v1",
        "name": "apps/[MY_PROJECT_ID]/services/default/versions/v1",
        "runtime": "python27",
        "servingStatus": "SERVING",
        "threadsafe": true,
      }
      
      GET https://appengine.googleapis.com/v1/apps/[MY_PROJECT_ID]/services/default/versions/v1?view=FULL
      
  4. (Facoltativo) Per avviare il browser e visualizzare l'app in https://VERSION_ID-dot-default-dot-PROJECT_ID.REGION_ID.r.appspot.com, puoi eseguire il seguente comando:

    gcloud app browse -v [MY_VERSION_ID]
    
  5. Configura la quantità di traffico che deve ricevere la versione di cui hai appena eseguito il deployment.

    Per impostazione predefinita, la versione iniziale di cui esegui il deployment nell'applicazione App Engine viene configurata automaticamente per ricevere il 100% del traffico. Tuttavia, tutte le versioni successive di cui esegui il deployment nella stessa applicazione App Engine devono essere configurate manualmente, altrimenti non riceveranno traffico.

    Per maggiori dettagli su come configurare il traffico per le tue versioni, consulta Migrazione e suddivisione del traffico.

Deployment di versioni e servizi aggiuntivi

I passaggi per il deployment di versioni successive dell'app, inclusa la creazione di servizi aggiuntivi, sono quasi identici a quelli di deployment illustrati in questa attività. Se desideri sostituire la versione corrente in esecuzione nella tua applicazione App Engine o se vuoi aggiungere altri servizi, puoi eseguire il deployment delle nuove versioni dopo aver apportato alcune modifiche ai file di configurazione.

Vedi gli esempi seguenti per come eseguire il deployment di versioni aggiuntive della tua applicazione App Engine. Ricorda che, dopo il deployment delle versioni, devi configurare il relativo traffico.

Esempio: deployment di versioni aggiuntive

Se in App Engine è in esecuzione una versione precedente o errata, puoi sostituirla eseguendo il deployment di un'altra versione nell'applicazione App Engine e quindi indirizzando il traffico a quella versione. Ad esempio, dopo aver modificato il codice sorgente dell'app, puoi modificare il valore di version nel file app.yaml, creare un nuovo file app.json, quindi eseguire il deployment di una versione v2 della tua app con un'altra richiesta POST HTTP:

Esempio di file app.yaml aggiornato:

  service: default
  version: v2
  runtime: python27
  threadsafe: true
  handlers:
  - url: /.*
    script: my-python-app.application

Esempio di richiesta POST HTTP per la versione v2:

  POST https://appengine.googleapis.com/v1/apps/[MY_PROJECT_ID]/services/default/versions app.json

Dopo aver seguito la procedura per assicurarti che il deployment della versione sia stato eseguito correttamente, puoi inviare una richiesta HTTP PATCH per instradare tutto il traffico alla nuova versione, ad esempio:

  PATCH https://appengine.googleapis.com/v1/apps/[MY_PROJECT_ID]/services/default/?updateMask=split {"split": { "allocations": { "v2": "1" } } }

Per informazioni sul routing del traffico, consulta Migrazione e suddivisione del traffico.

Esempio: deployment di più servizi

Se hai una versione v1 in esecuzione nell'applicazione App Engine e vuoi eseguire il deployment di un servizio aggiuntivo, ad esempio backend, devi eseguire gli stessi passaggi di deployment.

Ad esempio, per eseguire il deployment della versione v1 che crea il servizio backend:

  1. Crea il nuovo codice e i nuovi file sorgente per il servizio backend.
  2. Conserva in un temporaneo le risorse dell'applicazione per il tuo servizio backend in un bucket Cloud Storage.
  3. Crea il file di configurazione backend/app.json.
  4. Utilizza le richieste HTTP per eseguire il deployment della versione v1 del servizio backend nella tua applicazione App Engine:

    Esempio di richiesta POST HTTP:

    POST https://appengine.googleapis.com/v1/apps/[MY_PROJECT_ID]/services/backend/versions backend/app.json
    

    Esempio di richiesta HTTP GET per verificare che sia stata creata la versione v1 nel servizio backend:

    GET https://appengine.googleapis.com/v1/apps/[MY_PROJECT_ID]/services
    

    Esempio di risposta:

    {
      "services": [
        {
          "name": "apps/[MY_PROJECT_ID]/services/default",
          "id": "default",
          "split": {
            "allocations": {
              "v2": 1
            }
          }
        },
        {
          "name": "apps/[MY_PROJECT_ID]/services/backend",
          "id": "backend",
          "split": {
            "allocations": {
              "v1": 1
            }
          }
        }
      ]
    }
    

Passaggi successivi