Migrating an Springboot Java API: Part 3 – AWS ElasticBeanstalk

Migrating an Springboot Java API (4 Part Series)

1 Migrating an Springboot Java API: Part 1 – Docker
2 Migrating an Springboot Java API: Part 2 – Azure Build
3 Migrating an Springboot Java API: Part 3 – AWS ElasticBeanstalk
4 Migrating an Springboot Java API: Part 4 – Azure Release

On the previous post I showed how to setup an Azure DevOps pipeline to push Docker images into ECR.
In this guide I will show how to use AWS Elastic Beanstalk to pull and run these images in a fully fledged application (with database, EC2 servers, load balancer; all handled by EB)

Pre-requisites

  • AWS-CLI
  • EB CLI
  • An AWS account with the following permissions:
    • ECR (Elastic Container Registry)
    • ECS (Elastic Container Service)
    • EC2 (Elastic Compute Cloud)
    • RDS (Relational Database Service)
    • EB (Elastic Beanstalk)

IAM role

In order to initialize an EB application, I created IAM role with the following permission policies:

AdministratorAccess-AWSElasticBeanstalk
AmazonEC2ContainerRegistryFullAccess
EC2InstanceProfileForImageBuilderECRContainerBuilds
AmazonSSMFullAccess
AmazonEC2FullAccess
AWSElasticBeanstalkMulticontainerDocker
AWSElasticBeanstalkRoleECS
AdministratorAccess-AWSElasticBeanstalk
AmazonEC2ContainerRegistryFullAccess
EC2InstanceProfileForImageBuilderECRContainerBuilds
AmazonSSMFullAccess
AmazonEC2FullAccess
AWSElasticBeanstalkMulticontainerDocker
AWSElasticBeanstalkRoleECS
AdministratorAccess-AWSElasticBeanstalk AmazonEC2ContainerRegistryFullAccess EC2InstanceProfileForImageBuilderECRContainerBuilds AmazonSSMFullAccess AmazonEC2FullAccess AWSElasticBeanstalkMulticontainerDocker AWSElasticBeanstalkRoleECS

Enter fullscreen mode Exit fullscreen mode

Optional – push the redis cache to a private ECR repository

It was better for my project to have a locally available version of the dependencies, so I created an powershell script create-local-redis.ps1 to push a new version of the redis image

<span>aws</span><span> </span><span>ecr</span><span> </span><span>get-login-password</span><span> </span><span>--region</span><span> </span><span>AWS_REGION</span><span> </span><span>|</span><span> </span><span>docker</span><span> </span><span>login</span><span> </span><span>--username</span><span> </span><span>AWS</span><span> </span><span>--password-stdin</span><span> </span><span>AWS_ACCOUNT_ID.dkr.ecr.AWS_REGION.amazonaws.com</span><span> </span><span>docker</span><span> </span><span>pull</span><span> </span><span>redis:7.2.1</span><span> </span><span>docker</span><span> </span><span>tag</span><span> </span><span>redis:7.2.1</span><span> </span><span>AWS_ACCOUNT_ID.dkr.ecr.AWS_REGION.amazonaws.com/local-redis:7.2.1</span><span> </span><span>docker</span><span> </span><span>push</span><span> </span><span>AWS_ACCOUNT_ID.dkr.ecr.AWS_REGION.amazonaws.com/local-redis:7.2.1</span><span> </span>
<span>aws</span><span> </span><span>ecr</span><span> </span><span>get-login-password</span><span> </span><span>--region</span><span> </span><span>AWS_REGION</span><span> </span><span>|</span><span> </span><span>docker</span><span> </span><span>login</span><span> </span><span>--username</span><span> </span><span>AWS</span><span> </span><span>--password-stdin</span><span> </span><span>AWS_ACCOUNT_ID.dkr.ecr.AWS_REGION.amazonaws.com</span><span> </span><span>docker</span><span> </span><span>pull</span><span> </span><span>redis:7.2.1</span><span> </span><span>docker</span><span> </span><span>tag</span><span> </span><span>redis:7.2.1</span><span> </span><span>AWS_ACCOUNT_ID.dkr.ecr.AWS_REGION.amazonaws.com/local-redis:7.2.1</span><span> </span><span>docker</span><span> </span><span>push</span><span> </span><span>AWS_ACCOUNT_ID.dkr.ecr.AWS_REGION.amazonaws.com/local-redis:7.2.1</span><span> </span>
aws ecr get-login-password --region AWS_REGION | docker login --username AWS --password-stdin AWS_ACCOUNT_ID.dkr.ecr.AWS_REGION.amazonaws.com docker pull redis:7.2.1 docker tag redis:7.2.1 AWS_ACCOUNT_ID.dkr.ecr.AWS_REGION.amazonaws.com/local-redis:7.2.1 docker push AWS_ACCOUNT_ID.dkr.ecr.AWS_REGION.amazonaws.com/local-redis:7.2.1

Enter fullscreen mode Exit fullscreen mode

Configuration files for Elastic Beanstalk

I used the configuration for EB multicontainer
So I added a deployment/ folder side-by-side with MyJavaSolution with the following:

deployment/
├── create-local-redis.ps1
├── Dockerrun.aws.json
├── .ebextensions/
│ │── db-instance-properties.config
│ │── network-load-balancer.config
MyJavaSolution/
├── ...
deployment/
├── create-local-redis.ps1
├── Dockerrun.aws.json
├── .ebextensions/
│ │── db-instance-properties.config
│ │── network-load-balancer.config
│
MyJavaSolution/
├── ...
deployment/ ├── create-local-redis.ps1 ├── Dockerrun.aws.json ├── .ebextensions/ │ │── db-instance-properties.config │ │── network-load-balancer.config │ MyJavaSolution/ ├── ...

Enter fullscreen mode Exit fullscreen mode

Dockerrun.aws.json

