Рубрики
Uncategorized

Создание собственной обезьяны хаоса с автоматизацией AWS Systems Manager

Хаос Инжиниринг на AWS Я хотел бы выразить свою благодарность моим коллегам и друзьям … Помечено с AWS, DEVOPS, SRE, информатики.

Хаос Инжиниринг на AWS

Я хотел бы выразить свою благодарность своим коллегам и друзьям Джейсон Бирн и Мэтт Фитцжеральд за их ценные отзывы.

В оформлении Последние пост Я объяснил, как использовать AWS SSM запустить команду к Включение сбоев на экземплярах EC2 Отказ Команда SSM RUN хорошо подходит для выполнения пользовательских сценариев на экземплярах EC2, особенно для ввода задержка или отключение На сетевом интерфейсе выполнить истощение ресурсов CPU , память и Ио Отказ

Однако нам нужно больше, чем это. Инъекция отказа должна быть нацелена на Ресурсы, характеристики сети и Зависимости, приложения, процессы и обслуживание , а также Инфраструктура Отказ

Нам также необходимо иметь широкий набор контрольных контролей и возможностей для безопасного управления экспериментами Хаоса. Мы могли бы захотеть:

  • Выполнить команды и сценарии непосредственно в экземпляры EC2.
  • Ссылаться на лямбда функции на Запустите пользовательские сценарии.
  • Оршестрек Несколько инъекций отказа для формирования сценариев хаоса.
  • Расписание их для исполнения в определенное время.
  • Есть Автоматические отмены Если ошибки обнаружены.
  • Есть Меры безопасности в местах с одобрениями.
  • Применить скорость контроля на Ограничить радиус взрыва экспериментов.

Вот где AWS System Manager Автоматизация (SSM ** Автоматизация) приходит. Итак, давайте посмотрим!

** Примечание: AWS Systems Manager ранее известен как Amazon Simple Systems Manager (SSM). Оригинальное сокращенное имя сервиса, SSM, все еще используется и отражена в различных ресурсах AWS.

Что такое автоматизация SSM?

Автоматизация SSM была запущена для упрощения частого обслуживания и развертывания задач AWS Resoulites и, особенно, кодифицировать их.

Автоматизация SSM в двух словах

SSM Automation использует документ S (определено в YAML или JSON), чтобы включить управление ресурсами на нескольких учетных записях и регионах AWS. Вы можете выполнить вызовы AWS API как часть документа в сочетании с другими действиями автоматизации SSM, такими как запущенные команды на экземплярах EC2, вызывающие функции лямбда и выполнение пользовательских сценариев Python или PowerShell.

SSM-документ автоматизации

Хотя эти документы могут быть выполнены непосредственно через Консоль , CLI и Sdks Вы также можете запланировать и вызвать их через События cloudwatch. . Эта возможность планирования делает интеграцию с помощью трубопроводов CI/CD тривиальной.

Типы действий автоматизации SSM

Типы действий Позвольте вам автоматизировать широкий спектр операций. Например, AWS: Wexuteawsapi тип действия, используемый выше, позволяет запустить любой Операция API на любой службе AWS, в том числе создание или удаление ресурсов AWS, начальных процессов, запуск уведомлений и т. Д.

В то время как автоматизация SSM поддерживает Большинство разнообразных действий Самые заметные для Хаоса Инжиниринг: следующие:

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

Как вы можете догадаться до сих пор, автоматизация SSM также хорошо подходит для безопасного выполнения экспериментов в области инженерных технологий CHAOS.

» Привет мир!»

Давайте посмотрим на «Привет, мир!» Организации инженерных экспериментов Chaos — Случайно остановить экземпляры EC2 Отказ

Этот эксперимент отлично известен как Хаос обезьяна и был создан Netflix соблюдать сильные архитектурные руководящие принципы; Приложения, запущенные на облаке AWS, должны быть автоматически масштабированными без оказания безчисленными. Это означает, что приложения запущены Netflix должны терпеть случайные сбои экземпляра EC2.

Ниже приведен документ автоматизации SSM (описанный в YAML) случайным образом изъятие экземпляра EC2 в определенной зоне доступности AWS.

Чтобы открыть этот документ автоматизации SSM в вашем любимом IDE, нажмите здесь Отказ

Хорошо — так что у нас здесь?

ПРИМЕЧАНИЕ. Для целей читаемости я буду сокращаться нерелевантными разделами документа SSM-автоматизации.

