Deployment dell'app Bookshelf Python utilizzando Cloud Deployment Manager

Questo tutorial mostra come eseguire il deployment dell'app di esempio Python Bookshelf utilizzando Cloud Deployment Manager.

Deployment Manager ti consente di creare leCloud de Confiance by S3NS risorse necessarie per un deployment in un unico passaggio, tramite un processo dichiarativo e ripetibile. Con Deployment Manager puoi aggiornare i tuoi deployment, monitorare le modifiche nel tempo, creare modelli utilizzando Jinja o Python e parametrizzare i modelli in modo che deployment simili condividano un modello.

Obiettivi

  • Clona e configura l'app di esempio Bookshelf.
  • Crea configurazioni e modelli di Deployment Manager.
  • Crea deployment Deployment Manager.
  • Esegui il deployment dell'app di esempio Bookshelf utilizzando Deployment Manager.

Costi

In questo documento vengono utilizzati i seguenti componenti fatturabili di Cloud de Confiance by S3NS:

Al termine delle attività descritte in questo documento, puoi evitare l'addebito di ulteriori costi eliminando le risorse che hai creato. Per saperne di più, consulta Esegui la pulizia.

Prima di iniziare

  1. In the Cloud de Confiance console, on the project selector page, select or create a Cloud de Confiance project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  2. Verify that billing is enabled for your Cloud de Confiance project.

  3. Enable the Datastore API, Cloud Storage API, Pub/Sub API APIs, if any are not already enabled.

    Roles required to enable APIs

    To enable APIs, you need the serviceusage.services.enable permission. If you created the project, then you likely already have this permission through the Owner role (roles/owner). Otherwise, you can get this permission through the Service Usage Admin role (roles/serviceusage.serviceUsageAdmin). Learn how to grant roles.

    Enable the APIs

  4. Install the Google Cloud CLI.

  5. Configure the gcloud CLI to use your federated identity.

    For more information, see Sign in to the gcloud CLI with your federated identity.

  6. To initialize the gcloud CLI, run the following command:

    gcloud init
  7. Installa Python, pip e virtualenv sul tuo sistema. Per istruzioni, vedi Configurazione di un ambiente di sviluppo Python per Cloud de Confiance by S3NS.

Creazione di un bucket Cloud Storage

Le istruzioni riportate di seguito descrivono in dettaglio come creare un bucket Cloud Storage. I bucket sono i container di base di Cloud Storage in cui vengono archiviati i dati.

  1. Nella finestra del terminale, crea un bucket Cloud Storage, dove YOUR_BUCKET_NAME rappresenta il nome del bucket:

    gcloud storage buckets create gs://YOUR_BUCKET_NAME
  2. Per visualizzare le immagini caricate nell'app Bookshelf, imposta il criterio Identity and Access Management del bucket in modo da concedere il ruolo legacyObjectReader a allUsers:

    gcloud storage buckets add-iam-policy-binding gs://YOUR_BUCKET_NAME
    --member=allUsers --role=roles/storage.legacyObjectReader

Clonazione dell'app di esempio

L'app di esempio è disponibile su GitHub all'indirizzo GoogleCloudPlatform/getting-started-python.

  1. Clona il repository:

    git clone https://github.com/GoogleCloudPlatform/getting-started-python.git -b steps
    
  2. Vai alla directory di esempio:

    cd getting-started-python/7-gce
    

Configurazione dell'applicazione

  1. Apri config.py per la modifica.

    • Imposta il valore di PROJECT_ID sull'ID progetto.

    • Imposta il valore CLOUD_STORAGE_BUCKET sul nome del tuo bucket Cloud Storage.

  2. Salva e chiudi config.py.

Esecuzione dell'applicazione nel computer locale

  1. Crea un ambiente Python isolato e installa le dipendenze:

    Linux/macOS

    virtualenv -p python3 env
    source env/bin/activate
    pip install -r requirements.txt
    

    Windows

    virtualenv -p python3 env
    env\scripts\activate
    pip install -r requirements.txt
    

  2. Esegui l'applicazione:

    python main.py
    
  3. Nel browser, inserisci il seguente indirizzo:

    http://localhost:8080