<span>{</span><span> </span><span>"AWSEBDockerrunVersion"</span><span>:</span><span> </span><span>2</span><span>,</span><span> </span><span>"containerDefinitions"</span><span>:</span><span> </span><span>[</span><span> </span><span>{</span><span> </span><span>"name"</span><span>:</span><span> </span><span>"local-redis"</span><span>,</span><span> </span><span>"image"</span><span>:</span><span> </span><span>"AWS_ACCOUNT_ID.dkr.ecr.AWS_REGION.amazonaws.com/local-redis:7.2.1"</span><span>,</span><span> </span><span>"portMappings"</span><span>:</span><span> </span><span>[</span><span> </span><span>{</span><span> </span><span>"hostPort"</span><span>:</span><span> </span><span>6379</span><span>,</span><span> </span><span>"containerPort"</span><span>:</span><span> </span><span>6379</span><span> </span><span>}</span><span> </span><span>],</span><span> </span><span>"essential"</span><span>:</span><span> </span><span>true</span><span>,</span><span> </span><span>"memory"</span><span>:</span><span> </span><span>1024</span><span> </span><span>},</span><span> </span><span>{</span><span> </span><span>"name"</span><span>:</span><span> </span><span>"customer_DOCKER_REPOSITORY_NAME"</span><span>,</span><span> </span><span>"image"</span><span>:</span><span> </span><span>"AWS_ACCOUNT_ID.dkr.ecr.AWS_REGION.amazonaws.com/customer_DOCKER_REPOSITORY_NAME:Build.BuildNumber"</span><span>,</span><span> </span><span>"portMappings"</span><span>:</span><span> </span><span>[</span><span> </span><span>{</span><span> </span><span>"hostPort"</span><span>:</span><span> </span><span>9001</span><span>,</span><span> </span><span>"containerPort"</span><span>:</span><span> </span><span>9001</span><span> </span><span>}</span><span> </span><span>],</span><span> </span><span>"links"</span><span>:</span><span> </span><span>[</span><span> </span><span>"local-redis"</span><span> </span><span>],</span><span> </span><span>"essential"</span><span>:</span><span> </span><span>true</span><span>,</span><span> </span><span>"memory"</span><span>:</span><span> </span><span>1024</span><span> </span><span>},</span><span> </span><span>{</span><span> </span><span>"name"</span><span>:</span><span> </span><span>"ADMIN_DOCKER_REPOSITORY_NAME"</span><span>,</span><span> </span><span>"image"</span><span>:</span><span> </span><span>"AWS_ACCOUNT_ID.dkr.ecr.AWS_REGION.amazonaws.com/ADMIN_DOCKER_REPOSITORY_NAME:Build.BuildNumber"</span><span>,</span><span> </span><span>"portMappings"</span><span>:</span><span> </span><span>[</span><span> </span><span>{</span><span> </span><span>"hostPort"</span><span>:</span><span> </span><span>9002</span><span>,</span><span> </span><span>"containerPort"</span><span>:</span><span> </span><span>9002</span><span> </span><span>}</span><span> </span><span>],</span><span> </span><span>"links"</span><span>:</span><span> </span><span>[</span><span> </span><span>"local-redis"</span><span> </span><span>],</span><span> </span><span>"essential"</span><span>:</span><span> </span><span>true</span><span>,</span><span> </span><span>"memory"</span><span>:</span><span> </span><span>1024</span><span> </span><span>}</span><span> </span><span>]</span><span> </span><span>}</span><span> </span>
<span>{</span><span> </span><span>"AWSEBDockerrunVersion"</span><span>:</span><span> </span><span>2</span><span>,</span><span> </span><span>"containerDefinitions"</span><span>:</span><span> </span><span>[</span><span> </span><span>{</span><span> </span><span>"name"</span><span>:</span><span> </span><span>"local-redis"</span><span>,</span><span> </span><span>"image"</span><span>:</span><span> </span><span>"AWS_ACCOUNT_ID.dkr.ecr.AWS_REGION.amazonaws.com/local-redis:7.2.1"</span><span>,</span><span> </span><span>"portMappings"</span><span>:</span><span> </span><span>[</span><span> </span><span>{</span><span> </span><span>"hostPort"</span><span>:</span><span> </span><span>6379</span><span>,</span><span> </span><span>"containerPort"</span><span>:</span><span> </span><span>6379</span><span> </span><span>}</span><span> </span><span>],</span><span> </span><span>"essential"</span><span>:</span><span> </span><span>true</span><span>,</span><span> </span><span>"memory"</span><span>:</span><span> </span><span>1024</span><span> </span><span>},</span><span> </span><span>{</span><span> </span><span>"name"</span><span>:</span><span> </span><span>"customer_DOCKER_REPOSITORY_NAME"</span><span>,</span><span> </span><span>"image"</span><span>:</span><span> </span><span>"AWS_ACCOUNT_ID.dkr.ecr.AWS_REGION.amazonaws.com/customer_DOCKER_REPOSITORY_NAME:Build.BuildNumber"</span><span>,</span><span> </span><span>"portMappings"</span><span>:</span><span> </span><span>[</span><span> </span><span>{</span><span> </span><span>"hostPort"</span><span>:</span><span> </span><span>9001</span><span>,</span><span> </span><span>"containerPort"</span><span>:</span><span> </span><span>9001</span><span> </span><span>}</span><span> </span><span>],</span><span> </span><span>"links"</span><span>:</span><span> </span><span>[</span><span> </span><span>"local-redis"</span><span> </span><span>],</span><span> </span><span>"essential"</span><span>:</span><span> </span><span>true</span><span>,</span><span> </span><span>"memory"</span><span>:</span><span> </span><span>1024</span><span> </span><span>},</span><span> </span><span>{</span><span> </span><span>"name"</span><span>:</span><span> </span><span>"ADMIN_DOCKER_REPOSITORY_NAME"</span><span>,</span><span> </span><span>"image"</span><span>:</span><span> </span><span>"AWS_ACCOUNT_ID.dkr.ecr.AWS_REGION.amazonaws.com/ADMIN_DOCKER_REPOSITORY_NAME:Build.BuildNumber"</span><span>,</span><span> </span><span>"portMappings"</span><span>:</span><span> </span><span>[</span><span> </span><span>{</span><span> </span><span>"hostPort"</span><span>:</span><span> </span><span>9002</span><span>,</span><span> </span><span>"containerPort"</span><span>:</span><span> </span><span>9002</span><span> </span><span>}</span><span> </span><span>],</span><span> </span><span>"links"</span><span>:</span><span> </span><span>[</span><span> </span><span>"local-redis"</span><span> </span><span>],</span><span> </span><span>"essential"</span><span>:</span><span> </span><span>true</span><span>,</span><span> </span><span>"memory"</span><span>:</span><span> </span><span>1024</span><span> </span><span>}</span><span> </span><span>]</span><span> </span><span>}</span><span> </span>
{ "AWSEBDockerrunVersion": 2, "containerDefinitions": [ { "name": "local-redis", "image": "AWS_ACCOUNT_ID.dkr.ecr.AWS_REGION.amazonaws.com/local-redis:7.2.1", "portMappings": [ { "hostPort": 6379, "containerPort": 6379 } ], "essential": true, "memory": 1024 }, { "name": "customer_DOCKER_REPOSITORY_NAME", "image": "AWS_ACCOUNT_ID.dkr.ecr.AWS_REGION.amazonaws.com/customer_DOCKER_REPOSITORY_NAME:Build.BuildNumber", "portMappings": [ { "hostPort": 9001, "containerPort": 9001 } ], "links": [ "local-redis" ], "essential": true, "memory": 1024 }, { "name": "ADMIN_DOCKER_REPOSITORY_NAME", "image": "AWS_ACCOUNT_ID.dkr.ecr.AWS_REGION.amazonaws.com/ADMIN_DOCKER_REPOSITORY_NAME:Build.BuildNumber", "portMappings": [ { "hostPort": 9002, "containerPort": 9002 } ], "links": [ "local-redis" ], "essential": true, "memory": 1024 } ] }

Enter fullscreen mode Exit fullscreen mode

db-instance-properties.config