Верхняя часть этого документа проста. Начинается с Описание , Схемаверсия (в настоящее время на 0,3), а Уверенность, Что является ролью IAM, которую требует автоматизации SSM для выполнения действий, определенных ниже в документе.

Параметры Раздел — ДоступностьZone , Название тэга , TagValue и Автоматизационеры — Операторы параметров необходимо вводить для выполнения каждого эксперимента. Первые три параметра используются на первом шаге — ListInstances — Чтобы фильтровать экземпляры EC2, в то время как последний — это роль IAM, необходимая для выполнения действий, описанных в документе.

Эти параметры являются входами исполнения эксперимента, выделенные жирным шрифтом на приведенном ниже AWS CLI Начало автоматизации-исполнения команда:

> aws ssm start-automation-execution --document-name "StopRandomInstances-API" --document-version "\$DEFAULT" --parameters '{" **AvailabilityZone**":["eu-west-1c"]," **TagName**":["SSMTag"]," **TagValue**":["chaos-ready"]," **AutomationAssumeRole**":["arn:aws:iam::01234567890:role/SSMAutomationChaosRole"]}' --region eu-west-1

Mainsteps

Mainsteps Раздел определяет Действия Это SSM выполняет на ресурсы AWS. В этом документе есть шесть шагов, которые работают в последовательный Заказ — а именно listInstances , SelectrandomInstance , VerifyInStancestatorunning , Стоплывание , Forcestopinstances и VerifyInStancestateStopped Отказ

Каждый из этих шагов определяет один SSM Автоматизация Действия Тип Отказ Выход с одного этапа можно использовать в качестве входа на следующий шаг.

Mainsteps (рухнул)

Первый шаг — listInstances

Давайте посмотрим на первый шаг listInstances Отказ Этот первый шаг использует тип действия AWS: Executeawsapi Чтобы запросить службу EC2 для списка экземпляров, фильтрованных в зоне доступности, состоянием экземпляра EC2 и его тегами.

Выходы

Как объяснено ранее, вывод с одного этапа может использоваться в качестве ввода на следующем шаге. SSM Automation использует Выражение jsonpath в селектор Чтобы помочь выбрать правильный вывод.

Выражение JSONPath — это строка, начинающаяся с «$». Используется для выбора одного или нескольких компонентов в элементе JSON (E.G., вывод вызова API API описания). Операторы JCONPath, которые поддерживаются SSM-автоматизацией:

  • Детский ребенок (.) : Этот оператор выбирает значение определенного ключа от объекта JSON.
  • Deep-Scan (..) : Этот оператор сканирует уровень элемента JSON на уровне и выбирает список значений с определенным ключом. Тип возврата этого оператора всегда является массивом JSON. Этот оператор может быть либо StringList или MapList Отказ
  • Array-index ([]) : Этот оператор получает значение определенного индекса из массива JSON.

На этом первом шаге вывод «$ .Reservations … InstaxiD »возвращает список экспозиций, отфильтрованных в результате доступности зоны, состояния и тегом.

Второй шаг — селетрандминизм

Второй шаг документа использует тип действия AWS: ExecuteScript которые выполняют встроенный сценарий Python, который возвращает случайную экземпляр из списка экспонатов.

Примечание. Функция, определенная в обработчике, должна иметь два параметра, Мероприятия и __context.

Выход выполнения скрипта — это Полезная нагрузка Объект, на котором вы можете выполнить селектор JSONPATH. В этом примере $ .payload. Экспозиция.

Третий шаг — подтверждение

Третий шаг документа использует другой тип действия, AWS: WaitforawsresourceProperty , что утверждает состояние случайного экземпляра, возвращаемого с двух шага.

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

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

Четвертый и пятый шаг — остановки и наступательные

Четвертый и пятый шаги документа используют тип действий AWS: ChangeInStanceState. Как вы, возможно, догадались, эти шаги меняют состояние экземпляров EC2 — в этом примере, чтобы остановить. Вход снова является экспонтом из шага два.

ПОЧЕМУ ИСПОЛЬЗУЙТЕ СТАТИВНОСТИ И ФОРМЕНТОВЫЕ РАБОТЫ?

В Стоплывание Шаг, плоскость управления EC2 пытается изящно выключить выбранный экземпляр EC2, что позволяет промойте его файловую систему кэши или метаданные файловой системы. Однако иногда может быть проблема с базовым принимающим компьютером, и экземпляр может застревать в состоянии остановки. Вот почему Forcestopinstances Шаг устанавливает силу правдой, что заставляет случаи остановиться.

