Implantar um aplicativo de inicialização Spring no AWS Beanstalk
1. Visão geral
Neste tutorial, mostraremos como implantar um aplicativo de nosso tutorialBootstrap a Simple Application using Spring Boot paraAWS Elastic Beanstalk.
Como parte disso, nós:
-
Instale e configure as ferramentas da CLI da AWS
-
Crie um projeto Beanstalk e implantação do MySQL
-
Configure o aplicativo para MySQL no AWS RDS
-
Implante, teste e dimensione o aplicativo
2. Configuração do AWS Elastic Beanstalk
Como pré-requisito, devemos nos registrar na AWS ecreated a Java 8 environment on Elastic Beanstalk. Também precisamos deinstall the AWS CLI, o que nos permitirá conectar ao nosso ambiente.
Sendo assim, precisamos fazer login e inicializar nosso aplicativo:
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):
Como mostrado acima, somos solicitados a selecionar uma região.
Por fim, podemos selecionar o aplicativo:
>
Select an application to use
1) example-demo
2) [ Create new Application ]
(default is 2):
Neste momento,the CLI will create a file named*.elasticbeanstalk/config.yml*. Este arquivo manterá os padrões do projeto.
3. Base de dados
Agora, podemos criar o banco de dados no AWS Web Console ou com a CLI usando:
eb create --single --database
Precisamos seguir as instruções para fornecer um nome de usuário e uma senha.
Com nosso banco de dados criado, vamos configurar agora as credenciais RDS para nosso aplicativo. Faremos isso em um perfil Spring chamadobeanstalk criandosrc/main/resources/application-beanstalk.properties em nosso aplicativo:
spring.datasource.url=jdbc:mysql://${rds.hostname}:${rds.port}/${rds.db.name}
spring.datasource.username=${rds.username}
spring.datasource.password=${rds.password}
O Spring irá procurar a propriedade chamadards.hostname como uma variável ambiental chamadaRDS_HOSTNAME. A mesma lógica se aplicará ao resto.
4. Inscrição
Agora, vamos adicionar um Beanstalk–specific Maven profile apom.xml:
beanstalk
${project.name}-eb
org.springframework.boot
spring-boot-maven-plugin
org.apache.maven.plugins
maven-compiler-plugin
**/cloud/config/*.java
A seguir, especificaremos o artefato no arquivo de configuração do Elastic Beanstalk.elasticbeanstalk/config.yml:
deploy:
artifact: target/spring-boot-bootstrap-eb.jar
E, finalmente, incluiremos duas variáveis ambientais no Elastic Beanstalk. O primeiro especificará os perfis ativos do Spring e o segundo garantirá o uso da porta padrão 5000 esperada pelo Beanstalk:
eb setenv SPRING_PROFILES_ACTIVE=beanstalk,mysql
eb setenv SERVER_PORT=5000
5. Implantação e teste
Agora estamos prontos para construir e implantar:
mvn clean package spring-boot:repackage
eb deploy
A seguir, verificaremos o status e determinaremos o nome DNS do aplicativo implantado:
eb status
E nossa saída deve ser algo como:
Environment details for: exampleDemo-env
Application name: example-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: exampleDemo-env.uv3tr7qfy9.us-east-2.elasticbeanstalk.com
Updated: 2018-12-16 13:43:22.294000+00:00
Status: Ready
Health: Green
Agora podemos testar o aplicativo - observe o uso do campo CNAME como DNS para concluir o URL.
Vamos adicionar um livro à nossa biblioteca agora:
http POST http://exampledemo-env.uv3tr7qfy9.us-east-2.elasticbeanstalk.com/api/books title="The Player of Games" author="Iain M. Banks"
E, se tudo estiver bem, devemos obter algo como:
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. Dimensionando o aplicativo
Por fim, escalamos a implantação para executar duas instâncias:
eb scale 2
O Beanstalk irá agora executar 2 instâncias do aplicativo e balancear a carga do tráfego em ambas as instâncias.
O escalonamento automático para produção é um pouco maisinvolved, então vamos deixar isso para outro dia.
7. Conclusão
Neste tutorial, nós:
-
Instalou e configurou a CLI do AWS Beanstalk e configurou um ambiente online
-
Implantou um serviço MySQL e configurou as propriedades de conexão com o banco de dados
-
Criamos e implantamos nosso aplicativo Spring Boot configurado e
-
Testou e dimensionou o aplicativo
Para obter mais detalhes, verifiquethe Beanstalk Java documentation.
Como sempre, o código-fonte completo de nossos exemplos está aqui,over on GitHub.