<span>option_settings</span><span>:</span>
<span># Sets a decoupled database for the connection</span>
<span># It can be created from a specific snapshot using DBSnapshotIdentifier</span>
<span># If you are happy with the database, you can choose to decouple it via command line later</span>
<span>aws:rds:dbinstance</span><span>:</span>
<span>DBAllocatedStorage</span><span>:</span> <span>'</span><span>5'</span>
<span>DBDeletionPolicy</span><span>:</span> <span>Retain</span>
<span>DBInstanceClass</span><span>:</span> <span>db.t4g.micro</span>
<span>DBSnapshotIdentifier</span><span>:</span> <span>'</span><span>DB_INITIAL_SNAPSHOT'</span>
<span>HasCoupledDatabase</span><span>:</span> <span>'</span><span>true'</span>
<span>MultiAZDatabase</span><span>:</span> <span>'</span><span>false'</span>
<span>DBName</span><span>:</span> <span>DB_NAME</span>
<span>DBEngine</span><span>:</span> <span>DB_ENGINE</span>
<span>DBEngineVersion</span><span>:</span> <span>DB_ENGINE_VERSION</span>
<span>DBUser</span><span>:</span> <span>DB_USERNAME</span>
<span>DBPassword</span><span>:</span> <span>DB_PASSWORD</span>
<span>option_settings</span><span>:</span>  
  <span># Sets a decoupled database for the connection</span>
  <span># It can be created from a specific snapshot using DBSnapshotIdentifier</span>
  <span># If you are happy with the database, you can choose to decouple it via command line later</span>
  <span>aws:rds:dbinstance</span><span>:</span>
    <span>DBAllocatedStorage</span><span>:</span> <span>'</span><span>5'</span>
    <span>DBDeletionPolicy</span><span>:</span> <span>Retain</span>
    <span>DBInstanceClass</span><span>:</span> <span>db.t4g.micro</span>    
    <span>DBSnapshotIdentifier</span><span>:</span> <span>'</span><span>DB_INITIAL_SNAPSHOT'</span>
    <span>HasCoupledDatabase</span><span>:</span> <span>'</span><span>true'</span>
    <span>MultiAZDatabase</span><span>:</span> <span>'</span><span>false'</span>
    <span>DBName</span><span>:</span> <span>DB_NAME</span>
    <span>DBEngine</span><span>:</span> <span>DB_ENGINE</span>
    <span>DBEngineVersion</span><span>:</span> <span>DB_ENGINE_VERSION</span>
    <span>DBUser</span><span>:</span> <span>DB_USERNAME</span>    
    <span>DBPassword</span><span>:</span> <span>DB_PASSWORD</span>
option_settings: # Sets a decoupled database for the connection # It can be created from a specific snapshot using DBSnapshotIdentifier # If you are happy with the database, you can choose to decouple it via command line later aws:rds:dbinstance: DBAllocatedStorage: '5' DBDeletionPolicy: Retain DBInstanceClass: db.t4g.micro DBSnapshotIdentifier: 'DB_INITIAL_SNAPSHOT' HasCoupledDatabase: 'true' MultiAZDatabase: 'false' DBName: DB_NAME DBEngine: DB_ENGINE DBEngineVersion: DB_ENGINE_VERSION DBUser: DB_USERNAME DBPassword: DB_PASSWORD

Enter fullscreen mode Exit fullscreen mode

network-load-balancer.config

<span>option_settings</span><span>:</span>
<span># Set the instance type for EC2 instances to t3.large.</span>
<span>aws:ec2:instances</span><span>:</span>
<span>InstanceTypes</span><span>:</span> <span>t3.large</span>
<span># Set the instance type for Auto Scaling launch configuration to t3.large.</span>
<span>aws:autoscaling:launchconfiguration</span><span>:</span>
<span>InstanceType</span><span>:</span> <span>t3.large</span>
<span># Disable the listener on port 80.</span>
<span>aws:elbv2:listener:default</span><span>:</span>
<span>ListenerEnabled</span><span>:</span> <span>false</span>
<span># Configure Elastic Beanstalk to listen on port 9001.</span>
<span>aws:elbv2:listener:9001</span><span>:</span>
<span>DefaultProcess</span><span>:</span> <span>default</span>
<span>ListenerEnabled</span><span>:</span> <span>'</span><span>true'</span>
<span>Protocol</span><span>:</span> <span>HTTP</span>
<span>Rules</span><span>:</span> <span>null</span>
<span>SSLCertificateArns</span><span>:</span> <span>null</span>
<span>SSLPolicy</span><span>:</span> <span>null</span>
<span># Configure Elastic Beanstalk to listen on port 9002.</span>
<span>aws:elbv2:listener:9002</span><span>:</span>
<span>DefaultProcess</span><span>:</span> <span>admin</span>
<span>ListenerEnabled</span><span>:</span> <span>'</span><span>true'</span>
<span>Protocol</span><span>:</span> <span>HTTP</span>
<span>Rules</span><span>:</span> <span>null</span>
<span>SSLCertificateArns</span><span>:</span> <span>null</span>
<span>SSLPolicy</span><span>:</span> <span>null</span>
<span># Configure default Health endpoint to be Customer health</span>
<span>aws:elasticbeanstalk:environment:process:default</span><span>:</span>
<span>DeregistrationDelay</span><span>:</span> <span>'</span><span>20'</span>
<span>HealthCheckInterval</span><span>:</span> <span>'</span><span>15'</span>
<span>HealthCheckPath</span><span>:</span> <span>/api/customer/health</span>
<span>HealthCheckTimeout</span><span>:</span> <span>'</span><span>5'</span>
<span>HealthyThresholdCount</span><span>:</span> <span>'</span><span>3'</span>
<span>MatcherHTTPCode</span><span>:</span> <span>'</span><span>200'</span>
<span>Port</span><span>:</span> <span>'</span><span>9001'</span>
<span>Protocol</span><span>:</span> <span>HTTP</span>
<span>StickinessEnabled</span><span>:</span> <span>'</span><span>false'</span>
<span>StickinessLBCookieDuration</span><span>:</span> <span>'</span><span>86400'</span>
<span>StickinessType</span><span>:</span> <span>lb_cookie</span>
<span>UnhealthyThresholdCount</span><span>:</span> <span>'</span><span>5'</span>
<span># Configure additional Health endpoint to be Admin health</span>
<span>admin.aws:elasticbeanstalk:environment:process:admin</span><span>:</span>
<span>DeregistrationDelay</span><span>:</span> <span>'</span><span>20'</span>
<span>HealthCheckInterval</span><span>:</span> <span>'</span><span>15'</span>
<span>HealthCheckPath</span><span>:</span> <span>/api/admin/health</span>
<span>HealthCheckTimeout</span><span>:</span> <span>'</span><span>5'</span>
<span>HealthyThresholdCount</span><span>:</span> <span>'</span><span>3'</span>
<span>MatcherHTTPCode</span><span>:</span> <span>'</span><span>200'</span>
<span>Port</span><span>:</span> <span>'</span><span>9002'</span>
<span>Protocol</span><span>:</span> <span>HTTP</span>
<span>StickinessEnabled</span><span>:</span> <span>'</span><span>false'</span>
<span>StickinessLBCookieDuration</span><span>:</span> <span>'</span><span>86400'</span>
<span>StickinessType</span><span>:</span> <span>lb_cookie</span>
<span>UnhealthyThresholdCount</span><span>:</span> <span>'</span><span>5'</span>
<span>option_settings</span><span>:</span>
  <span># Set the instance type for EC2 instances to t3.large.</span>
  <span>aws:ec2:instances</span><span>:</span>
    <span>InstanceTypes</span><span>:</span> <span>t3.large</span>

  <span># Set the instance type for Auto Scaling launch configuration to t3.large.</span>
  <span>aws:autoscaling:launchconfiguration</span><span>:</span>
    <span>InstanceType</span><span>:</span> <span>t3.large</span>

  <span># Disable the listener on port 80.</span>
  <span>aws:elbv2:listener:default</span><span>:</span>
    <span>ListenerEnabled</span><span>:</span> <span>false</span>

  <span># Configure Elastic Beanstalk to listen on port 9001.</span>
  <span>aws:elbv2:listener:9001</span><span>:</span>
      <span>DefaultProcess</span><span>:</span> <span>default</span>
      <span>ListenerEnabled</span><span>:</span> <span>'</span><span>true'</span>
      <span>Protocol</span><span>:</span> <span>HTTP</span>
      <span>Rules</span><span>:</span> <span>null</span>
      <span>SSLCertificateArns</span><span>:</span> <span>null</span>
      <span>SSLPolicy</span><span>:</span> <span>null</span>

  <span># Configure Elastic Beanstalk to listen on port 9002.</span>
  <span>aws:elbv2:listener:9002</span><span>:</span>
    <span>DefaultProcess</span><span>:</span> <span>admin</span>
    <span>ListenerEnabled</span><span>:</span> <span>'</span><span>true'</span>
    <span>Protocol</span><span>:</span> <span>HTTP</span>
    <span>Rules</span><span>:</span> <span>null</span>
    <span>SSLCertificateArns</span><span>:</span> <span>null</span>
    <span>SSLPolicy</span><span>:</span> <span>null</span>

  <span># Configure default Health endpoint to be Customer health</span>
  <span>aws:elasticbeanstalk:environment:process:default</span><span>:</span>
    <span>DeregistrationDelay</span><span>:</span> <span>'</span><span>20'</span>
    <span>HealthCheckInterval</span><span>:</span> <span>'</span><span>15'</span>
    <span>HealthCheckPath</span><span>:</span> <span>/api/customer/health</span>
    <span>HealthCheckTimeout</span><span>:</span> <span>'</span><span>5'</span>
    <span>HealthyThresholdCount</span><span>:</span> <span>'</span><span>3'</span>
    <span>MatcherHTTPCode</span><span>:</span> <span>'</span><span>200'</span>
    <span>Port</span><span>:</span> <span>'</span><span>9001'</span>
    <span>Protocol</span><span>:</span> <span>HTTP</span>
    <span>StickinessEnabled</span><span>:</span> <span>'</span><span>false'</span>
    <span>StickinessLBCookieDuration</span><span>:</span> <span>'</span><span>86400'</span>
    <span>StickinessType</span><span>:</span> <span>lb_cookie</span>
    <span>UnhealthyThresholdCount</span><span>:</span> <span>'</span><span>5'</span>

  <span># Configure additional Health endpoint to be Admin health</span>
  <span>admin.aws:elasticbeanstalk:environment:process:admin</span><span>:</span>
    <span>DeregistrationDelay</span><span>:</span> <span>'</span><span>20'</span>
    <span>HealthCheckInterval</span><span>:</span> <span>'</span><span>15'</span>
    <span>HealthCheckPath</span><span>:</span> <span>/api/admin/health</span>
    <span>HealthCheckTimeout</span><span>:</span> <span>'</span><span>5'</span>
    <span>HealthyThresholdCount</span><span>:</span> <span>'</span><span>3'</span>
    <span>MatcherHTTPCode</span><span>:</span> <span>'</span><span>200'</span>
    <span>Port</span><span>:</span> <span>'</span><span>9002'</span>
    <span>Protocol</span><span>:</span> <span>HTTP</span>
    <span>StickinessEnabled</span><span>:</span> <span>'</span><span>false'</span>
    <span>StickinessLBCookieDuration</span><span>:</span> <span>'</span><span>86400'</span>
    <span>StickinessType</span><span>:</span> <span>lb_cookie</span>
    <span>UnhealthyThresholdCount</span><span>:</span> <span>'</span><span>5'</span>