Примечание 1 : Второй шаг, Forcestopinstances , не рекомендуется для экземпляров EC2, работающих на Windows Server.

Примечание 2 : Значение времени ожидания по умолчанию для AWS: Меменное действие действий составляет 3600 секунд (один час). Вы можете ограничить или продлить тайм-аут, указав Параметр Timeoutseconds.

Для получения дополнительной информации о API ec2 stop-экземпляров нажмите здесь Отказ Для ошибок устранения неполадок нажмите здесь Отказ

Последний шаг — подтверждение

Наконец, последний шаг этого документа состоит в том, чтобы проверить состояние экземпляров, которые будут остановлены или прекращены. Этот шаг, возможно, избыточно поскольку AWS: ChangeinStanceState также утверждает на желаемое значение. Однако ради этого примера я предпочел сделать этот шаг явным.

Нафы сказали — давайте демонстрировать это!

Для этого примера я предполагаю, что у вас уже есть некоторые экземпляры EC2, запущенные в вашей учетной записи AWS с соответствующими тегами (я использую SSMTAG: HAOS-Ready для демонстрации).

1- Создайте роль IAM для автоматизации SSM

По умолчанию SSM не имеет разрешения на выполнение действий на ресурсах AWS. Начните с создания роли — E.g., Ssmautomationchaosrole. со следующей политикой.

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "lambda:InvokeFunction"
            ],
            "Resource": [
                "arn:aws:lambda:\*:\*:function:ChaosAutomation\*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "ec2:StartInstances",
                "ec2:RunInstances",
                "ec2:StopInstances",
                "ec2:TerminateInstances",
                "ec2:DescribeInstances",
                "ec2:DescribeInstanceStatus"
            ],
            "Resource": [
                "\*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "ssm:\*"
            ],
            "Resource": [
                "\*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "sns:Publish"
            ],
            "Resource": [
                "arn:aws:sns:\*:\*:ChaosAutomation\*"
            ]
        }
    ]
}

Он должен дать вам достаточно, чтобы начать работу с действиями, вызывающими команду ec2, ssm run and aws lambda. Вы должны, конечно, распространяться или ограничивать эту политику своим собственным потребностям.

2- Неисправные документы впрыска

Чтобы начать вас, я создал несколько готовых к использованию документов SSM-автоматизации.

https://github.com/adhorn/chaos-ssm-documents/

В настоящее время доступны следующие эксперименты на хаос — не стесняйтесь спрашивать или внести свой вклад в большей степени!

1- Случайно остановка экземпляров с использованием API EC2 2- случайно остановка экземпляров с использованием AWS LAMBDA 3- Инъекция нескольких напряжений ЦП на экземплярах EC2 с использованием команды AWS RUN

Чтобы использовать любой из них, вам необходимо создать документ автоматизации SSM, используя AWS CLI следующим образом:

> aws ssm create-document --content --name "[StopRandomInstances-API](https://eu-west-1.console.aws.amazon.com/systems-manager/documents/StopRandomInstances/description?region=eu-west-1)" file://stop\_random\_instance\_api.yml --document-type "Automation" --document-format YAML

После загрузки документа вы должны увидеть его под собственной вкладкой ME в AWS System Manager Документы Фильтровано по типу документа: Автоматизация.

3- выполнение документа впрыска неисправностей

Перейти к Автоматизация приборной панели В системе AWS System Manager и нажмите Выполнить автоматизацию Отказ

SSM автоматизации приборной панели

Фильтруйте документы владельцем: принадлежат мне, и вы должны увидеть ваш недавно загруженный документ (ы).

Выберите Stoprandominstances-api Документ автоматизации и нажмите Следующий.

Примечание. Если вы предпочитаете использовать AWS CLI, обратите внимание, что консоль выводит эквивалент выполнения команды AWS CLI.

Вы вводите входные параметры, определенные в документе автоматизации здесь, а именно доступностьZone, Tagname и TagValue (я использую SSMTAG: HAOS-Ready). Не забудьте выбрать правильную роль, созданную ранее, в этой демонстрации SSMAUTOMATIONCHAOSROLE, чтобы позволить выполнению эксперимента.

Перед запуском эксперимента давайте посмотрим на мои экземпляры, которые в настоящее время работают в ЕС-Запад-1.

