Статьи

Интеграция Spring boot и Elastic Beanstalk с использованием Cloudformation

AWS beanstalk — это веб-сервис amazon, который выполняет большую часть конфигурации за вас и создает инфраструктуру, подходящую для горизонтально масштабируемого приложения. Вместо Beanstalk другим подходом будет настройка балансировщиков нагрузки и автоматических групп отмены, что требует немного опыта и времени AWS.

В этом уроке мы собираемся загрузить приложение jar с пружинной загрузкой, используя amazonastic beanstalk и пакет формирования облаков.

Чем меньше, тем больше, поэтому мы будем использовать в качестве шаблона практически то же приложение весенней загрузки, которое было взято из официального руководства Spring .

Единственным изменением будет изменение rootProject.name на beanstalk-deploy и некоторые изменения в структуре пакета. Загрузка проекта с GitHub достаточно.

Тогда мы можем построить и запустить проект

1
2
gradlew build
java -jar build/libs/beanstalk-deployment-1.0-SNAPSHOT.jar

Следующим шагом является загрузка приложения на s3.

1
aws s3 cp build/libs/beanstalk-deployment-1.0-SNAPSHOT.jar s3://{you bucket name}/beanstalk-deployment-1.0-SNAPSHOT.jar

Вам необходимо установить клиент эластичного бобового стебля, так как он очень помогает в большинстве операций с бобовыми стеблями.

Поскольку мы будем использовать Java 8, я получу список с эластичными средами beanstalk, чтобы получить правильное SolutionStackName.

1
aws elasticbeanstalk list-available-solution-stacks |grep Java

Основываясь на результатах, я буду использовать имя стека «64bit Amazon Linux 2016.09 v2.3.0 под управлением Java 8».

Теперь мы готовы перейти к нашему скрипту облачной информации.

Мы укажем параметр, и это будет корзина, содержащая код приложения

1
2
3
4
5
"Parameters" : {
    "SourceCodeBucket" : {
      "Type" : "String"
    }
  }

Затем мы укажем название приложения

1
2
3
4
5
6
"SpringBootApplication": {
      "Type": "AWS::ElasticBeanstalk::Application",
      "Properties": {
        "Description":"Spring boot and elastic beanstalk"
      }
    }

Следующим шагом будет указание версии приложения

01
02
03
04
05
06
07
08
09
10
"SpringBootApplicationVersion": {
      "Type": "AWS::ElasticBeanstalk::ApplicationVersion",
      "Properties": {
        "ApplicationName":{"Ref":"SpringBootApplication"},
        "SourceBundle": {
                  "S3Bucket": {"Ref":"SourceCodeBucket"},
                  "S3Key": "beanstalk-deployment-1.0-SNAPSHOT.jar"
        }
      }
    }

И тогда мы указываем наш шаблон конфигурации.

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
"SpringBootBeanStalkConfigurationTemplate": {
      "Type": "AWS::ElasticBeanstalk::ConfigurationTemplate",
      "Properties": {
        "ApplicationName": {"Ref":"SpringBootApplication"},
        "Description":"A display of speed boot application",
        "OptionSettings": [
          {
            "Namespace": "aws:autoscaling:asg",
            "OptionName": "MinSize",
            "Value": "2"
          },
          {
            "Namespace": "aws:autoscaling:asg",
            "OptionName": "MaxSize",
            "Value": "2"
          },
          {
            "Namespace": "aws:elasticbeanstalk:environment",
            "OptionName": "EnvironmentType",
            "Value": "LoadBalanced"
          }
        ],
        "SolutionStackName": "64bit Amazon Linux 2016.09 v2.3.0 running Java 8"
      }
    }

Последним шагом будет склеивание вышеуказанных свойств путем определения среды

1
2
3
4
5
6
7
8
9
"SpringBootBeanstalkEnvironment": {
      "Type": "AWS::ElasticBeanstalk::Environment",
      "Properties": {
        "ApplicationName": {"Ref":"SpringBootApplication"},
        "EnvironmentName":"JavaBeanstalkEnvironment",
        "TemplateName": {"Ref":"SpringBootBeanStalkConfigurationTemplate"},
        "VersionLabel": {"Ref": "SpringBootApplicationVersion"}
      }
    }

Теперь вы готовы загрузить свой шаблон облачной информации и развернуть приложение beanstalk.

1
2
aws s3 cp beanstalkspring.template s3://{bucket with templates}/beanstalkspring.template
aws cloudformation create-stack --stack-name SpringBeanStalk --parameters ParameterKey=SourceCodeBucket,ParameterValue={bucket with code} --template-url https://s3.amazonaws.com/{bucket with templates}/beanstalkspring.template

Вы можете скачать полный исходный код и шаблон облачной информации с Github .