option_settings: # Set the instance type for EC2 instances to t3.large. aws:ec2:instances: InstanceTypes: t3.large # Set the instance type for Auto Scaling launch configuration to t3.large. aws:autoscaling:launchconfiguration: InstanceType: t3.large # Disable the listener on port 80. aws:elbv2:listener:default: ListenerEnabled: false # Configure Elastic Beanstalk to listen on port 9001. aws:elbv2:listener:9001: DefaultProcess: default ListenerEnabled: 'true' Protocol: HTTP Rules: null SSLCertificateArns: null SSLPolicy: null # Configure Elastic Beanstalk to listen on port 9002. aws:elbv2:listener:9002: DefaultProcess: admin ListenerEnabled: 'true' Protocol: HTTP Rules: null SSLCertificateArns: null SSLPolicy: null # Configure default Health endpoint to be Customer health aws:elasticbeanstalk:environment:process:default: DeregistrationDelay: '20' HealthCheckInterval: '15' HealthCheckPath: /api/customer/health HealthCheckTimeout: '5' HealthyThresholdCount: '3' MatcherHTTPCode: '200' Port: '9001' Protocol: HTTP StickinessEnabled: 'false' StickinessLBCookieDuration: '86400' StickinessType: lb_cookie UnhealthyThresholdCount: '5' # Configure additional Health endpoint to be Admin health admin.aws:elasticbeanstalk:environment:process:admin: DeregistrationDelay: '20' HealthCheckInterval: '15' HealthCheckPath: /api/admin/health HealthCheckTimeout: '5' HealthyThresholdCount: '3' MatcherHTTPCode: '200' Port: '9002' Protocol: HTTP StickinessEnabled: 'false' StickinessLBCookieDuration: '86400' StickinessType: lb_cookie UnhealthyThresholdCount: '5'

Enter fullscreen mode Exit fullscreen mode

Inital AWS Elastic Beanstalk setup

Provided the desired images are already in ECR, I first initialized EB after installing AWS and EB CLI with: eb init

