Distribuisci un'applicazione Spring Boot su Google App Engine

1. Panoramica

In questo tutorial, mostreremo come distribuire un'applicazione dal nostro Bootstrap una semplice applicazione utilizzando il tutorial Spring Boot su App Engine su Google Cloud Platform.

In questo contesto:

  • Configura la console e l'SDK di Google Cloud Platform
  • Utilizza Cloud SQL per creare un'istanza MySQL
  • Configura l'applicazione per Spring Cloud GCP
  • Distribuisci l'applicazione su App Engine e testala

2. Configurazione di Google Cloud Platform

Possiamo utilizzare la console GCP per preparare il nostro ambiente locale per GCP. Possiamo trovare il processo di installazione sul sito ufficiale.

Creiamo un progetto su GCP utilizzando la console di GCP:

gcloud init

Successivamente, configuriamo il nome del progetto:

gcloud config set project baeldung-spring-boot-bootstrap

Quindi installeremo il supporto di App Engine e creeremo un'istanza di App Engine:

gcloud components install app-engine-java gcloud app create

La nostra applicazione dovrà connettersi a un database MySQL all'interno dell'ambiente Cloud SQL. Poiché Cloud SQL non fornisce un livello gratuito, dovremo abilitare la fatturazione sull'account GCP.

Possiamo controllare facilmente i livelli disponibili:

gcloud sql tiers list 

Prima di continuare, dovremmo utilizzare il sito web di GCP per abilitare l'API di amministrazione di Cloud SQL.

Ora possiamo creare un'istanza e un database MySQL in Cloud SQL utilizzando Cloud Console o l'SDK CLI. Durante questo processo, sceglieremo la regione e forniremo un nome di istanza e un nome di database. È importante che l'app e l'istanza del database si trovino nella stessa regione.

Dato che distribuiremo l'app in europe-west2 , facciamo lo stesso per l'istanza:

# create instance gcloud sql instances create \ baeldung-spring-boot-bootstrap-db \ --tier=db-f1-micro \ --region=europe-west2 # create database gcloud sql databases create \ baeldung_bootstrap_db \ --instance=baeldung-spring-boot-bootstrap-db

3. Dipendenze di Spring Cloud GCP

La nostra applicazione richiederà dipendenze dal progetto Spring Cloud GCP per le API cloud native. Per questo, usiamo un profilo Maven denominato cloud-gcp :

 cloud-gcp   org.springframework.cloud spring-cloud-gcp-starter 1.0.0.RELEASE   org.springframework.cloud spring-cloud-gcp-starter-sql-mysql 1.0.0.RELEASE  

Quindi aggiungiamo il plug-in Maven di App Engine:

    com.google.cloud.tools appengine-maven-plugin 1.3.2    

4. Configurazione dell'applicazione

Definiamo ora la configurazione che consente all'applicazione di utilizzare le risorse native del cloud come il database.

Spring Cloud GCP utilizza spring-cloud-bootstrap.properties per determinare il nome dell'applicazione:

spring.cloud.appId=baeldung-spring-boot-bootstrap

Useremo un profilo Spring denominato gcp per questa distribuzione e avremo bisogno di configurare la connessione al database. Pertanto creiamo src / main / resources / application-gcp.properties :

spring.cloud.gcp.sql.instance-connection-name=\ baeldung-spring-boot-bootstrap:europe-west2:baeldung-spring-boot-bootstrap-db spring.cloud.gcp.sql.database-name=baeldung_bootstrap_db

5. Distribuzione

Google App Engine fornisce due ambienti Java:

  • l' ambiente Standard fornisce Jetty e JDK8 e l' ambiente Flexible fornisce solo JDK8 e
  • l'ambiente flessibile è l'opzione migliore per le applicazioni Spring Boot.

Richiediamo che i profili gcp e mysql Spring siano attivi, quindi forniamo la variabile ambientale SPRING_PROFILES_ACTIVE all'applicazione aggiungendola alla configurazione di distribuzione in src / main / appengine / app.yaml :

runtime: java env: flex runtime_config: jdk: openjdk8 env_variables: SPRING_PROFILES_ACTIVE: "gcp,mysql" handlers: - url: /.* script: this field is required, but ignored manual_scaling: instances: 1

Ora, creiamo e distribuiamo l'applicazione utilizzando il plug-in appengine maven :

mvn clean package appengine:deploy -P cloud-gcp

Dopo la distribuzione possiamo visualizzare o aggiungere file di registro:

# view gcloud app logs read # tail gcloud app logs tail

Ora, verifichiamo che la nostra applicazione funzioni aggiungendo un libro :

http POST //baeldung-spring-boot-bootstrap.appspot.com/api/books \ author="Iain M. Banks" 

In attesa del seguente output:

HTTP/1.1 201 { "author": "Iain M. Banks", "id": 1, "title": "The Player of Games" }

6. Ridimensionamento dell'applicazione

Il ridimensionamento predefinito in App Engine è automatico.

Potrebbe essere meglio iniziare con il ridimensionamento manuale fino a quando non comprendiamo il comportamento in fase di esecuzione e i budget ei costi associati. Possiamo assegnare risorse all'applicazione e configurare il ridimensionamento automatico in app.yaml :

# Application Resources resources: cpu: 2 memory_gb: 2 disk_size_gb: 10 volumes: - name: ramdisk1 volume_type: tmpfs size_gb: 0.5 # Automatic Scaling automatic_scaling: min_num_instances: 1 max_num_instances: 4 cool_down_period_sec: 180 cpu_utilization: target_utilization: 0.6

7. Conclusione

In questo tutorial, noi:

  • Google Cloud Platform e App Engine configurati
  • Creata un'istanza MySQL con Cloud SQL
  • Spring Cloud GCP configurato per l'utilizzo di MySQL
  • Distribuito la nostra applicazione Spring Boot configurata e
  • Ha testato e ridimensionato l'applicazione

Possiamo sempre fare riferimento alla vasta documentazione di App Engine di Google per ulteriori dettagli.

Il codice sorgente completo dei nostri esempi qui è, come sempre, su GitHub.