Per arrestare il server web locale premi CTRL+C. Se vuoi uscire dall'ambiente virtuale, digita deactivate.

Deployment dell'app di esempio

Esegui il push del codice in un repository

Puoi inserire il codice in un'istanza Compute Engine in esecuzione in diversi modi. Un modo è utilizzare Cloud Source Repositories. Ogni progetto include un repository Git disponibile per le istanze Compute Engine. Le istanze eseguono quindi il pull dell'ultima versione del codice dell'app durante l'avvio. L'utilizzo di un repository Git è conveniente perché l'aggiornamento dell'app non richiede la configurazione di nuove immagini o istanze; è sufficiente riavviare un'istanza esistente o crearne una.

  1. La prima volta che utilizzi Git, usa git config --global per configurare la tua identità.

  2. Nella console Cloud de Confiance , crea un repository:

    Crea repository

  3. Quindi, esegui il push del codice dell'app nel repository del progetto, dove [YOUR_PROJECT_ID] è l'ID progetto e [YOUR_REPO] è il nome del repository:

    git commit -am "Updating configuration"
    git config credential.helper gcloud.sh
    git remote add cloud https://source.developers.google.com/p/[YOUR_PROJECT_ID]/r/[YOUR_REPO]
    git push cloud master
    

Crea il deployment

Dopo aver eseguito il commit della configurazione e caricato il codice in Cloud Source Repositories, puoi utilizzare Deployment Manager per creare il deployment:

  1. Vai alla directory deployment_manager:

    cd getting-started-python/7-gce/gce/deployment_manager
    
  2. Crea il deployment:

    gcloud deployment-manager deployments create my-deployment --config config.yaml
    
  3. Visualizza un elenco di tutti i deployment:

    gcloud deployment-manager deployments list
    
  4. Visualizza una descrizione del deployment e delle risorse che ha creato:

    gcloud deployment-manager deployments describe my-deployment
    

Visualizzare l'app

Dopo aver creato la regola di forwarding, possono trascorrere alcuni minuti prima che la configurazione venga propagata e che il traffico venga indirizzato alle tue istanze.

  1. Per controllare l'avanzamento:

    gcloud compute backend-services get-health bookshelf-my-deployment-frontend --global
    
  2. Quando almeno una delle tue istanze segnala HEALTHY, recupera l'indirizzo IP di inoltro per il bilanciatore del carico:

    gcloud compute forwarding-rules list --global
    

    L'indirizzo IP delle regole di inoltro si trova nella colonna IP_ADDRESS.

  3. Nel browser, inserisci l'indirizzo IP dall'elenco.

    La tua app è ora in esecuzione su Cloud de Confiance.

Nozioni di base sul codice

Configura il deployment

Puoi vedere come è configurato il deployment in config.yaml:

imports:
- name: bookshelf.jinja
  path: ./bookshelf.jinja

resources:
- name: bookshelf
  type: bookshelf.jinja
  properties:
    zone: us-central1-f
    machine-type: n1-standard-1
    machine-image: https://www.googleapis.com/compute/v1/projects/debian-cloud/global/images/family/debian-9
    min-instances: 1
    max-instances: 10
    target-utilization: 0.6
    scopes:
    - https://www.googleapis.com/auth/cloud-platform

Il file di configurazione importa il file modello come risorsa e lo utilizza per definire una risorsa denominata bookshelf. Il modello accetta diverse proprietà come parametri. Per saperne di più sulla creazione dei file di configurazione di Deployment Manager, consulta Creazione di una configurazione.

Configura lo schema del modello di deployment

Esamina il file di schema bookshelf.jinja.schema, che definisce e documenta i parametri che il deployment deve fornire nel file di configurazione. Per ulteriori informazioni sugli schemi di configurazione, consulta Utilizzo degli schemi.


info:
  title: Bookshelf GCE Deploy
  author: Google Inc.
  description: Creates a GCE Deployment

imports:
- name: startup-script
  path: ../startup-script.sh

required:
- zone
- machine-type
- min-instances
- max-instances
- scopes