<span>Select</span><span> </span><span>a</span><span> </span><span>default</span><span> </span><span>region</span><span> </span><span>1</span><span>)</span><span> </span><span>us-east-1</span><span> </span><span>:</span><span> </span><span>US</span><span> </span><span>East</span><span> </span><span>(</span><span>N.</span><span> </span><span>Virginia</span><span>)</span><span> </span><span>2</span><span>)</span><span> </span><span>us-west-1</span><span> </span><span>:</span><span> </span><span>US</span><span> </span><span>West</span><span> </span><span>(</span><span>N.</span><span> </span><span>California</span><span>)</span><span> </span><span>3</span><span>)</span><span> </span><span>us-west-2</span><span> </span><span>:</span><span> </span><span>US</span><span> </span><span>West</span><span> </span><span>(</span><span>Oregon</span><span>)</span><span> </span><span>4</span><span>)</span><span> </span><span>eu-west-1</span><span> </span><span>:</span><span> </span><span>EU</span><span> </span><span>(</span><span>Ireland</span><span>)</span><span> </span><span>5</span><span>)</span><span> </span><span>eu-central-1</span><span> </span><span>:</span><span> </span><span>EU</span><span> </span><span>(</span><span>Frankfurt</span><span>)</span><span> </span><span>6</span><span>)</span><span> </span><span>ap-south-1</span><span> </span><span>:</span><span> </span><span>Asia</span><span> </span><span>Pacific</span><span> </span><span>(</span><span>Mumbai</span><span>)</span><span> </span><span>7</span><span>)</span><span> </span><span>ap-southeast-1</span><span> </span><span>:</span><span> </span><span>Asia</span><span> </span><span>Pacific</span><span> </span><span>(</span><span>Singapore</span><span>)</span><span> </span><span>8</span><span>)</span><span> </span><span>ap-southeast-2</span><span> </span><span>:</span><span> </span><span>Asia</span><span> </span><span>Pacific</span><span> </span><span>(</span><span>Sydney</span><span>)</span><span> </span><span>9</span><span>)</span><span> </span><span>ap-northeast-1</span><span> </span><span>:</span><span> </span><span>Asia</span><span> </span><span>Pacific</span><span> </span><span>(</span><span>Tokyo</span><span>)</span><span> </span><span>10</span><span>)</span><span> </span><span>ap-northeast-2</span><span> </span><span>:</span><span> </span><span>Asia</span><span> </span><span>Pacific</span><span> </span><span>(</span><span>Seoul</span><span>)</span><span> </span><span>11</span><span>)</span><span> </span><span>sa-east-1</span><span> </span><span>:</span><span> </span><span>South</span><span> </span><span>America</span><span> </span><span>(</span><span>Sao</span><span> </span><span>Paulo</span><span>)</span><span> </span><span>12</span><span>)</span><span> </span><span>cn-north-1</span><span> </span><span>:</span><span> </span><span>China</span><span> </span><span>(</span><span>Beijing</span><span>)</span><span> </span><span>13</span><span>)</span><span> </span><span>cn-northwest-1</span><span> </span><span>:</span><span> </span><span>China</span><span> </span><span>(</span><span>Ningxia</span><span>)</span><span> </span><span>14</span><span>)</span><span> </span><span>us-east-2</span><span> </span><span>:</span><span> </span><span>US</span><span> </span><span>East</span><span> </span><span>(</span><span>Ohio</span><span>)</span><span> </span><span>15</span><span>)</span><span> </span><span>ca-central-1</span><span> </span><span>:</span><span> </span><span>Canada</span><span> </span><span>(</span><span>Central</span><span>)</span><span> </span><span>16</span><span>)</span><span> </span><span>eu-west-2</span><span> </span><span>:</span><span> </span><span>EU</span><span> </span><span>(</span><span>London</span><span>)</span><span> </span><span>17</span><span>)</span><span> </span><span>eu-west-3</span><span> </span><span>:</span><span> </span><span>EU</span><span> </span><span>(</span><span>Paris</span><span>)</span><span> </span><span>18</span><span>)</span><span> </span><span>eu-north-1</span><span> </span><span>:</span><span> </span><span>EU</span><span> </span><span>(</span><span>Stockholm</span><span>)</span><span> </span><span>19</span><span>)</span><span> </span><span>eu-south-1</span><span> </span><span>:</span><span> </span><span>EU</span><span> </span><span>(</span><span>Milano</span><span>)</span><span> </span><span>20</span><span>)</span><span> </span><span>ap-east-1</span><span> </span><span>:</span><span> </span><span>Asia</span><span> </span><span>Pacific</span><span> </span><span>(</span><span>Hong</span><span> </span><span>Kong</span><span>)</span><span> </span><span>21</span><span>)</span><span> </span><span>me-south-1</span><span> </span><span>:</span><span> </span><span>Middle</span><span> </span><span>East</span><span> </span><span>(</span><span>Bahrain</span><span>)</span><span> </span><span>22</span><span>)</span><span> </span><span>il-central-1</span><span> </span><span>:</span><span> </span><span>Middle</span><span> </span><span>East</span><span> </span><span>(</span><span>Israel</span><span>)</span><span> </span><span>23</span><span>)</span><span> </span><span>af-south-1</span><span> </span><span>:</span><span> </span><span>Africa</span><span> </span><span>(</span><span>Cape</span><span> </span><span>Town</span><span>)</span><span> </span><span>24</span><span>)</span><span> </span><span>ap-southeast-3</span><span> </span><span>:</span><span> </span><span>Asia</span><span> </span><span>Pacific</span><span> </span><span>(</span><span>Jakarta</span><span>)</span><span> </span><span>25</span><span>)</span><span> </span><span>ap-northeast-3</span><span> </span><span>:</span><span> </span><span>Asia</span><span> </span><span>Pacific</span><span> </span><span>(</span><span>Osaka</span><span>)</span><span> </span><span>(</span><span>default</span><span> </span><span>is</span><span> </span><span>3</span><span>):</span><span> </span><span>19</span><span> </span><span>Enter</span><span> </span><span>Application</span><span> </span><span>Name</span><span> </span><span>(</span><span>default</span><span> </span><span>is</span><span> </span><span>"eb_deploy"</span><span>):</span><span> </span><span>MyJavaAPI-newEnv</span><span> </span><span>Application</span><span> </span><span>MyJavaAPI-newEnv</span><span> </span><span>has</span><span> </span><span>been</span><span> </span><span>created.</span><span> </span><span>It</span><span> </span><span>appears</span><span> </span><span>you</span><span> </span><span>are</span><span> </span><span>using</span><span> </span><span>Docker.</span><span> </span><span>Is</span><span> </span><span>this</span><span> </span><span>correct</span><span>?</span><span> </span><span>(</span><span>Y/n</span><span>):</span><span> </span><span>y</span><span> </span><span>Select</span><span> </span><span>a</span><span> </span><span>platform</span><span> </span><span>branch.</span><span> </span><span>1</span><span>)</span><span> </span><span>Docker</span><span> </span><span>running</span><span> </span><span>on</span><span> </span><span>64bit</span><span> </span><span>Amazon</span><span> </span><span>Linux</span><span> </span><span>2023</span><span> </span><span>2</span><span>)</span><span> </span><span>ECS</span><span> </span><span>running</span><span> </span><span>on</span><span> </span><span>64bit</span><span> </span><span>Amazon</span><span> </span><span>Linux</span><span> </span><span>2023</span><span> </span><span>3</span><span>)</span><span> </span><span>Docker</span><span> </span><span>running</span><span> </span><span>on</span><span> </span><span>64bit</span><span> </span><span>Amazon</span><span> </span><span>Linux</span><span> </span><span>2</span><span> </span><span>4</span><span>)</span><span> </span><span>ECS</span><span> </span><span>running</span><span> </span><span>on</span><span> </span><span>64bit</span><span> </span><span>Amazon</span><span> </span><span>Linux</span><span> </span><span>2</span><span> </span><span>(</span><span>default</span><span> </span><span>is</span><span> </span><span>1</span><span>):</span><span> </span><span>2</span><span> </span><span>Cannot</span><span> </span><span>setup</span><span> </span><span>CodeCommit</span><span> </span><span>because</span><span> </span><span>there</span><span> </span><span>is</span><span> </span><span>no</span><span> </span><span>Source</span><span> </span><span>Control</span><span> </span><span>setup</span><span>,</span><span> </span><span>continuing</span><span> </span><span>with</span><span> </span><span>initialization</span><span> </span><span>Do</span><span> </span><span>you</span><span> </span><span>want</span><span> </span><span>to</span><span> </span><span>set</span><span> </span><span>up</span><span> </span><span>SSH</span><span> </span><span>for</span><span> </span><span>your</span><span> </span><span>instances</span><span>?</span><span> </span><span>(</span><span>Y/n</span><span>):</span><span> </span><span>y</span><span> </span><span>Select</span><span> </span><span>a</span><span> </span><span>keypair.</span><span> </span><span>1</span><span>)</span><span> </span><span>existing_pair</span><span> </span><span>2</span><span>)</span><span> </span><span>[</span><span> </span><span>Create</span><span> </span><span>new</span><span> </span><span>KeyPair</span><span> </span><span>]</span><span> </span><span>(</span><span>default</span><span> </span><span>is</span><span> </span><span>1</span><span>):</span><span> </span><span>2</span><span> </span><span>Type</span><span> </span><span>a</span><span> </span><span>keypair</span><span> </span><span>name.</span><span> </span><span>(</span><span>Default</span><span> </span><span>is</span><span> </span><span>aws-eb</span><span>):</span><span> </span><span>MyJavaSolutionAPI_pair</span><span> </span><span>Generating</span><span> </span><span>public/private</span><span> </span><span>rsa</span><span> </span><span>key</span><span> </span><span>pair.</span><span> </span><span>Enter</span><span> </span><span>passphrase</span><span> </span><span>(</span><span>empty</span><span> </span><span>for</span><span> </span><span>no</span><span> </span><span>passphrase</span><span>):</span><span> </span><span>Enter</span><span> </span><span>same</span><span> </span><span>passphrase</span><span> </span><span>again:</span><span> </span><span>Your</span><span> </span><span>identification</span><span> </span><span>has</span><span> </span><span>been</span><span> </span><span>saved</span><span> </span><span>in</span><span> </span><span>C:\Users\Username\.ssh\MyJavaSolutionAPI_pair.</span><span> </span><span>Your</span><span> </span><span>public</span><span> </span><span>key</span><span> </span><span>has</span><span> </span><span>been</span><span> </span><span>saved</span><span> </span><span>in</span><span> </span><span>C:\Users\Username\.ssh\MyJavaSolutionAPI_pair.pub.</span><span> </span><span>The</span><span> </span><span>key</span><span> </span><span>fingerprint</span><span> </span><span>is:</span><span> </span><span>SHA256:.../te34</span><span> </span><span>MyJavaSolutionAPI_pair</span><span> </span><span>The</span><span> </span><span>key</span><span>'s randomart image is: ... Enter passphrase: WARNING: Uploaded SSH public key for "MyJavaSolutionAPI_pair" into EC2 for region ... </span>
<span>Select</span><span> </span><span>a</span><span> </span><span>default</span><span> </span><span>region</span><span> </span><span>1</span><span>)</span><span> </span><span>us-east-1</span><span> </span><span>:</span><span> </span><span>US</span><span> </span><span>East</span><span> </span><span>(</span><span>N.</span><span> </span><span>Virginia</span><span>)</span><span> </span><span>2</span><span>)</span><span> </span><span>us-west-1</span><span> </span><span>:</span><span> </span><span>US</span><span> </span><span>West</span><span> </span><span>(</span><span>N.</span><span> </span><span>California</span><span>)</span><span> </span><span>3</span><span>)</span><span> </span><span>us-west-2</span><span> </span><span>:</span><span> </span><span>US</span><span> </span><span>West</span><span> </span><span>(</span><span>Oregon</span><span>)</span><span> </span><span>4</span><span>)</span><span> </span><span>eu-west-1</span><span> </span><span>:</span><span> </span><span>EU</span><span> </span><span>(</span><span>Ireland</span><span>)</span><span> </span><span>5</span><span>)</span><span> </span><span>eu-central-1</span><span> </span><span>:</span><span> </span><span>EU</span><span> </span><span>(</span><span>Frankfurt</span><span>)</span><span> </span><span>6</span><span>)</span><span> </span><span>ap-south-1</span><span> </span><span>:</span><span> </span><span>Asia</span><span> </span><span>Pacific</span><span> </span><span>(</span><span>Mumbai</span><span>)</span><span> </span><span>7</span><span>)</span><span> </span><span>ap-southeast-1</span><span> </span><span>:</span><span> </span><span>Asia</span><span> </span><span>Pacific</span><span> </span><span>(</span><span>Singapore</span><span>)</span><span> </span><span>8</span><span>)</span><span> </span><span>ap-southeast-2</span><span> </span><span>:</span><span> </span><span>Asia</span><span> </span><span>Pacific</span><span> </span><span>(</span><span>Sydney</span><span>)</span><span> </span><span>9</span><span>)</span><span> </span><span>ap-northeast-1</span><span> </span><span>:</span><span> </span><span>Asia</span><span> </span><span>Pacific</span><span> </span><span>(</span><span>Tokyo</span><span>)</span><span> </span><span>10</span><span>)</span><span> </span><span>ap-northeast-2</span><span> </span><span>:</span><span> </span><span>Asia</span><span> </span><span>Pacific</span><span> </span><span>(</span><span>Seoul</span><span>)</span><span> </span><span>11</span><span>)</span><span> </span><span>sa-east-1</span><span> </span><span>:</span><span> </span><span>South</span><span> </span><span>America</span><span> </span><span>(</span><span>Sao</span><span> </span><span>Paulo</span><span>)</span><span> </span><span>12</span><span>)</span><span> </span><span>cn-north-1</span><span> </span><span>:</span><span> </span><span>China</span><span> </span><span>(</span><span>Beijing</span><span>)</span><span> </span><span>13</span><span>)</span><span> </span><span>cn-northwest-1</span><span> </span><span>:</span><span> </span><span>China</span><span> </span><span>(</span><span>Ningxia</span><span>)</span><span> </span><span>14</span><span>)</span><span> </span><span>us-east-2</span><span> </span><span>:</span><span> </span><span>US</span><span> </span><span>East</span><span> </span><span>(</span><span>Ohio</span><span>)</span><span> </span><span>15</span><span>)</span><span> </span><span>ca-central-1</span><span> </span><span>:</span><span> </span><span>Canada</span><span> </span><span>(</span><span>Central</span><span>)</span><span> </span><span>16</span><span>)</span><span> </span><span>eu-west-2</span><span> </span><span>:</span><span> </span><span>EU</span><span> </span><span>(</span><span>London</span><span>)</span><span> </span><span>17</span><span>)</span><span> </span><span>eu-west-3</span><span> </span><span>:</span><span> </span><span>EU</span><span> </span><span>(</span><span>Paris</span><span>)</span><span> </span><span>18</span><span>)</span><span> </span><span>eu-north-1</span><span> </span><span>:</span><span> </span><span>EU</span><span> </span><span>(</span><span>Stockholm</span><span>)</span><span> </span><span>19</span><span>)</span><span> </span><span>eu-south-1</span><span> </span><span>:</span><span> </span><span>EU</span><span> </span><span>(</span><span>Milano</span><span>)</span><span> </span><span>20</span><span>)</span><span> </span><span>ap-east-1</span><span> </span><span>:</span><span> </span><span>Asia</span><span> </span><span>Pacific</span><span> </span><span>(</span><span>Hong</span><span> </span><span>Kong</span><span>)</span><span> </span><span>21</span><span>)</span><span> </span><span>me-south-1</span><span> </span><span>:</span><span> </span><span>Middle</span><span> </span><span>East</span><span> </span><span>(</span><span>Bahrain</span><span>)</span><span> </span><span>22</span><span>)</span><span> </span><span>il-central-1</span><span> </span><span>:</span><span> </span><span>Middle</span><span> </span><span>East</span><span> </span><span>(</span><span>Israel</span><span>)</span><span> </span><span>23</span><span>)</span><span> </span><span>af-south-1</span><span> </span><span>:</span><span> </span><span>Africa</span><span> </span><span>(</span><span>Cape</span><span> </span><span>Town</span><span>)</span><span> </span><span>24</span><span>)</span><span> </span><span>ap-southeast-3</span><span> </span><span>:</span><span> </span><span>Asia</span><span> </span><span>Pacific</span><span> </span><span>(</span><span>Jakarta</span><span>)</span><span> </span><span>25</span><span>)</span><span> </span><span>ap-northeast-3</span><span> </span><span>:</span><span> </span><span>Asia</span><span> </span><span>Pacific</span><span> </span><span>(</span><span>Osaka</span><span>)</span><span> </span><span>(</span><span>default</span><span> </span><span>is</span><span> </span><span>3</span><span>):</span><span> </span><span>19</span><span> </span><span>Enter</span><span> </span><span>Application</span><span> </span><span>Name</span><span> </span><span>(</span><span>default</span><span> </span><span>is</span><span> </span><span>"eb_deploy"</span><span>):</span><span> </span><span>MyJavaAPI-newEnv</span><span> </span><span>Application</span><span> </span><span>MyJavaAPI-newEnv</span><span> </span><span>has</span><span> </span><span>been</span><span> </span><span>created.</span><span> </span><span>It</span><span> </span><span>appears</span><span> </span><span>you</span><span> </span><span>are</span><span> </span><span>using</span><span> </span><span>Docker.</span><span> </span><span>Is</span><span> </span><span>this</span><span> </span><span>correct</span><span>?</span><span> </span><span>(</span><span>Y/n</span><span>):</span><span> </span><span>y</span><span> </span><span>Select</span><span> </span><span>a</span><span> </span><span>platform</span><span> </span><span>branch.</span><span> </span><span>1</span><span>)</span><span> </span><span>Docker</span><span> </span><span>running</span><span> </span><span>on</span><span> </span><span>64bit</span><span> </span><span>Amazon</span><span> </span><span>Linux</span><span> </span><span>2023</span><span> </span><span>2</span><span>)</span><span> </span><span>ECS</span><span> </span><span>running</span><span> </span><span>on</span><span> </span><span>64bit</span><span> </span><span>Amazon</span><span> </span><span>Linux</span><span> </span><span>2023</span><span> </span><span>3</span><span>)</span><span> </span><span>Docker</span><span> </span><span>running</span><span> </span><span>on</span><span> </span><span>64bit</span><span> </span><span>Amazon</span><span> </span><span>Linux</span><span> </span><span>2</span><span> </span><span>4</span><span>)</span><span> </span><span>ECS</span><span> </span><span>running</span><span> </span><span>on</span><span> </span><span>64bit</span><span> </span><span>Amazon</span><span> </span><span>Linux</span><span> </span><span>2</span><span> </span><span>(</span><span>default</span><span> </span><span>is</span><span> </span><span>1</span><span>):</span><span> </span><span>2</span><span> </span><span>Cannot</span><span> </span><span>setup</span><span> </span><span>CodeCommit</span><span> </span><span>because</span><span> </span><span>there</span><span> </span><span>is</span><span> </span><span>no</span><span> </span><span>Source</span><span> </span><span>Control</span><span> </span><span>setup</span><span>,</span><span> </span><span>continuing</span><span> </span><span>with</span><span> </span><span>initialization</span><span> </span><span>Do</span><span> </span><span>you</span><span> </span><span>want</span><span> </span><span>to</span><span> </span><span>set</span><span> </span><span>up</span><span> </span><span>SSH</span><span> </span><span>for</span><span> </span><span>your</span><span> </span><span>instances</span><span>?</span><span> </span><span>(</span><span>Y/n</span><span>):</span><span> </span><span>y</span><span> </span><span>Select</span><span> </span><span>a</span><span> </span><span>keypair.</span><span> </span><span>1</span><span>)</span><span> </span><span>existing_pair</span><span> </span><span>2</span><span>)</span><span> </span><span>[</span><span> </span><span>Create</span><span> </span><span>new</span><span> </span><span>KeyPair</span><span> </span><span>]</span><span> </span><span>(</span><span>default</span><span> </span><span>is</span><span> </span><span>1</span><span>):</span><span> </span><span>2</span><span> </span><span>Type</span><span> </span><span>a</span><span> </span><span>keypair</span><span> </span><span>name.</span><span> </span><span>(</span><span>Default</span><span> </span><span>is</span><span> </span><span>aws-eb</span><span>):</span><span> </span><span>MyJavaSolutionAPI_pair</span><span> </span><span>Generating</span><span> </span><span>public/private</span><span> </span><span>rsa</span><span> </span><span>key</span><span> </span><span>pair.</span><span> </span><span>Enter</span><span> </span><span>passphrase</span><span> </span><span>(</span><span>empty</span><span> </span><span>for</span><span> </span><span>no</span><span> </span><span>passphrase</span><span>):</span><span> </span><span>Enter</span><span> </span><span>same</span><span> </span><span>passphrase</span><span> </span><span>again:</span><span> </span><span>Your</span><span> </span><span>identification</span><span> </span><span>has</span><span> </span><span>been</span><span> </span><span>saved</span><span> </span><span>in</span><span> </span><span>C:\Users\Username\.ssh\MyJavaSolutionAPI_pair.</span><span> </span><span>Your</span><span> </span><span>public</span><span> </span><span>key</span><span> </span><span>has</span><span> </span><span>been</span><span> </span><span>saved</span><span> </span><span>in</span><span> </span><span>C:\Users\Username\.ssh\MyJavaSolutionAPI_pair.pub.</span><span> </span><span>The</span><span> </span><span>key</span><span> </span><span>fingerprint</span><span> </span><span>is:</span><span> </span><span>SHA256:.../te34</span><span> </span><span>MyJavaSolutionAPI_pair</span><span> </span><span>The</span><span> </span><span>key</span><span>'s randomart image is: ... Enter passphrase: WARNING: Uploaded SSH public key for "MyJavaSolutionAPI_pair" into EC2 for region ... </span>
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) 19) eu-south-1 : EU (Milano) 20) ap-east-1 : Asia Pacific (Hong Kong) 21) me-south-1 : Middle East (Bahrain) 22) il-central-1 : Middle East (Israel) 23) af-south-1 : Africa (Cape Town) 24) ap-southeast-3 : Asia Pacific (Jakarta) 25) ap-northeast-3 : Asia Pacific (Osaka) (default is 3): 19 Enter Application Name (default is "eb_deploy"): MyJavaAPI-newEnv Application MyJavaAPI-newEnv has been created. It appears you are using Docker. Is this correct? (Y/n): y Select a platform branch. 1) Docker running on 64bit Amazon Linux 2023 2) ECS running on 64bit Amazon Linux 2023 3) Docker running on 64bit Amazon Linux 2 4) ECS running on 64bit Amazon Linux 2 (default is 1): 2 Cannot setup CodeCommit because there is no Source Control setup, continuing with initialization Do you want to set up SSH for your instances? (Y/n): y Select a keypair. 1) existing_pair 2) [ Create new KeyPair ] (default is 1): 2 Type a keypair name. (Default is aws-eb): MyJavaSolutionAPI_pair Generating public/private rsa key pair. Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in C:\Users\Username\.ssh\MyJavaSolutionAPI_pair. Your public key has been saved in C:\Users\Username\.ssh\MyJavaSolutionAPI_pair.pub. The key fingerprint is: SHA256:.../te34 MyJavaSolutionAPI_pair The key's randomart image is: ... Enter passphrase: WARNING: Uploaded SSH public key for "MyJavaSolutionAPI_pair" into EC2 for region ...

