Implementeer een Spring Boot-applicatie op AWS Beanstalk

1. Overzicht

In deze tutorial laten we zien hoe je een applicatie implementeert vanuit onze Bootstrap a Simple Application met Spring Boot-tutorial naar AWS Elastic Beanstalk.

Als onderdeel hiervan zullen we:

  • Installeer en configureer AWS CLI-tools
  • Maak een Beanstalk-project en MySQL-implementatie
  • Configureer de applicatie voor MySQL in AWS RDS
  • Implementeer, test en schaal de applicatie

2. AWS Elastic Beanstalk-configuratie

Als eerste vereiste hadden we ons moeten registreren op AWS en een Java 8-omgeving moeten maken op Elastic Beanstalk. We moeten ook de AWS CLI installeren waarmee we verbinding kunnen maken met onze omgeving.

Daarom moeten we inloggen en onze applicatie initialiseren:

cd ... / spring-boot-bootstrap eb init 
> Selecteer een standaardregio 1) us-east-1: US East (N. Virginia) 2) us-west-1: US West (N. California) 3) us-west-2: US West (Oregon) 4) eu-west-1: EU (Ierland) 5) eu-central-1: EU (Frankfurt) 6) ap-south-1: Azië-Pacific (Mumbai) 7) ap-zuidoost-1: Azië-Pacific (Singapore) 8) ap-zuidoosten-2: Azië-Pacific (Sydney) 9) ap-noordoosten-1: Azië-Pacific (Tokio) 10) ap-noordoosten-2: Azië-Pacific (Seoul) 11) sa-oost-1: Zuid-Amerika (Sao Paulo) ) 12) cn-north-1: China (Peking) 13) cn-noordwesten-1: China (Ningxia) 14) us-east-2: US East (Ohio) 15) ca-central-1: Canada (centraal) 16) eu-west-2: EU (Londen) 17) eu-west-3: EU (Parijs) 18) eu-noord-1: EU (Stockholm) (standaard is 3):

Zoals hierboven weergegeven, wordt ons gevraagd om een ​​regio te selecteren.

Ten slotte kunnen we de toepassing selecteren:

> Selecteer een applicatie om te gebruiken 1) baeldung-demo 2) [Create new Application] (standaard is 2): 

Momenteel, de CLI maakt een bestand met de naam .elasticbeanstalk / config.yml. Dit bestand behoudt de standaardinstellingen voor het project.

3. Database

Nu kunnen we de database maken op de AWS-webconsole of met de CLI met behulp van:

eb create --single --database

We moeten de instructies volgen om een ​​gebruikersnaam en wachtwoord op te geven.

Nu onze database is gemaakt, gaan we nu de RDS-inloggegevens voor onze applicatie configureren. We doen dit in een Spring-profiel met de naam bonenstaak door te maken src / main / resources / application-beanstalk.properties in onze applicatie:

spring.datasource.url = jdbc: mysql: // $ {rds.hostname}: $ {rds.port} / $ {rds.db.name} spring.datasource.username = $ {rds.username} spring.datasource. wachtwoord = $ {rds.password} 

Spring gaat op zoek naar de woning met de naam rds.hostnaam als omgevingsvariabele genaamd RDS_HOSTNAAM. Dezelfde logica is van toepassing op de rest.

4. Toepassing

Nu gaan we een bonenstaak toevoegenspecifiek Maven-profiel naar pom.xml:

 beanstalk $ {project.name} -eb org.springframework.boot spring-boot-maven-plugin org.apache.maven.plugins maven-compiler-plugin ** / cloud / config / *. java 

Vervolgens specificeren we het artefact in het Elastic Beanstalk-configuratiebestand .elasticbeanstalk / config.yml:

implementeren: artefact: target / spring-boot-bootstrap-eb.jar 

En tot slot zullen we twee omgevingsvariabelen opnemen in Elastic Beanstalk. De eerste specificeert de actieve Spring-profielen en de tweede zorgt ervoor dat de standaardpoort 5000 wordt gebruikt die wordt verwacht door Beanstalk:

eb setenv SPRING_PROFILES_ACTIVE = bonenstaak, mysql eb setenv SERVER_PORT = 5000

5. Implementatie en testen

Nu zijn we klaar om te bouwen en te implementeren:

mvn schoon pakket spring-boot: herverpakken eb deploy 

Vervolgens controleren we de status en bepalen we de DNS-naam van de geïmplementeerde applicatie:

eb status

En onze output zou zoiets moeten zijn als:

Omgevingsdetails voor: BaeldungDemo-env Applicatienaam: baeldung-demo Regio: us-east-2 Geïmplementeerde versie: app-181216_154233 Omgeving-ID: e-42mypzuc2x Platform: arn: aws: elasticbeanstalk: us-east-2 :: platform / Java 8 draait op 64bit Amazon Linux / 2.7.7 Tier: WebServer-Standard-1.0 CNAME: BaeldungDemo-env.uv3tr7qfy9.us-east-2.elasticbeanstalk.com Bijgewerkt: 2018-12-16 13: 43: 22.294000 + 00: 00 Status: Gereed Gezondheid: Groen

We kunnen de applicatie nu testen - let op het gebruik van het CNAME-veld als DNS om de URL te voltooien.

Laten we nu een boek aan onze bibliotheek toevoegen:

http POST //baeldungdemo-env.uv3tr7qfy9.us-east-2.elasticbeanstalk.com/api/books author = "Iain M. Banks"

En als alles goed is, zouden we zoiets moeten krijgen als:

HTTP / 1.1 201 Cache-Control: no-cache, no-store, max-age = 0, must-revalidate Verbinding: keep-alive Inhoudstype: application / json; charset = UTF-8 Datum: wo 19 dec 2018 15:36:31 GMT Verloopt: 0 Pragma: geen cache Server: nginx / 1.12.1 Overdrachtcodering: chunked X-Content-Type-Options: nosniff X-Frame-Options: DENY X-XSS-Protection: 1; mode = block {"author": "Iain M. Banks", "id": 5, "title": "The Player of Games"}

6. Schalen van de applicatie

Ten slotte schalen we de implementatie om twee instanties uit te voeren:

eb schaal 2

Beanstalk voert nu 2 instanties van de applicatie uit en verdeelt het verkeer over beide instanties.

Automatisch schalen voor productie is iets ingewikkelder, dus dat laten we nog een dag staan.

7. Conclusie

In deze tutorial hebben we:

  • De AWS Beanstalk CLI geïnstalleerd en geconfigureerd en een online omgeving geconfigureerd
  • Een MySQL-service geïmplementeerd en de eigenschappen van de databaseverbinding geconfigureerd
  • Onze geconfigureerde Spring Boot-applicatie gebouwd en geïmplementeerd, en
  • De applicatie getest en geschaald

Raadpleeg de Beanstalk Java-documentatie voor meer informatie.

Zoals altijd is de volledige broncode van onze voorbeelden hier, op GitHub.