Implementeer een Spring Boot-app op Google App Engine

1. Overzicht

In deze tutorial laten we zien hoe je een applicatie implementeert vanuit onze Bootstrap a Simple Application met Spring Boot-tutorial naar App Engine op Google Cloud Platform.

Als onderdeel hiervan zullen we:

  • Configureer Google Cloud Platform Console en SDK
  • Gebruik Cloud SQL om een ​​MySQL-instantie te maken
  • Configureer de applicatie voor Spring Cloud GCP
  • Implementeer de app in App Engine en test deze

2. Google Cloud Platform-configuratie

We kunnen de GCP-console gebruiken om onze lokale omgeving klaar te maken voor GCP. We kunnen het installatieproces vinden op de officiële website.

Laten we een project op GCP maken met de GCP-console:

gcloud init

Laten we vervolgens de projectnaam configureren:

gcloud config set project baeldung-spring-boot-bootstrap

Vervolgens installeren we de App Engine-ondersteuning en maken we een App Engine-instantie:

gcloud-componenten installeren app-engine-java gcloud app create

Onze applicatie moet verbinding maken met een MySQL-database binnen de Cloud SQL-omgeving. Omdat Cloud SQL geen gratis laag biedt, moeten we facturering inschakelen voor het GCP-account.

We kunnen de beschikbare niveaus eenvoudig controleren:

gcloud sql-lijst met lagen 

Voordat we verder gaan, moeten we de GCP-website gebruiken om de Cloud SQL Admin API in te schakelen.

Nu kunnen we een MySQL-instantie en -database maken in Cloud SQL met behulp van de Cloud Console of de SDK CLI. Tijdens dit proces kiezen we de regio en geven we een instantienaam en databasenaam op. Het is belangrijk dat de app en het database-exemplaar zich in dezelfde regio bevinden.

Omdat we de app gaan implementeren voor europe-west2, laten we hetzelfde doen voor de instantie:

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

3. Spring Cloud GCP-afhankelijkheden

Onze applicatie heeft afhankelijkheden van het Spring Cloud GCP-project nodig voor de cloud-native API's. Laten we hiervoor een Maven-profiel gebruiken met de naam 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 

Vervolgens voegen we de App Engine Maven-plug-in toe:

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

4. Applicatieconfiguratie

Laten we nu de configuratie definiëren waarmee de applicatie de cloud-native bronnen zoals de database kan gebruiken.

Spring Cloud GCP gebruikt spring-cloud-bootstrap.properties om de naam van de applicatie te bepalen:

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

We gebruiken een Spring-profiel met de naam GCP voor deze implementatie en we zullen de databaseverbinding moeten configureren. Daarom creëren we 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. Inzet

De Google App Engine biedt twee Java-omgevingen:

  • de Standaard omgeving biedt Jetty en JDK8 en de Flexibel omgeving biedt alleen JDK8 en
  • de flexibele omgeving is de beste optie voor Spring Boot-applicaties.

We hebben de GCP en mysql Springprofielen om actief te zijn, dus bieden wij de SPRING_PROFILES_ACTIVE omgevingsvariabele aan de toepassing toe door deze toe te voegen aan de implementatieconfiguratie in src / main / appengine / app.yaml:

runtime: java env: flex runtime_config: jdk: openjdk8 env_variables: SPRING_PROFILES_ACTIVE: "gcp, mysql" handlers: - url: /.* script: dit veld is vereist, maar wordt genegeerd manual_scaling: instances: 1

Nu, laten we de applicatie bouwen en implementeren met behulp van de appengine maven plug-in:

mvn schoon pakket appengine: deploy -P cloud-gcp

Na implementatie kunnen we logbestanden bekijken of volgen:

# bekijk gcloud app-logboeken lezen # tail gcloud app-logboeken staart

Nu, laten we controleren of onze applicatie werkt door een boek toe te voegen:

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

Verwacht de volgende output:

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

6. Schalen van de applicatie

De standaardschaal in App Engine is automatisch.

Het is misschien beter om te beginnen met handmatig schalen totdat we het runtime-gedrag en de bijbehorende budgetten en kosten begrijpen. We kunnen bronnen aan de applicatie toewijzen en automatisch schalen configureren app.yaml:

# Application Resources resources: cpu: 2 memory_gb: 2 disk_size_gb: 10 volumes: - name: ramdisk1 volume_type: tmpfs size_gb: 0,5 # Automatisch schalen automatic_scaling: min_num_instances: 1 max_num_instances: 4 cool_down_period_sec: 180 cpu_utilization: target_utilization: 0,6

7. Conclusie

In deze tutorial hebben we:

  • Google Cloud Platform en de App Engine geconfigureerd
  • Heeft een MySQL-instantie gemaakt met Cloud SQL
  • Spring Cloud GCP geconfigureerd voor het gebruik van MySQL
  • Onze geconfigureerde Spring Boot-applicatie geïmplementeerd, en
  • De applicatie getest en geschaald

We kunnen altijd de uitgebreide App Engine-documentatie van Google raadplegen voor meer informatie.

De volledige broncode van onze voorbeelden hier is, zoals altijd, op GitHub.