Enter fullscreen mode Exit fullscreen mode

Create

  • After the AWS Beanstalk Environment was initialized locally, run eb create to push the initial changes into the server
<span>Enter</span><span> </span><span>Environment</span><span> </span><span>Name</span><span> </span><span>(</span><span>default</span><span> </span><span>is</span><span> </span><span>MyJavaAPI-newEnv</span><span>):</span><span> </span><span>MyJavaAPI-newEnv</span><span> </span><span>Enter</span><span> </span><span>DNS</span><span> </span><span>CNAME</span><span> </span><span>prefix</span><span> </span><span>(</span><span>default</span><span> </span><span>is</span><span> </span><span>MyJavaAPI-newEnv</span><span>):</span><span> </span><span>Select</span><span> </span><span>a</span><span> </span><span>load</span><span> </span><span>balancer</span><span> </span><span>type</span><span> </span><span>1</span><span>)</span><span> </span><span>classic</span><span> </span><span>2</span><span>)</span><span> </span><span>application</span><span> </span><span>3</span><span>)</span><span> </span><span>network</span><span> </span><span>(</span><span>default</span><span> </span><span>is</span><span> </span><span>2</span><span>):</span><span> </span><span>2</span><span> </span><span>Would</span><span> </span><span>you</span><span> </span><span>like</span><span> </span><span>to</span><span> </span><span>enable</span><span> </span><span>Spot</span><span> </span><span>Fleet</span><span> </span><span>requests</span><span> </span><span>for</span><span> </span><span>this</span><span> </span><span>environment</span><span>?</span><span> </span><span>(</span><span>y/N</span><span>):</span><span> </span><span>n</span><span> </span><span>Creating</span><span> </span><span>application</span><span> </span><span>version</span><span> </span><span>archive</span><span> </span><span>"app-231023_153901209577"</span><span>.</span><span> </span><span>Uploading</span><span> </span><span>MyJavaAPI/app-231023_153901209577.zip</span><span> </span><span>to</span><span> </span><span>S3.</span><span> </span><span>This</span><span> </span><span>may</span><span> </span><span>take</span><span> </span><span>a</span><span> </span><span>while.</span><span> </span>
<span>Enter</span><span> </span><span>Environment</span><span> </span><span>Name</span><span> </span><span>(</span><span>default</span><span> </span><span>is</span><span> </span><span>MyJavaAPI-newEnv</span><span>):</span><span> </span><span>MyJavaAPI-newEnv</span><span> </span><span>Enter</span><span> </span><span>DNS</span><span> </span><span>CNAME</span><span> </span><span>prefix</span><span> </span><span>(</span><span>default</span><span> </span><span>is</span><span> </span><span>MyJavaAPI-newEnv</span><span>):</span><span> </span><span>Select</span><span> </span><span>a</span><span> </span><span>load</span><span> </span><span>balancer</span><span> </span><span>type</span><span> </span><span>1</span><span>)</span><span> </span><span>classic</span><span> </span><span>2</span><span>)</span><span> </span><span>application</span><span> </span><span>3</span><span>)</span><span> </span><span>network</span><span> </span><span>(</span><span>default</span><span> </span><span>is</span><span> </span><span>2</span><span>):</span><span> </span><span>2</span><span> </span><span>Would</span><span> </span><span>you</span><span> </span><span>like</span><span> </span><span>to</span><span> </span><span>enable</span><span> </span><span>Spot</span><span> </span><span>Fleet</span><span> </span><span>requests</span><span> </span><span>for</span><span> </span><span>this</span><span> </span><span>environment</span><span>?</span><span> </span><span>(</span><span>y/N</span><span>):</span><span> </span><span>n</span><span> </span><span>Creating</span><span> </span><span>application</span><span> </span><span>version</span><span> </span><span>archive</span><span> </span><span>"app-231023_153901209577"</span><span>.</span><span> </span><span>Uploading</span><span> </span><span>MyJavaAPI/app-231023_153901209577.zip</span><span> </span><span>to</span><span> </span><span>S3.</span><span> </span><span>This</span><span> </span><span>may</span><span> </span><span>take</span><span> </span><span>a</span><span> </span><span>while.</span><span> </span>
Enter Environment Name (default is MyJavaAPI-newEnv): MyJavaAPI-newEnv Enter DNS CNAME prefix (default is MyJavaAPI-newEnv): Select a load balancer type 1) classic 2) application 3) network (default is 2): 2 Would you like to enable Spot Fleet requests for this environment? (y/N): n Creating application version archive "app-231023_153901209577". Uploading MyJavaAPI/app-231023_153901209577.zip to S3. This may take a while.