properties:
  zone:
    description: Zone to create the resources in.
    type: string
  machine-type:
    description: Type of machine to use
    type: string
  machine-image:
    description: The OS image to use on the machines
    type: string
  min-instances:
    description: The minimum number of VMs the autoscaler will create
    type: integer
  max-instances:
    description: The maximum number of VMs the autoscaler will create
    type: integer
  target-utilization:
    description: The target CPU usage for the autoscaler to base its scaling on
    type: number
  scopes:
    description: A list of scopes to create the VM with
    type: array
    minItems: 1
    items:
      type: string

Configura il modello di deployment

Il modello definisce diverse risorse necessarie per creare un gruppo di istanze gestite con scalabilità automatica e bilanciamento del carico. Per una descrizione completa delle risorse create, consulta i commenti nel modello e rivedi il tutorial Libreria su Compute Engine.

Tieni presente che Deployment Manager fornisce un modo per definire le risorse in modo dichiarativo, ma la maggior parte della configurazione per una determinata risorsa è definita dalla relativa API. Ad esempio, la maggior parte delle opzioni di configurazione per la risorsa modello di istanza si trova nella definizione della risorsa modello di istanza nella documentazione di riferimento dell'API Compute Engine.

Il template è scritto utilizzando il linguaggio di template Jinja. Quando scrivi i template di Deployment Manager, puoi utilizzare Jinja o Python. Jinja ha il vantaggio di essere più dichiarativo, il che può renderlo più leggibile e facile da comprendere rispetto a Python. Per alcuni deployment complessi, la piena espressività di Python potrebbe semplificare le cose. In questo caso, Jinja è sufficiente per creare le risorse necessarie.

In un template, alcune variabili di ambiente vengono impostate automaticamente e puoi accedervi utilizzando il dizionario env. In questo caso, viene fatto riferimento al nome del deployment come nome da riutilizzare quando si assegnano i nomi alle risorse create. Per saperne di più sulle variabili di ambiente disponibili, consulta Utilizzo delle variabili di ambiente nella documentazione di Deployment Manager:

{% set NAME = "bookshelf-" + env["deployment"] %}
{% set SERVICE = "bookshelf-" + env["deployment"] + "-frontend" %}

Il template utilizza lo stesso script di avvio utilizzato nel tutorial di Compute Engine. Il contenuto dello script viene inserito nel modello e la direttiva di rientro Jinja rientra correttamente il contenuto:

            value: |
{{imports['startup-script']|indent(14, true)}}

In un template Jinja di Deployment Manager, puoi anche fare riferimento a risorse create altrove nel template. Nell'esempio seguente, il servizio di backend utilizza il riferimento del gruppo di istanze gestite per ottenere il gruppo di istanze a cui deve puntare:

- group: $(ref.{{ NAME }}-frontend-group.instanceGroup)
  zone: {{ properties['zone'] }}

Le proprietà specificate in config.yaml possono essere utilizzate nel template:

minNumReplicas: {{ properties['min-instances'] }}
maxNumReplicas: {{ properties['max-instances'] }}
loadBalancingUtilization:
  utilizationTarget: {{ properties['target-utilization'] }}

Esegui la pulizia

Per evitare che al tuo Account Google Cloud vengano addebitati costi relativi alle risorse utilizzate in questo tutorial, elimina il progetto che contiene le risorse oppure mantieni il progetto ed elimina le singole risorse.

Elimina il progetto

Il modo più semplice per eliminare la fatturazione è eliminare il progetto creato per il tutorial.

Per eliminare il progetto:

  1. Nella console Cloud de Confiance , vai alla pagina Gestisci risorse.

    Vai a Gestisci risorse

  2. Nell'elenco dei progetti, seleziona il progetto che vuoi eliminare, quindi fai clic su Elimina.
  3. Nella finestra di dialogo, digita l'ID progetto, quindi fai clic su Chiudi per eliminare il progetto.

Eliminare il deployment

Per eliminare il deployment, inserisci questo comando. Questo comando elimina il bilanciatore del carico e tutte le istanze Compute Engine associate al deployment:

gcloud deployment-manager deployments delete my-deployment

Passaggi successivi