Статьи

Начало работы с веб-сервисами Amazon и полностью автоматизированным выделением ресурсов за 15 минут

В ожидании нового проекта я хотел узнать что-то полезное. И поскольку во многих проектах нам необходимо оценивать и тестировать производительность разрабатываемого приложения, в то время как очень редко имеется достаточно оборудования для создания реалистичной нагрузки, я решил узнать больше о предоставлении виртуальных машин по требованию в облаке, а именно Amazon Web Services. (АМС).

Я многое узнал об инструментах, доступных для работы с AWS, и об автоматизации настройки ресурсов (экземпляры компьютеров, группы безопасности, базы данных и т. Д.) И автоматической настройке экземпляров виртуальных машин в облаке AWS. Я хотел бы представить краткое введение в AWS и краткий обзор инструментов и опций автоматизации. Если вы знакомы с AWS / EC2, возможно, вы захотите перепрыгнуть введение непосредственно в раздел автоматизации.

Почему AWS?

Amazon является ведущим поставщиком «инфраструктуры как услуги» и постоянно добавляет новые услуги в свои предложения. AWS позволяет создавать виртуальные машины по требованию, распределять их нагрузку, подключать их к «базе данных как службе» (с несколькими преимуществами по сравнению с базой данных, управляемой вручную) и различным другим службам, таким как уведомления, электронная почта и служба очередей. , Вы получаете доступ к встроенному мониторингу и можете развертывать приложения на их «платформе как сервисе», построенной на основе этого, сохраняя контроль над этими ресурсами более низкого уровня.

Следите за официальным блогом AWS, чтобы получать информацию о новых услугах, функциях и т. Д.

Начало работы с AWS

Чтобы создать учетную запись AWS, вам понадобится телефон и кредитная карта (которая будет взиматься, если вы пользуетесь какой-либо из платных услуг или превышаете лимиты бесплатного использования). Будьте внимательны во время процесса регистрации, поскольку пользовательский интерфейс не совсем защищен от ошибок. Это может занять до двух часов, прежде чем ваша учетная запись станет полностью функциональной.

Следующее, что нужно сделать, — это просмотреть Консоль управления AWS , которая позволяет создавать и настраивать различные сервисы и ресурсы, наиболее интересным из которых является Elastic Compute Cloud (EC2), где вы можете запускать новые виртуальные машины. Консоль управления не требует пояснений, хотя и не так удобна для пользователя, как хотелось бы. Возможно, вы захотите проверить эти снимки экрана, показывающие, как создать экземпляр EC2 в консоли управления.

Краткий обзор

Основное правило AWS заключается в том, что вы платите только за то, что используете, то есть за часы работы ваших экземпляров и трафика — см. Простой ежемесячный калькулятор AWS .

Наиболее важным ресурсом является EC2, поскольку он позволяет создавать виртуальные машины, называемые «экземплярами». Существуют различные типы примеров их памяти и вычислительной мощности. По умолчанию они являются временными и отбрасываются (прекращаются), как только вы перестаете их использовать. У вас также может быть экземпляр, поддерживаемый Elastic Block Storage (EBS), который позволяет вам остановить и запустить экземпляр снова с любым состоянием и сохраненными изменениями, Amazon взимает за это $ 0,10 / ГБ / месяц. Вы также можете подключить хранилище EBS как том к своему экземпляру, если вам нужно сохранить только некоторые данные. Нет быстрого способа воссоздать прерванный экземпляр, вам нужно снова пройти через мастер — вот где инструменты командной строки и автоматизация становятся удобными.

При настройке экземпляров EC2 вам, вероятно, также потребуется назначить их в одну и ту же группу безопасности и настроить, какие порты для кого открыты в группе безопасности (по умолчанию вы не можете даже использовать SSH).

Если вы хотите узнать все о EC2, перейдите к Руководству пользователя Amazon EC2 .

Помимо EC2 есть также много других интересных сервисов, таких как Elastic Beanstalk (PaaS, в настоящее время для веб-приложений Java, использующий Tomcat), распределенное хранилище S3 и т. Д. Есть также некоторые дополнительные сервисы, такие как Amazon CloudWatch , который представляет собой (производительность). ) инструмент мониторинга вашей инфраструктуры AWS. (Что может быть дополнено мониторингом New Relic для еще большего понимания приложения.)

Использование Amazon Free Tier

