Distribuisci un'applicazione Spring Boot su AWS Beanstalk

1. Panoramica

In questo tutorial, mostreremo come distribuire un'applicazione dal nostro Bootstrap a Simple Application utilizzando il tutorial Spring Boot su AWS Elastic Beanstalk.

In questo contesto:

  • Installa e configura gli strumenti AWS CLI
  • Crea un progetto Beanstalk e la distribuzione di MySQL
  • Configura l'applicazione per MySQL in AWS RDS
  • Distribuisci, testa e ridimensiona l'applicazione

2. Configurazione AWS Elastic Beanstalk

Come prerequisito, avremmo dovuto registrarci su AWS e creare un ambiente Java 8 su Elastic Beanstalk. Dobbiamo anche installare l'AWS CLI che ci consentirà di connetterci al nostro ambiente.

Quindi, dato questo, dobbiamo accedere e inizializzare la nostra applicazione:

cd .../spring-boot-bootstrap eb init 
> Select a default region 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 (Ireland) 5) eu-central-1 : EU (Frankfurt) 6) ap-south-1 : Asia Pacific (Mumbai) 7) ap-southeast-1 : Asia Pacific (Singapore) 8) ap-southeast-2 : Asia Pacific (Sydney) 9) ap-northeast-1 : Asia Pacific (Tokyo) 10) ap-northeast-2 : Asia Pacific (Seoul) 11) sa-east-1 : South America (Sao Paulo) 12) cn-north-1 : China (Beijing) 13) cn-northwest-1 : China (Ningxia) 14) us-east-2 : US East (Ohio) 15) ca-central-1 : Canada (Central) 16) eu-west-2 : EU (London) 17) eu-west-3 : EU (Paris) 18) eu-north-1 : EU (Stockholm) (default is 3):

Come mostrato sopra, ci viene chiesto di selezionare una regione.

Infine, possiamo selezionare l'applicazione:

> Select an application to use 1) baeldung-demo 2) [ Create new Application ] (default is 2): 

A questo punto, la CLI creerà un file denominato .elasticbeanstalk / config.yml . Questo file manterrà le impostazioni predefinite per il progetto.

3. Database

Ora possiamo creare il database sulla Console Web AWS o con la CLI utilizzando:

eb create --single --database

Dovremo seguire le istruzioni per fornire un nome utente e una password.

Con il nostro database creato, configuriamo ora le credenziali RDS per la nostra applicazione. Lo faremo in un profilo Spring chiamato beanstalk creando src / main / resources / application-beanstalk.properties nella nostra applicazione:

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

Spring cercherà la proprietà denominata rds.hostname come variabile ambientale chiamata RDS_HOSTNAME . La stessa logica si applicherà al resto.

4. Applicazione

Ora, aggiungeremo un fagiolo magico - profilo specifico Maven per pom.xml :

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

Successivamente, specificheremo l'artefatto nel file di configurazione di Elastic Beanstalk .elasticbeanstalk / config.yml :

deploy: artifact: target/spring-boot-bootstrap-eb.jar 

Infine, includeremo due variabili ambientali in Elastic Beanstalk. Il primo specificherà i profili Spring attivi e il secondo garantirà l'utilizzo della porta predefinita 5000 prevista da Beanstalk:

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

5. Distribuzione e test

Ora siamo pronti per creare e distribuire:

mvn clean package spring-boot:repackage eb deploy 

Successivamente, controlleremo lo stato e determineremo il nome DNS dell'applicazione distribuita:

eb status

E il nostro output dovrebbe essere qualcosa del tipo:

Environment details for: BaeldungDemo-env Application name: baeldung-demo Region: us-east-2 Deployed Version: app-181216_154233 Environment ID: e-42mypzuc2x Platform: arn:aws:elasticbeanstalk:us-east-2::platform/Java 8 running on 64bit Amazon Linux/2.7.7 Tier: WebServer-Standard-1.0 CNAME: BaeldungDemo-env.uv3tr7qfy9.us-east-2.elasticbeanstalk.com Updated: 2018-12-16 13:43:22.294000+00:00 Status: Ready Health: Green

Ora possiamo testare l'applicazione: nota l'uso del campo CNAME come DNS per completare l'URL.

Aggiungiamo ora un libro alla nostra libreria:

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

E, se tutto va bene, dovremmo ottenere qualcosa come:

HTTP/1.1 201 Cache-Control: no-cache, no-store, max-age=0, must-revalidate Connection: keep-alive Content-Type: application/json;charset=UTF-8 Date: Wed, 19 Dec 2018 15:36:31 GMT Expires: 0 Pragma: no-cache Server: nginx/1.12.1 Transfer-Encoding: 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. Ridimensionamento dell'applicazione

Infine, ridimensioniamo la distribuzione per eseguire due istanze:

eb scale 2

Beanstalk ora eseguirà 2 istanze dell'applicazione e bilancia il carico del traffico su entrambe le istanze.

Il ridimensionamento automatico per la produzione è un po 'più complicato, quindi lo lasceremo per un altro giorno.

7. Conclusione

In questo tutorial, noi:

  • Installazione e configurazione della AWS Beanstalk CLI e configurazione di un ambiente online
  • Distribuito un servizio MySQL e configurato le proprietà di connessione del database
  • Creato e distribuito la nostra applicazione Spring Boot configurata e
  • Ha testato e ridimensionato l'applicazione

Per maggiori dettagli, consulta la documentazione Java di Beanstalk.

Come sempre, il codice sorgente completo dei nostri esempi è qui, su GitHub.