Iniziare a utilizzare Go su Compute Engine


Questo tutorial mostra come iniziare a utilizzare Compute Engine. Segui questo tutorial eseguendo il deployment di un'app web Go Hello World su Compute Engine. Per informazioni su come iniziare a utilizzare App Engine, consulta l'ambiente standard di App Engine.

Obiettivi

  • Utilizza Cloud Shell per scaricare ed eseguire il deployment di un'app di esempio Hello World.
  • Utilizza Cloud Build per creare un'app di esempio Hello World.
  • Esegui il deployment di un'app di esempio Hello World in un'unica istanza Compute Engine.

Costi

In questo documento utilizzi i seguenti componenti fatturabili di Google Cloud:

Per generare una stima dei costi in base all'utilizzo previsto, utilizza il Calcolatore prezzi. I nuovi utenti di Google Cloud potrebbero essere idonei per una prova gratuita.

Prima di iniziare

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Make sure that billing is enabled for your Google Cloud project.

  4. Enable the Compute Engine and Cloud Build APIs.

    Enable the APIs

  5. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  6. Make sure that billing is enabled for your Google Cloud project.

  7. Enable the Compute Engine and Cloud Build APIs.

    Enable the APIs

  8. Nella console Google Cloud, apri l'app in Cloud Shell.

    Vai a Cloud Shell

    Cloud Shell fornisce l'accesso da riga di comando alle risorse cloud direttamente dal browser.

  9. Se accetti di clonare il repository, fai clic su Conferma per scaricare il codice campione e passare alla directory dell'app.

  10. In Cloud Shell, configura gcloud CLI in modo da utilizzare il nuovo progetto Google Cloud:
    # Configure gcloud for your project
    gcloud config set project YOUR_PROJECT_ID

Eseguire l'app in Cloud Shell

  1. In Cloud Shell, avvia un server web locale:

    go build -o app
    ./app
    
  2. In Cloud Shell, fai clic su Anteprima web , e seleziona Anteprima sulla porta 8080. Viene visualizzata una nuova finestra con la tua app in esecuzione.

    Nel browser web viene visualizzato Hello, World!.

  3. Quando è tutto pronto per procedere, interrompi il server web locale premendo Ctrl+C in Cloud Shell.

Distribuzione su una singola istanza

Questa sezione illustra la procedura per eseguire una singola istanza della tua app su Compute Engine.

Deployment a istanza singola.

Da Cloud Shell, puoi eseguire il deployment in una singola istanza di macchina virtuale (VM) Compute Engine che esegue la tua app.

Utilizza Cloud Build per compilare l'app

Cloud Build viene utilizzato per compilare l'app, comprimerla in un file tar e caricarla in un bucket Cloud Storage. I bucket sono i container di base in cui vengono archiviati i dati in Cloud Storage.

  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

    Puoi scegliere qualsiasi nome per il tuo bucket Cloud Storage. È buona norma assegnare al bucket lo stesso nome dell'ID progetto. I nomi dei bucket devono essere univoci in tutto Google Cloud, pertanto è possibile che non sia possibile utilizzare l'ID progetto come nome del bucket.

  2. Avvia il processo Cloud Build:

    gcloud builds submit --substitutions=_DEPLOY_DIR=gs://YOUR_BUCKET_NAME,_DEPLOY_FILENAME=app.tar.gz

    Il comando gcloud builds submit utilizza --substitutions per configurare la posizione in cui viene caricato il file tar risultante. Successivamente, il file tar viene scaricato nell'istanza Compute Engine.

    Cloud Build utilizza un file di configurazione YAML per definire i passaggi richiesti dalla compilazione.

    steps:
      # Print the Go version being used.
      - name: 'mirror.gcr.io/library/golang'
        args: ['go', 'version']
      # Make a deploy directory we'll tar after building the app.
      - name: 'debian'
        args: ['mkdir', '-p', 'deploy/etc/systemd/system/', 'deploy/usr/bin']
      # Build the app.
      - name: 'mirror.gcr.io/library/golang'
        env: [
          'GO111MODULE=on',
          'GOPROXY=https://proxy.golang.org,direct',
          'GOOS=linux',
          'GOARCH=amd64'
        ]
        args: ['go', 'build', '-o', 'deploy/usr/bin/app', '.']
      # Copy the systemd service file into the deploy directory.
      - name: 'debian'
        args: ['cp', 'my-app.service', 'deploy/etc/systemd/system/']
      # Compress the deploy directory.
      - name: 'debian'
        args: ['tar', '-czf', '${_DEPLOY_FILENAME}', '-C', './deploy', '.']
    # Upload the tarball to Cloud Storage.
    artifacts:
      objects:
        location: '${_DEPLOY_DIR}'
        paths: ['${_DEPLOY_FILENAME}']

Utilizzare uno script di avvio per inizializzare un'istanza