Amazon предоставляет новым клиентам определенное количество ресурсов бесплатно в течение одного года, вам нужно платить, только если вы потребляете больше. Он включает, например, непрерывный запуск экземпляра micro EC2, поддерживаемого EBS (т. Е. Он постоянен, вы можете остановить и запустить его снова), 15 ГБ трафика, 10 ГБ хранилища EBS, 5 ГБ хранилища S3, 10 метрик CloudWatch и т. Д. К сожалению, он не включает управляемую Amazon базу данных MySQL / Oracle ( RDS ), хотя они предоставили 1 ГБ пространства в Amazon SimpleDB (хранилище значений ключей NoSQL).

Это означает, что у вас может быть постоянно запущенный экземпляр EC2 Micro (613 МБ памяти) бесплатно. Вы можете использовать его в качестве своей базы в облаке, например, потому что трафик между двумя экземплярами EC2 быстрее / дешевле и потому, что он имеет полный доступ к машинам в пределах одной группы безопасности.

Лучшим выбором, вероятно, будет создание вашего экземпляра на основе Amazon Linux AMI , представляющего собой разновидность RedHat Linux, оптимизированной для AWS, оснащенной большинством инструментов командной строки API AWS и CloudInit для автоматической настройки системы (описанной ниже). Я бы порекомендовал вам просмотреть руководство пользователя, в котором описано, какие инструменты доступны и как использовать CloudInit.

А как насчет автоматизации?

Консоль управления AWS удобна, если вы что-то делаете впервые, но мастера слишком трудоемки для повторяющихся задач. Особенно, если вам нужно настроить более одного экземпляра — скажем, экземпляр базы данных RDS, экземпляр компьютера EC2 и соответствующие группы безопасности или несколько идентичных экземпляров. Мы рассмотрим способы, как автоматизировать это.

Помимо настройки инфраструктуры, вам обычно также необходимо настроить экземпляры EC2 (по крайней мере, путем установки и запуска программного обеспечения, для которого они вам нужны). Вы можете войти в них через SSH, но разве не было бы замечательно иметь возможность автоматизировать это, особенно если вам нужно несколько подобных экземпляров?

Обратите внимание, что сейчас я занимаюсь только автоматизацией работы пользователя AWS. Также можно настроить AWS для автоматического запуска новых экземпляров EC2 при необходимости (например, когда нагрузка превышает предел), но это другая история.
Обзор:

  • Автоматизация обеспечения инфраструктуры:
    • Инструменты командной строки AWS API (или API-интерфейс AWS Java или сторонние инструменты / библиотеки)
    • AWS CloudFormation
  • Автоматизация установки ОС и ПО экземпляра:
    • Canonical CloudInit (Ubuntu и Amazon Linux AMI) — возможно, используя Puppet или Chef
    • Создание настроенного AMI

Автоматизация обеспечения инфраструктуры

Существует два известных варианта создания экземпляров EC2 и других ресурсов без Консоли управления AWS: инструменты командной строки API AWS и AWS CloudFormation.

Инструменты командной строки AWS API

Amazon предлагает инструменты командной строки для большинства своих услуг, таких как EC2 и RDS.
EC2 : Роберт Сосиновски опубликовал очень хорошие инструкции по запуску инструментов командной строки Amazon EC2 (которые не относятся к Mac OS X несмотря на его название) еще в 2008 году, но они все еще действительны, поэтому просто следуйте им, нет смысла повторять их здесь (в основном скачать, распаковать, установить переменные окружения, предоставить учетные данные). Кроме того, вы можете перейти на страницу загрузки и следовать официальным инструкциям . Я бы порекомендовал вам создать папку, включающую все инструменты => $ AWS_FOLDER / ec2 / и т. Д. Вместо ~ / .ec2 /.

Если вы хотите использовать другой регион AWS, отличный от заданного по умолчанию us-east-1, вам нужно также установить переменную среды EC2_URL, см. Список региональных конечных точек или команду ec2- description-region. Ex. (мой URL имеет ec2 в середине, в отличие от списка конечных точек, но, очевидно, это тоже работает):

1
export EC2_URL=https://eu-west-1.ec2.amazonaws.com

Настройка аутентификации для других инструментов : хотя документация для инструментов EC2 описывает только аутентификацию через сертификат X.509 (переменные среды EC2_PRIVATE_KEY, EC2_CERT), другие инструменты (по крайней мере, RDS, CloudFormation) поддерживают унифицированную аутентификацию с помощью переменной среды AWS_CREDENTIAL_FILE, указывающей Конфигурация описана в файлах readme инструментов для файла, содержащего ваш Идентификатор ключа доступа AWS и Секретный ключ (который вы можете найти в своей учетной записи AWS в разделе «Учетные данные безопасности — Ключи доступа»).

