Публикация приложения в Elastic Beanstalk

в 10:42, , рубрики: Amazon Web Services, AWS, elasticbeanstalk, Git, Блог компании EPAM Systems Ukraine, метки: , ,

Привет! image

Сегодня я расскажу как легко создавать приложения в Elastic Beanstalk и публиковать их прямо из Git!

Для начала предлагаю установить утилиты командной строки для EB. Можно скачать отсюда, либо же воспользоваться моим скриптом для установки и обновления основных утилит по этой статье.

Установили. В консоли у нас появится команда eb, с которой мы и начнём.

1. Создание приложения

Для начала создадим папку приложения и инициализируем Git репозиторий. Например:

$ mkdir ~/Work/testapp/ && cd ~/Work/testapp/
$ git init

Создадим приложение Elastic Beanstalk

$ eb init

Вопросы от EB

To get your AWS Access Key ID and Secret Access Key, 
  visit "https://aws-portal.amazon.com/gp/aws/securityCredentials".
Enter your AWS Access Key ID: AKIA**********7KAQ
Enter your AWS Secret Access Key: puKfEWZwNr*******************wx7iwU/U6NnE
Select an AWS Elastic Beanstalk service region.
Available service regions are:
1) US East (Virginia)
2) US West (Oregon)
3) US West (North California)
4) EU West (Ireland)
5) Asia Pacific (Singapore)
6) Asia Pacific (Tokyo)
7) Asia Pacific (Sydney)
8) South America (Sao Paulo)
Select:  (1 to 8): 1
Enter an AWS Elastic Beanstalk application name (auto-generated value is "testapp"): testapp
Enter an AWS Elastic Beanstalk environment name (auto-generated value is "testapp-env"): 
Select a solution stack.
Available solution stacks are:
1) 32bit Amazon Linux running PHP 5.4
2) 64bit Amazon Linux running PHP 5.4
3) 32bit Amazon Linux running PHP 5.3
4) 64bit Amazon Linux running PHP 5.3
5) 64bit Windows Server 2008 R2 running IIS 7.5
6) 64bit Windows Server 2012 running IIS 8
7) 32bit Amazon Linux running Tomcat 7
8) 64bit Amazon Linux running Tomcat 7
9) 32bit Amazon Linux running Tomcat 6
10) 64bit Amazon Linux running Tomcat 6
11) 32bit Amazon Linux running Python
12) 64bit Amazon Linux running Python
13) 32bit Amazon Linux running Ruby 1.8.7
14) 64bit Amazon Linux running Ruby 1.8.7
15) 32bit Amazon Linux running Ruby 1.9.3
16) 64bit Amazon Linux running Ruby 1.9.3
Select:  (1 to 16): 2
Create an RDS DB Instance? [y/n]: n
Updated AWS Credential file at "/home/korjik/.elasticbeanstalk/aws_credential_file".

Отлично! В консоли у нас появится приложение:
image

Давайте его запустим через CLI:

$ eb start
Запуск приложения

