Tutorial su Terraform


Questo tutorial mostra come eseguire il deployment di una funzione HTTP caricando un file del codice sorgente della funzione in un bucket Cloud Storage, utilizzando Terraform per il provisioning delle risorse. Terraform è un ambiente che consente di eseguire il provisioning delle risorse Google Cloud con di configurazione dei deployment.

Questo tutorial utilizza una funzione HTTP Node.js come esempio, ma funziona anche con le funzioni HTTP Python, Go e Java. Le istruzioni sono le stesse indipendentemente da quale di questi runtime utilizzi.

Obiettivi

  • Scopri come utilizzare Terraform per eseguire il deployment di una funzione HTTP.

Costi

In questo documento vengono utilizzati i seguenti componenti fatturabili di Google Cloud:

For details, see Cloud Run functions pricing.

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

Prima di iniziare

  1. Accedi al tuo account Google Cloud. Se non conosci Google Cloud, crea un account per valutare le prestazioni dei nostri prodotti in scenari reali. I nuovi clienti ricevono anche 300 $di crediti gratuiti per l'esecuzione, il test e il deployment dei carichi di lavoro.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Assicurati che la fatturazione sia attivata per il tuo progetto Google Cloud.

  4. Enable the Cloud Functions, Cloud Run, Cloud Build, Artifact Registry, and Cloud Storage APIs.

    Enable the APIs

  5. Install the Google Cloud CLI.
  6. To initialize the gcloud CLI, run the following command:

    gcloud init
  7. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  8. Assicurati che la fatturazione sia attivata per il tuo progetto Google Cloud.

  9. Enable the Cloud Functions, Cloud Run, Cloud Build, Artifact Registry, and Cloud Storage APIs.

    Enable the APIs

  10. Install the Google Cloud CLI.
  11. To initialize the gcloud CLI, run the following command:

    gcloud init
  12. Se hai già installato gcloud CLI, aggiornalo eseguendo il seguente comando:

    gcloud components update
  13. Prepara l'ambiente di sviluppo.

    Vai alla guida alla configurazione di Node.js .

Configurazione dell'ambiente

In questo tutorial eseguirai i comandi in Cloud Shell. Cloud Shell è una dell'ambiente shell con Google Cloud CLI già installato, che include Google Cloud CLI e con valori già impostati per il tuo attuale progetto. L'inizializzazione di Cloud Shell può richiedere diversi minuti:

Apri Cloud Shell

Preparazione dell'applicazione

In Cloud Shell, segui questi passaggi:

  1. Clona il repository dell'app di esempio nella tua istanza di Cloud Shell:

    git clone https://github.com/GoogleCloudPlatform/nodejs-docs-samples.git
  2. Passa alla directory che contiene l'esempio delle funzioni Cloud Run esempi di codice:

    cd nodejs-docs-samples/functions

    L'esempio Node.js utilizzato in questo tutorial è un "Hello World" di base HTTP personalizzata.

Crea il tuo file main.tf

  1. Nella directory nodejs-docs-samples/functions/, crea un file main.tf per la configurazione di Terraform:

    touch main.tf
    
  2. Copia questa configurazione Terraform nel file main.tf:

    terraform {
      required_providers {
        google = {
          source  = "hashicorp/google"
          version = ">= 4.34.0"
        }
      }
    }
    
    resource "random_id" "default" {
      byte_length = 8
    }
    
    resource "google_storage_bucket" "default" {
      name                        = "${random_id.default.hex}-gcf-source" # Every bucket name must be globally unique
      location                    = "US"
      uniform_bucket_level_access = true
    }
    
    data "archive_file" "default" {
      type        = "zip"
      output_path = "/tmp/function-source.zip"
      source_dir  = "functions/hello-world/"
    }
    resource "google_storage_bucket_object" "object" {
      name   = "function-source.zip"
      bucket = google_storage_bucket.default.name
      source = data.archive_file.default.output_path # Add path to the zipped function source code
    }
    
    resource "google_cloudfunctions2_function" "default" {
      name        = "function-v2"
      location    = "us-central1"
      description = "a new function"
    
      build_config {
        runtime     = "nodejs16"
        entry_point = "helloHttp" # Set the entry point
        source {
          storage_source {
            bucket = google_storage_bucket.default.name
            object = google_storage_bucket_object.object.name
          }
        }
      }
    
      service_config {
        max_instance_count = 1
        available_memory   = "256M"
        timeout_seconds    = 60
      }
    }
    
    resource "google_cloud_run_service_iam_member" "member" {
      location = google_cloudfunctions2_function.default.location
      service  = google_cloudfunctions2_function.default.name
      role     = "roles/run.invoker"
      member   = "allUsers"
    }
    
    output "function_uri" {
      value = google_cloudfunctions2_function.default.service_config[0].uri
    }
  3. Modifica il file main.tf per assicurarti che abbia i valori corretti per il parametro gli elementi che seguono. Devi modificare questo file ogni volta che la configurazione modifiche (ad esempio, per utilizzare un runtime diverso o eseguire il deployment ):

    • Runtime: in questo esempio, sostituisci nodejs16 con il file Node.js più recente il runtime nodejs20.
    • Punto di ingresso della funzione: in questo esempio, il punto di ingresso della funzione è helloHttp.
    • Percorso della directory di origine: in questo esempio modifica source_dir in helloworld/helloworldHttp.
    • La configurazione IAM di member="allUsers" non avrà esito positivo se il tuo progetto in base a un criterio dell'organizzazione con limitazione dei domini che limita la concessione di IAM ruoli all'entità allUsers. Da usare con cautela in produzione e prendi in considerazione un elenco di membri più limitato, se possibile.
di Gemini Advanced.

Inizializza Terraform

Nella directory nodejs-docs-samples/functions/ contenente main.tf esegui questo comando per aggiungere i plug-in necessari e creare .terraform directory:

terraform init

Applica la configurazione Terraform

Nella directory nodejs-docs-samples/functions/ contenente main.tf esegui il deployment della funzione applicando la configurazione. Quando richiesto, inserisci yes:

terraform apply

testa la funzione

  1. Al termine del deployment della funzione, prendi nota della proprietà URI o cercala utilizzando il seguente comando:

    gcloud functions describe function-v2 --gen2 --region=us-central1 --format="value(serviceConfig.uri)"
    
  2. Effettua una richiesta a questo URL per vedere "Hello World" della tua funzione per creare un nuovo messaggio email. Tieni presente che il deployment della funzione richiede authentication. Di conseguenza, nella richiesta devi fornire le credenziali:

    curl -H "Authorization: Bearer $(gcloud auth print-identity-token)" YOUR_FUNCTION_URL
    
di Gemini Advanced.

Esegui la pulizia

Dopo aver completato il tutorial, puoi eliminare tutto ciò che hai creato in modo che non dovrai sostenere altri costi.

Terraform consente di rimuovere tutte le risorse definite nel file di configurazione eseguendo il comando terraform destroy in nodejs-docs-samples/functions/ contenente il file main.tf:

terraform destroy

Inserisci yes per consentire a Terraform di eliminare le tue risorse.