RDS : Настройка инструментов командной строки RDS очень похожа на EC2, просто загрузите их и добавьте переменные среды, как описано в прилагаемом файле readme.txt.

Как и в EC2, вы можете изменить регион RDS по умолчанию:

1
export RDS_URL=https://eu-west-1.rds.amazonaws.com
Примеры из тестовой установки Vaadin

Мой первоначальный план состоял в том, чтобы попробовать тестирование производительности, описанное в Vaadin Scalability Testing с Amazon Web Services , которое, к сожалению, оказалось невозможным, потому что тестовое приложение не запускалось. В процессе я автоматизировал отдельные этапы настройки, показанные ниже. Вы можете проверить сообщение в блоге, чтобы понять контекст.

Мне не нужно было создавать группу безопасности и разрешать доступ к ней через командную строку, как я это делал через консоль управления. Вы можете открыть порт SSH следующим образом:

1
ec2-authorize  -p 22

Создайте два экземпляра EC2:

1
ec2-run-instances ami-1a0f3d6e -t m1.large -k VaadinAS --instance-count 2 -z eu-west-1c -g quick-start-1
  • -k указывает имя существующей пары ключей (Консоль управления предлагает вам создать ее при первом создании экземпляра), которая будет связана с экземпляром, чтобы сделать возможным вход в систему через ssh без пароля.
  • -z указывает зону доступности (AZ) в пределах региона (вы можете увидеть доступные при создании экземпляра в консоли Mgmt), вероятно, лучше иметь все ресурсы в одном AZ
  • -g указывает существующую группу безопасности (снова создается в консоли); по умолчанию «по умолчанию», я считаю,

Команда ec2-run-instances также поддерживает атрибут –user-data или –user-data-file для передачи инструкций по установке в CloudInit, как будет описано позже.

Для входа в инстансы вам понадобятся их публичное имя домена / IP-адрес (выводится после завершения команды) и имя пользователя, которое зависит от используемого AMI (проще всего: щелкните правой кнопкой мыши экземпляр в консоли Mgmt и выберите «Подключиться», чтобы получить полная команда соединения SSH) и файл ключа (./VaadinAS.pem в моем случае). Таким образом, я войду в свой первый экземпляр следующим образом (при условии, что я уже открыл порт 22 в группе безопасности):

1
ssh -i VaadinAS.pem [email protected]

Создайте экземпляр RDS, используя MySQL (может пройти несколько минут до его запуска):

1
rds-create-db-instance quicktickets --allocated-storage 5 -c db.m1.large  -e MySQL5.1 -u quicktickets -p V3ryS3cr3t  -z eu-west-1c --backup-retention-period 0 --db-name quicktests
  • быстрые билеты будут именем экземпляра
  • макс. размер будет 5 ГБ (можно будет изменить позже)
  • -c — будет основан на экземпляре db.m1.large
  • -e — тип БД MySQL, -u имя пользователя, быстрые клавиши, -p пароль V3ryS3cr3t
  • -z eu-west-1c помещает его в тот же AZ, что и экземпляры EC2
  • –Backup-retention-period 0 — не хранить резервные копии (по умолчанию: 1 день)
  • –Db-name quicktests — требуется для подключения к нему

Затем мне нужно сделать базу данных доступной из моих экземпляров EC2 (которые находятся в группе безопасности quick-start-1):

1
rds-authorize-db-security-group-ingress default --ec2-security-group-name quick-start-1 --ec2-security-group-owner-id
  • Вы можете найти свой идентификатор учетной записи AWS в своей учетной записи AWS в разделе «Учетные данные безопасности».

Чтобы узнать имя хоста экземпляра, выполните rds-description-db-instance , который также скажет вам, запущен он или уже запущен.
Теперь вы можете подключиться к БД из экземпляра EC2 в группе безопасности:

1
mysql -h quicktickets.cpokd2djuazy.eu-west-1.rds.amazonaws.com -u quicktickets --password=V3ryS3cr3t quicktickets

AWS CloudFormation

