Автоматизация задач и постоянное улучшение рабочих процессов являются ключевыми частями DevOps. В конвейере CI / CD возможность упростить процессы — огромный плюс. Упрощение системных процессов не только облегчит вам, как разработчику, но и другие дополнительные преимущества. Например, вы можете значительно снизить стоимость запуска сервисов в облаке с помощью усовершенствованного и автоматизированного масштабирования инфраструктуры.
AWS Lambda — это новейшая технология в области облачных вычислений, которая позволяет выполнять код «без сервера». Это означает, что AWS предоставит нам платформу времени исполнения. Теперь мы привыкли использовать образы машин Amazon (AMI) для хранения конфигурации программного обеспечения и других переменных. AMI, безусловно, сводят к минимуму человеческие ошибки в конвейере CI / CD. Таких проблем, как неправильная конфигурация, можно полностью избежать. AWS Lambda просто опережает использование AMI. сделав их полностью безсерверными.
Вам также могут понравиться: AWS Lambda Best Practices
Почему Go Serverless?
Давайте не будем забывать, что AMI должны запускаться из экземпляра, и большую часть времени этот экземпляр необходимо поддерживать для корректной работы сценариев. Автоматизация становится добавочной стоимостью, несмотря на то, что она приносит много преимуществ. Переход на безсерверный дизайн делает AMI намного более мощным.
В то же время сценарии, предназначенные для автоматизации создания, обновления, обслуживания и удаления экземпляра облака, могут запускаться событиями. Это означает, что вы можете настроить всю облачную среду так, чтобы она была более гибкой.
Это приводит к еще одному важному преимуществу: больше возможностей автоматизации. С помощью AMI вы можете автоматизировать удаление старых резервных копий AMI без необходимости постоянно поддерживать экземпляр EC2. Вы также можете запускать действия в зависимости от использования хранилища или других показателей, полученных CloudWatch.
В этом посте мы расскажем, как автоматизировать AMI для ваших экземпляров с помощью AWS Lambda и CloudWatch . Для этого мы создали две функции: одну для создания AMI, а другую для удаления старых AMI с помощью retention.d
AWS Lambda идеально подходит для этих задач. Служба предназначена для небольших приложений и служб по требованию, которые должны запускаться определенными событиями. AWS обеспечивает постоянный мониторинг за вами, предоставляя вам больше ресурсов, чтобы сосредоточиться на остальной части процесса. В настоящее время Lambda поддерживает следующие языки: Node.js, Java, C # и Python. Мы будем использовать Python3.7 для написания наших функций в этом посте. Мы будем использовать CloudWatch Events для запуска функции Lambda, и мы можем создавать правила CloudWatch с помощью выражений Cron.
Настройка AWS Lambda
Как и в случае с другими сервисами Amazon, вам нужно запустить процесс настройки, предоставив AWS Lambda достаточные роли служб для доступа к остальной среде. Лямбда нуждается в доступе для описания экземпляров, создания / отмены регистрации изображений и удаления снимков. Вы можете сделать это из меню IAM из Консоли управления AWS или напрямую создав политику. Войдите в консоль управления AWS и щелкните службу IAM, которая перенаправит вас на консоль IAM.
- Нажмите «Политики» на левой панели консоли.
- Нажмите «Создать политику», затем выберите вкладку «JSON» и вставьте приведенные ниже данные JSON в поле.
JSON
x
1
{
2
"Version": "2012-10-17",
3
"Statement": [
4
{
5
"Sid": "VisualEditor0",
6
"Effect": "Allow",
7
"Action": [
8
"ec2:DeleteSnapshot",
9
"ec2:CreateSnapshots",
10
"ec2:CreateSnapshot"
11
],
12
"Resource": [
13
"arn:aws:ec2:*:*:instance/*",
14
"arn:aws:ec2:*::snapshot/*",
15
"arn:aws:ec2:*:*:volume/*"
16
]
17
},
18
{
19
"Sid": "VisualEditor1",
20
"Effect": "Allow",
21
"Action": [
22
"ec2:DescribeImages",
23
"ec2:DeregisterImage",
24
"ec2:DescribeInstances",
25
"ec2:DescribeSnapshotAttribute",
26
"ec2:DescribeInstanceAttribute",
27
"ec2:DescribeImageAttribute",
28
"logs:*",
29
"ec2:CreateImage",
30
"ec2:DescribeSnapshots",
31
"ec2:DescribeInstanceCreditSpecifications",
32
"ec2:DescribeInstanceStatus"
33
],
34
"Resource": "*"
35
}
36
]
37
}
- Нажмите «Визуальный редактор», чтобы дважды проверить предоставленный доступ, затем выберите «Просмотреть политику».
- Дайте вашей новой политике уникальное имя и проверьте ограничения для имени политики. Затем нажмите «Создать политику».
- Теперь, вернувшись в консоль IAM, перейдите в раздел «Роли», чтобы создать роль IAM и присоединить созданную нами политику. Начните с нажатия «Создать роль».
- Нажмите «Лямбда» в качестве службы, которая будет использовать эту роль.
- Найдите созданную вами политику IAM и установите флажок.
- Просмотрите роль IAM и нажмите «Создать роль».
Создать лямбда-функции
Следующим шагом является добавление функций к экземпляру Lambda. В зависимости от того, чего вы пытаетесь достичь, вы можете добавить функции, которые выполняют определенные задачи при определенных условиях. Например, вы можете создать функцию создания резервных копий AMI и управления ими на основе тегов. Вы можете использовать теги, такие как «Резервное копирование» и «Удалить», чтобы организовать резервные копии AMI.
- Перейдите на службу «Лямбда» в консоли управления AWS.
- Перейдите в «Функции» и нажмите «Создать функцию».
- Заполните детали функции согласно скриншоту ниже и прикрепите роль, которую вы только что создали.
- Прокрутите вниз до «Код функции» и скопируйте этот код в поле.
- Затем прокрутите вниз до «Переменные среды» и создайте переменные среды, как показано ниже, или укажите «идентификатор экземпляра» непосредственно, как на скриншоте ниже.
- Установите значение тайм-аута на 15 минут; это пороговое значение времени выполнения нашей лямбда-функции.
- Сохраните изменения, нажав «Сохранить» в правом верхнем углу, а затем нажмите «Тест».
- Теперь «Настроить тестовое событие».
- Создайте тег «backup» для экземпляров, которые вы хотите запланировать для создания образа.
- Теперь перейдите к лямбда-функции и запустите ее, нажав «Тест». Мы можем проверить вывод в выводе журнала, а также проверить в наших журналах CloudWatch. Отслеживайте созданные AMI в консоли AMI, и вы сможете увидеть соответствующие снимки в консоли Snapshot.
- Затем перейдите в консоль CloudWatch, нажмите на журналы и выполните поиск функций Lambda. Мы можем просмотреть все журналы, а также установить «Expire Events After» на 30 дней.
- Вернитесь к лямбда-функции. И нажмите «Добавить триггер» в консоли дизайнера и выберите CloudWatch Events.
- Мы можем добавить выражение Cron в функцию Lambda, это автоматически вызовет функцию в соответствии с инструкциями Cron. Выражение Cron, упомянутое на скриншоте, предназначено для ежедневного запуска в 17:00. Подробнее о выражениях Cron см. В разделе «Выражения расписания AWS» .
- Аналогичным образом повторите описанные выше шаги и создайте «Удалить функцию», скопируйте этот код в код «Функции» и снова добавьте «Переменные среды», как показано на снимке экрана ниже. Мы можем добавить период хранения как 30. Это означает, что функция сканирует список на наличие AMI старше 30 дней и соответственно удаляет их. Мы можем изменить срок хранения до 15 или 30 в зависимости от наших требований. Кроме того, добавьте значения времени ожидания и триггеры как функцию создания AMI.
- Поздравляем, вы успешно создали функции Lambda и настроили их для автоматического управления AMI и снимками EBS.
Как и CloudWatch, Lambda может захватывать триггеры из различных источников, включая SNS . Он также поддерживает вызовы API и AWS IoT для более сложных операций.
В соответствии с вышеописанными шагами, созданные вами лямбда-функции будут циклически проходить циклы EC2, создавать список всех экземпляров с подходящим тегом и начинать процесс создания AMI для этих экземпляров. Созданные резервные копии AMI могут содержать метаданные и теги, в том числе информацию о том, как долго они должны храниться.
Как показано, та же функция может также автоматизировать удаление AMI, который она создает по истечении определенного периода времени. Старые AMI автоматически удаляются, а новые резервные копии AMI создаются как часть цикла. Это простая процедура, но она экономит много времени и денег на поддержании резервных копий AMI.