Как видите, у меня есть четыре экземпляра в ЕС-West-1A, но только три с правильным тегом SSMTAG: HAOS-Ready. Я буду использовать эту информацию, чтобы убедиться, что мои фильтры работают правильно.

Давайте выполним эксперимент.

Вы можете выполнить выполнение каждого шага из консоли AWS. Каждый шаг получает Шаг ID что вы можете контролировать самостоятельно. Ниже приведен увеличение Шаг 1: ListInstances.

Теперь мы можем проверить и убедиться, что наши фильтры работают. И действительно, у нас есть три случая с правильным набором меток в ЕС-West-1A.

Зум на втором этапе показывает нам случайно выбранный экземпляр: I-01F069058C584B2BC.

Как только все шаги успешно завершены, мы можем проверить, что правильный экземпляр остановлен — I-01F069058C584B2BC

Как видите, наш инъекция неисправности EC2 работала.

4- Отмена исполнения

Возможно, вы заметили Отмена исполнения на странице состояния исполнения.

Да — это наша большая красная кнопка прямо там!

Осторожно: Вы можете только попытка Чтобы отменить выполнение, поскольку SSM не может гарантировать, что действия могут быть остановлены или вернены. Например, вы не можете отменить активность, которая уже происходит, например, останавливая и прекращающая экземпляр.

Как всегда, с Chaos Engineering, будьте очень осторожны с вашими экспериментами — планируйте внимательно!

5 — Непрерывное тестирование хаоса

То, что сделало хаос обезьян настолько уникальной, было то, что это непрерывно работает в среде Netflix, регулярно отключая экземпляры EC2, на регулярном интервале — это был не просто разоренный.

Теперь, когда вы успешно выполнили впрыск отказа EC2 EC2 с помощью SSM-автоматизации, вы можете превратить это в непрерывное тестирование хаоса или непрерывной проверки.

Непрерывное тестирование хаоса просто означает, что вы регулярно выполняете инъекцию отказа, чтобы проверить приложение неоднократно противостоять сбоям.

К счастью, это просто сделать!

Вы можете выполнить вышеуказанную автоматизацию SSM, указав наш документ SSM в качестве цели мероприятия CloudWatch Amazon CloudWatch.

Amazon Cloudwatch — Создать правило

  1. Открыть Cloudwatch Console , выберите События На левой панели навигации и нажмите Создать правило Отказ
  2. Выберите Расписание и укажите рецидив, используя формат CRON. Для демонстрационных целей я выбираю для выполнения документа автоматизации SSM каждые 5 минут, что представлено выражением Cron 0/5 * * *? * .
  3. Затем нажмите Добавить цель и выберите Автоматизация SSM из списка типов выбора целевого типа. Выберите документ автоматизации, созданный выше как ваша цель — Stoprandominstances-api Отказ
  4. Развернуть Настройка параметров автоматизации (ы) и введите каждое из необходимых значений — доступностьZone, Tagname, TagValue и Automaticationsumerole.
  5. В разделе Разрешения Пусть CloudWatch создает новую роль Чтобы вызвать выполнение автоматизации SSM или выберите существующий.
  6. Нажмите Настроить детали Добавьте имя и описание. Выберите Состояние включенного и нажмите Создать правило Отказ Убедитесь, что вы добавляете отличное имя с точным описанием; Вы хотите сделать это очевидным, что это такое правило инженерного правила хаоса!

Вы можете проверить, изменять или отключить правило от консоли CloudWatch потом.

Через некоторое время вы должны начать просматривать выполнения документа автоматизации SSM каждые 5 минут.

Как видите, последние четыре исполнения отличаются и удерживают роль IAM, предполагаемой событием CloudWatch, вызывающей исполнение SSM-автоматизации.

Вот и все — мы успешно построили наши настраиваемые Chaos Monkey, используя SSM-автоматизацию! Надеюсь, этот пост блога вдохновляет вас, чтобы начать путешествие с помощью Chaos Engineering. Не стесняйтесь комментировать, поделитесь своими идеями или отправьте Pull-запросы Если вы хотите добавить новые функции для этого Коллекция документов SSM Отказ

Примечание для болельщиков без сервеса: Если вы заинтересованы в том же эксперименте, но с действиями AWS Lambda, используйте этот Документ С этим лямбда Функция Отказ

-Адриан

Оригинал: «https://dev.to/aws/creating-your-own-chaos-monkey-with-aws-systems-manager-automation-1e3i»