Starting application "testapp".
Waiting for environment "testapp-env" to launch.
2012-12-21 11:36:54	INFO	createEnvironment is starting.
2012-12-21 11:37:00	INFO	Using elasticbeanstalk-us-east-1-8******7906425 as Amazon S3 storage bucket for environment data.
2012-12-21 11:37:35	INFO	Created load balancer named: awseb-e-m-AWSEBLoa-3Y756XH4GS6C
2012-12-21 11:37:51	INFO	Created security group named: awseb-e-mcmpmiq7vv-stack-AWSEBSecurityGroup-1P8Y0FB06SVMD
2012-12-21 11:37:57	INFO	Created Auto Scaling launch configuration named: awseb-e-mcmpmiq7vv-stack-AWSEBAutoScalingLaunchConfiguration-1PPFVPGQK4PV8
2012-12-21 11:39:09	INFO	Waiting for EC2 instances to launch. This may take a few minutes.
2012-12-21 11:39:09	INFO	Created Auto Scaling group named: awseb-e-mcmpmiq7vv-stack-AWSEBAutoScalingGroup-1WLKAEZBZ8ZGT
2012-12-21 11:40:45	INFO	Created Auto Scaling group policy named: arn:aws:autoscaling:us-east-1:8******7906425:scalingPolicy:8d0accbb-fa54-483a-a3c0-8b91921a738e:autoScalingGroupName/awseb-e-mcmpmiq7vv-stack-AWSEBAutoScalingGroup-1WLKAEZBZ8ZGT:policyName/awseb-e-mcmpmiq7vv-stack-AWSEBAutoScalingScaleDownPolicy-184TBBCOHLRB3
2012-12-21 11:40:50	INFO	Created CloudWatch alarm named: awseb-e-mcmpmiq7vv-stack-AWSEBCloudwatchAlarmLow-WZWD04T7WB4O
2012-12-21 11:40:53	INFO	Created Auto Scaling group policy named: arn:aws:autoscaling:us-east-1:8******7906425:scalingPolicy:acc43498-d4ce-4421-896b-84ea7eb05fb2:autoScalingGroupName/awseb-e-mcmpmiq7vv-stack-AWSEBAutoScalingGroup-1WLKAEZBZ8ZGT:policyName/awseb-e-mcmpmiq7vv-stack-AWSEBAutoScalingScaleUpPolicy-1GZEQ8O807OFD
2012-12-21 11:40:56	INFO	Created CloudWatch alarm named: awseb-e-mcmpmiq7vv-stack-AWSEBCloudwatchAlarmHigh-XLWNREY9ZVKY
Application is available at "testapp-env-p3n7aesmip.elasticbeanstalk.com".

Далее установим скрипты для Git в репозиртори:

$ cp -r ~/AWS_CLI_TOOLS/AWS-ElasticBeanstalk-CLI-2.3/AWSDevTools/Linux/* .
$ ./AWSDevTools-RepositorySetup.sh

В папке .git появились нужные файлы:

$ ll .git/AWSDevTools/
total 24
drwxr-xr-x 3 korjik korjik 4096 Dec 21 12:27 .
drwxrwxr-x 8 korjik korjik 4096 Dec 21 12:27 ..
drwxr-xr-x 2 korjik korjik 4096 Dec 21 12:27 aws
-rwxr-xr-x 1 korjik korjik 4372 Dec 21 12:27 aws.elasticbeanstalk.config
-rwxr-xr-x 1 korjik korjik 2798 Dec 21 12:27 aws.elasticbeanstalk.push

2. Деплой приложения

Итак, наше приложение готово, его нужно задеплоить.

Создадим самое простое что пришло в голову:

$ echo "<?php phpinfo(); ?>" > index.php

Добавим и закоммитим в git:

$ git add index.php
$ git commit -m "PHP INFO"

Ну и собственно деплой:

$ git aws.push --environment "testapp-env"
Counting objects: 3, done.
Writing objects: 100% (3/3), 240 bytes, done.
Total 3 (delta 0), reused 0 (delta 0)
remote: 
To https://AKIAII*********7KAQ:20121221T103218Z8abd2f8768ce64d97f85dd0902b5f8efadcf8148a227924464fe8e6fc41998a1@git.elasticbeanstalk.us-east-1.amazonaws.com/v1/repos/74657374617070/commitid/39383466343734663539393639396130316535336661353933656461383661333461353766636632/environment/746573746170702d656e76
 + 755988e...984f474 HEAD -> master (forced update)

Проверим, статус:

$ eb status
URL	: testapp-env-yp333cyrp2.elasticbeanstalk.com
Status	: Updating
Health	: Grey

Когда статус будет Ready проверяем!

Ну вот, приложение задеплоено и работает:
image

Собственно говоря, всё крайне просто. Вы легко можете создавать ветки приложения с помощью eb branch и деплоить из Git как угодно и куда угодно. В статье адрес приложения менялся — это были разные тесты. При деплое адрес не меняется.

А вообще, очень рекомендую почитать про Elastic Beanstalk.

Используете ли вы EB? Что-то интересное расскажете?

Автор: korjik

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js