CloudFormation — это новый (2/2011) бесплатный сервис от Amazon, который позволяет вам описывать необходимые ресурсы и их зависимости в текстовом формате и использовать этот «шаблон» для их создания («создания стека») либо через Консоль управления AWS или с помощью инструментов командной строки CloudFormation . Вы также можете поделиться своим шаблоном и использовать и комбинировать шаблоны, созданные другими. Шаблоны также поддерживают атрибут UserData, который можно использовать для передачи инструкций по установке в CloudInit, как будет описано позже. Посмотрите этот пост, основанный на скриншотах, о настройке стека CF с помощью консоли управления .
Пример файла шаблона:

  • 4: Как видите, вы можете определить свойства (со значениями по умолчанию), для которых значения могут быть предоставлены при создании нового стека из шаблона
  • 16, 31: Затем он определяет два ресурса: группу безопасности и экземпляр EC2 (который использует некоторые сопоставления, потому что имена AMI различаются в зависимости от региона).
  • 38: Инструкции по установке могут быть переданы в CloudInit через UserData в кодировке base64
  • 56: Вы также можете определить, какая информация должна быть доступна с помощью функции DescribeStacks (командная строка: cfn-description-stacks)

CloudFormation позволяет вам определять любой ресурс (экземпляры EC2, RDS, балансировщики нагрузки, группы безопасности и т. Д.), Их зависимости, а также через CloudInit различные действия при загрузке, такие как установка программного обеспечения. Шаблоны являются действительными документами JSON.

Пример: использование CloudFormation и Cloud-Init для установки и запуска приложения RoR (с функцией WaitCondition) — оно не слишком длинное и описывает отдельные разделы файла шаблона. Вы также можете просмотреть общедоступные файлы шаблонов , например, это: Один веб-сервер экземпляра EC2 с экземпляром базы данных Amazon RDS .

В июне 2011 года Amazon запустила также CloudFormer , инструмент-прототип, который позволяет создавать шаблоны CloudFormation из существующих ресурсов AWS в вашей учетной записи.

Если вам все еще нужна дополнительная информация, прочитайте Руководство пользователя CloudFormation .

Настройка экземпляра с помощью метаданных CloudFormation и вспомогательных сценариев

Из приложений начальной загрузки через AWS CloudFormation :

AWS CloudFormation позволяет определять набор пакетов, файлов и служб операционной системы с помощью метаданных в шаблоне. Кроме того, он предоставляет вспомогательные функции для

интерпретировать метаданные и действовать в соответствии с ними, устанавливать пакеты, создавать файлы и запускать или перезапускать службы в экземпляре. Сценарии AWS CloudFormation основаны на базовой функциональности CloudInit и позволяют создавать общий простой сценарий запуска CloudInit, который управляется данными через метаданные. Вы описываете, что нужно установить на хосте, в метаданных, а AWS CloudFormation заботится о том, как это сделать.

В документе приведены инструкции по использованию метаданных и вспомогательных сценариев, таких как cfn-init , который устанавливает пакеты, загружает и распаковывает архивы, запускает службы и создает файлы на основе данных в разделе метаданных. В нем также упоминается интеграция CloudFormation и Chef или Puppet, которая более подробно описана в технических документах « Интеграция AWS CloudFormation с Opscode Chef» и « Интеграция AWS CloudFormation с Puppet» . Если вы намеревались использовать CloudFormation, тогда вам обязательно следует прочитать это руководство на 22 страницах.

(Примечание: cfn-init поддерживает загрузку и распаковку пакетов, которые можно использовать, например, для получения последнего исходного кода вашего приложения, предоставленного по запросу GitHub.)

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

Другие альтернативы

  • AWS Java API (инструменты командной строки используют его, он основан на вызовах веб-сервисов)
  • Сторонние инструменты / библиотеки, например Ruby gem Fog .
  • Chef + Knife , Puppet (я считаю, что они предоставляют свои собственные оболочки для вызовов AWS WS и используют CloudInit)

Автоматизация установки EC2 экземпляра EC / SW

Чтобы настроить программное обеспечение внутри экземпляров EC2 и его конфигурацию, вы можете либо создать настроенный AMI, либо использовать CloudInit от Canonical с AMI, которые его поддерживают (Amazon Linux и Ubuntu и, возможно, другие). Если вы используете CloudFormation, у вас также есть другая возможность, основанная на CloudInit, описанная в разделе CF выше.

Canonical CloudInit и пользовательские данные экземпляра

