Implantar um aplicativo de inicialização Spring no AWS Beanstalk

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 Beanstalkspecific 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.