Devi trovare un modo per indicare all'istanza di scaricare ed eseguire il codice. Un'istanza può avere uno script di avvio che viene eseguito ogni volta che viene avviata o riavviata.

Uno script di avvio viene eseguito al primo avvio di un'istanza.

set -ex

# Install logging monitor. The monitor will automatically pickup logs sent to syslog.
curl "https://storage.googleapis.com/signals-agents/logging/google-fluentd-install.sh" --output google-fluentd-install.sh
checksum=$(sha256sum google-fluentd-install.sh | awk '{print $1;}')
if [ "$checksum" != "ec78e9067f45f6653a6749cf922dbc9d79f80027d098c90da02f71532b5cc967" ]; then
    echo "Checksum does not match"
    exit 1
fi
chmod +x google-fluentd-install.sh && ./google-fluentd-install.sh
service google-fluentd restart &

APP_LOCATION=$(curl -s "http://metadata.google.internal/computeMetadata/v1/instance/attributes/app-location" -H "Metadata-Flavor: Google")
gsutil cp "$APP_LOCATION" app.tar.gz
tar -xzf app.tar.gz

# Start the service included in app.tar.gz.
service my-app start

Lo script di avvio esegue queste attività:

  • Installa l'agente Cloud Logging e lo configura per monitorare i log dell'app.

  • Scarica ed estrae il file tar di deployment.

  • Avvia un servizio systemd per eseguire l'app.

Crea e configura un'istanza Compute Engine

  1. Crea un'istanza Compute Engine:

    Linux/macOS

    gcloud compute instances create my-app-instance \
    --image-family=debian-10 \
    --image-project=debian-cloud \
    --machine-type=g1-small \
    --scopes userinfo-email,cloud-platform \
    --metadata-from-file startup-script=startup-script.sh \
    --metadata app-location="gs://YOUR_BUCKET_NAME/app.tar.gz" \
    --zone YOUR_ZONE \
    --tags http-server

    Sostituisci YOUR_ZONE con una zona di sviluppo, ad esempio us-central1-a. Per ulteriori informazioni su regioni e zone, consulta Geografia e regioni.

    Il flag --metadata app-location indica allo script di avvio dove scaricare il file tar dell'app.

    Windows

    gcloud compute instances create my-app-instance ^
    --image-family=debian-10 ^
    --image-project=debian-cloud ^
    --machine-type=g1-small ^
    --scopes userinfo-email,cloud-platform ^
    --metadata-from-file startup-script=startup-script.sh ^
    --metadata app-location="gs://YOUR_BUCKET_NAME/app.tar.gz" ^
    --zone YOUR_ZONE ^
    --tags http-server

    Sostituisci YOUR_ZONE con una zona di sviluppo, ad esempio us-central1-a. Per ulteriori informazioni su regioni e zone, consulta Geografia e regioni.

    Il flag --metadata app-location indica allo script di avvio dove scaricare il file tar dell'app.

    Viene creata una nuova istanza, che viene autorizzata ad accedere ai servizi Google Cloud e a eseguire lo script di avvio. Il nome dell'istanza è my-app-instance.

  2. Verifica lo stato di avanzamento della creazione dell'istanza:

    gcloud compute instances get-serial-port-output my-app-instance --zone YOUR_ZONE
    

    Al termine dello script di avvio, viene visualizzato il seguente messaggio:

    startup-script: INFO Finished running startup scripts.
    
  3. Crea una regola firewall per consentire il traffico nell'istanza:

    gcloud compute firewall-rules create default-allow-http-80 \
        --allow tcp:80 \
        --source-ranges 0.0.0.0/0 \
        --target-tags http-server \
        --description "Allow port 80 access to http-server"
    

  4. Ottieni l'indirizzo IP esterno dell'istanza:

    gcloud compute instances list
    
  5. Per vedere l'app in esecuzione, inserisci questo URL nel browser:

    http://YOUR_INSTANCE_IP
    

    Sostituisci YOUR_INSTANCE_IP con l'indirizzo IP esterno della tua istanza.

Gestire e monitorare un'istanza

Puoi utilizzare la console Google Cloud per monitorare e gestire l'istanza.

  1. In the Google Cloud console, go to the VM instances page.

    Go to VM instances

  2. In the list of virtual machine instances, click SSH in the row of the instance that you want to connect to.
  3. Per visualizzare tutti i log generati dalle risorse Compute Engine, vai alla pagina Esplora log. Vai a Esplora log

    Cloud Logging è configurato automaticamente per raccogliere i log da vari servizi comuni, tra cui syslog.

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

  1. In the Google Cloud console, go to the Manage resources page.

    Go to Manage resources

  2. In the project list, select the project that you want to delete, and then click Delete.
  3. In the dialog, type the project ID, and then click Shut down to delete the project.

Elimina le singole risorse

gcloud compute instances delete my-app-instance --zone=YOUR_ZONE --delete-disks=all
gcloud compute firewall-rules delete default-allow-http-80

Passaggi successivi