Вы можете передать любые текстовые данные в новый экземпляр с помощью атрибута « Пользовательские данные» (до 16 КБ), затем эти данные будут доступны в экземпляре по адресу http://169.254.169.254/latest/user-data (вы также можете получить доступ к различным метаданные аналогичным образом). CloudInit — это утилита для Linux, разработанная Canonical, компанией, стоящей за Ubuntu, которая считывает эти данные и обрабатывает любые встроенные в них инструкции во время загрузки (примерно при запуске rc.local). Например, если это начинается с #! затем он запускается как сценарий оболочки под root.

CloudInit принимает различные типы инструкций в пользовательских данных, выделяемых первой строкой: скрипт (#!…), Данные конфигурации облака, т.е. пакеты для установки и т. Д. (# Cloud-config), URL-адреса файлов для обработки (#include…) , # upstart-job для добавления чего-либо в / etc / init (запускается при каждой загрузке) и многое другое. Он может даже обрабатывать сжатые gzip пользовательские данные и данные, состоящие из нескольких частей, комбинируя несколько типов команд (см. Cloud-utils и команду write-mime-multipart ).

Тип # cloud-config весьма полезен, так как это более простой способ установки пакетов и выполнения команд, чем сценарий bash. Он содержит инструкции в формате YAML, например «Runcmd» для запуска инструмента командной строки, «пакеты» для установки пакетов через диспетчер пакетов ОС. Пример: установка Jenkins CI с помощью # cloud-config .

CloudInit еще не очень хорошо документирован, вам может понадобиться прочитать исходные коды Python . Если что-то пойдет не так, вы можете проверить журналы в /var/log/cloud-init.log экземпляра.

Помимо официальной документации, вы можете ознакомиться с вводной презентацией CloudInit от Xebia и прочитать раздел CloudInit в руководстве пользователя Amazon Linux AMI.

Создание индивидуального образа машины Amazon

CloudInit устанавливает и настраивает программное обеспечение во время запуска, поэтому для полной доступности экземпляра требуется больше времени. Если это является проблемой, вы можете создать собственный настроенный образ машины Amazon (AMI) со всем уже установленным и настроенным программным обеспечением. Например, в этом кратком описании описано, как создать новый AMI из существующего (2007 г.) или в официальных документах по настройке AMI, и вы также можете захотеть взглянуть на инструменты командной строки EC2 AMI . Затем вы создадите новые экземпляры EC2 на основе настроенного AMI.

Некоторые связанные вещи

Если ваши экземпляры EC2 должны взаимодействовать и использовать технологию, которая требует, чтобы они находились в одной подсети, вы можете использовать виртуальное частное облако Amazon (VPC; бесплатно) и даже подключить его к центру обработки данных через VPN ($ 0,05 / ч). Это может быть необходимо, например, для запуска нескольких экземпляров JMeter .

Что касается JMeter, Йорг Калсбах создал AMI, который упрощает создание ферм JMeter Master-Slave (3/2010): JMeter In The Cloud — облачная среда нагрузочного тестирования (см. Документацию ). (Хитрость заключается в том, что главный экземпляр запускает ведомые экземпляры и, следовательно, знает их IP-адреса. Я думаю, что нечто подобное можно было бы сделать с CloudFormation, Auto Scale и пользовательскими данными / CloudInit.)

Резюме

AWS — это динамично развивающаяся платформа с постоянно совершенствующимся инструментарием и растущим предложением услуг. Начать использовать веб-консоль управления очень легко, но вскоре становится удобнее перейти к более автоматизированному интерфейсу, такому как инструменты командной строки или даже CloudFormation для настройки всего стека инфраструктуры. Поддержка настройки экземпляров путем создания пользовательских изображений или во время запуска с помощью метаданных и сценариев CloudInit и / или CloudFormation очень хороша, и люди уже объединяют их со своими любимыми инструментами DevOps Chef и Puppet.

Я бы порекомендовал вам начать с AWS с помощью Консоли управления, а затем переключиться на инструменты командной строки и CloudInit, когда вы освоитесь с концепциями и использованием. Если вам необходимо повторно предоставлять несколько ресурсов, вам следует использовать CloudFormation с его метаданными и вспомогательными сценариями (возможно, используя также Puppet / Chef).

Ссылка: Начало работы с веб-сервисами Amazon и полностью автоматизированным выделением ресурсов за 15 минут от нашего партнера по JCG Якуба Холи в блоге Holy Java .

Статьи по Теме :