Enter fullscreen mode Exit fullscreen mode

If the configuration is applied correctly, then it will create a new EB application and environment, with a coupled RDS database, a EC2 instance, an S3 bucket containing the files, an ECS cluster and all necessary security groups.

Manually deploying a new version on AWS Elastic Beanstalk

Deploy

If the latest build was 20231026.21:
You can change the version in Dockerrun.aws.json and run

<span>eb</span><span> </span><span>deploy</span><span> </span><span>--label</span><span> </span><span>"20231026.21"</span><span> </span><span>--message</span><span> </span><span>"20231026.21"</span><span> </span><span>--process</span><span> </span>
<span>eb</span><span> </span><span>deploy</span><span> </span><span>--label</span><span> </span><span>"20231026.21"</span><span> </span><span>--message</span><span> </span><span>"20231026.21"</span><span> </span><span>--process</span><span> </span>
eb deploy --label "20231026.21" --message "20231026.21" --process

Enter fullscreen mode Exit fullscreen mode

This will result in a new application version in the server.

Config save

The configuration of a current version can be saved to be reused in different environments.

<span>eb</span><span> </span><span>config</span><span> </span><span>save</span><span> </span><span>--cfg</span><span> </span><span>my-api-v2-20231026.21</span><span> </span><span>--tags</span><span> </span><span>Environment</span><span>=</span><span>newEnv</span><span> </span>
<span>eb</span><span> </span><span>config</span><span> </span><span>save</span><span> </span><span>--cfg</span><span> </span><span>my-api-v2-20231026.21</span><span> </span><span>--tags</span><span> </span><span>Environment</span><span>=</span><span>newEnv</span><span> </span>
eb config save --cfg my-api-v2-20231026.21 --tags Environment=newEnv

Enter fullscreen mode Exit fullscreen mode

And with that we have an environment up and running with our 2 dockerized API images.
In the next post of this series I will show how to use Azure DevOps pipelines and release to Continuously Deploy this.

Migrating an Springboot Java API (4 Part Series)

1 Migrating an Springboot Java API: Part 1 – Docker
2 Migrating an Springboot Java API: Part 2 – Azure Build
3 Migrating an Springboot Java API: Part 3 – AWS ElasticBeanstalk
4 Migrating an Springboot Java API: Part 4 – Azure Release

原文链接:Migrating an Springboot Java API: Part 3 – AWS ElasticBeanstalk

© 版权声明
THE END
喜欢就支持一下吧
点赞9 分享
So what if we fall down? At least we are still young.
摔倒了又怎样,至少我们还年轻
评论 抢沙发

请登录后发表评论

    暂无评论内容