Абстрактный
Клиенты, нуждающиеся в том, чтобы сохранить экземпляр Amazon Relational Database Service (Amazon RDS), остановившись более 7 дней, ищите способы эффективного переосмысления базы данных после того, как он был автоматически запускается Amazon RDS Анкет Если база данных запускается и нет механизма, чтобы остановить ее; Клиенты начинают платить за почасовую стоимость экземпляра
Остановка и запуск экземпляра БД быстрее, чем создание моментального снимка БД, а затем восстановить снимок.
Этот блог предоставляет пошаговый подход для автоматической остановки кластера RDS с полностью без сервера и использования Pulumi для создания ресурсов AWS
Оглавление
- Обзор Пулуми
- Обзор решения
- Создайте кластер RDS с несколькими экземплярами
- Создать тему SNS и подписаться на событие RDS Cluster
- Создать функцию Lambda, которая подписывается на тему SNS
- Создать функцию Lambda для получения кластера RDS и экземпляров статус
- Создать функцию Lambda, чтобы остановить кластер RDS
- Создайте функцию Lambda, чтобы отправить Slack
- SFN IAM Роль для запуска функций Lambda
- Pulumi Deploy Stack
- Вывод
🚀 Обзор Pulumi
Почему Пулуми? Pulumi позволяет разработчикам писать инфраструктуру в качестве кода на своих любимых языках, таких как TypeScript, JavaScript, Python и Go.
Вот общие шаги за шагом для создания Pulumi Project и его стека
- Создайте новый проект
pulumi new aws-typescript
- Настройка AWS профиль
- При создании/init a Stack
Pulumi Stack init
Pulumi.
не создан, поэтому мы должны установить конфигурацию сами.yaml
pulumi config set aws:region ap-northeast-2 pulumi config set aws:profile myprofile
- ПУЛУМИ БАШ
- Почувствуете лень для печати? Настройка Bashcompletion для Pulumi
pulumi gen-completion bash > /etc/bash_completion.d/pulumi
- Обновление
.bashrc
для псевдонимы
# add Pulumi to the PATH export PATH=$PATH:$HOME/.pulumi/bin alias plm='/home/vudao/.pulumi/bin/pulumi' complete -F __start_pulumi plm
- Импортировать существующие ресурсы
- Для создания нового кластера RDS для проверки потока мы можем импортировать существующую группу безопасности или что -либо еще в стеке
pulumi import aws:ec2/securityGroup:SecurityGroup vpc_sg sg-13a02c7a
- Обновить стек
- Если мы вручную удалим ресурсы, которые управляются стеком, мы можем запустить обновление, чтобы обновить статус ресурса стека
pulumi refresh
🚀 Обзор решения
Решение опирается на уведомления о событиях RDS. После того, как AWS запускается из -за превышения максимального времени в состоянии остановки; Событие (RDS-EVENT-0154) генерируется RDS.
Событие RDS подтолкнуто к выделенной теме SNS
sns-rds-event
АнкетФункция Lambda
Start-Step-Func-RDS
подписан на тему SNSsns-rds-event
- Функция фильтрует сообщения с Код события :
RDS-EVENT-0153
(Кластер DB запускается из -за того, что он превышает максимально разрешенное время, которое остановлено.), Плюс функция подтверждает, что экземпляр RDS помеченАвтозарекция защита
и что значение тега установлено наДа
Анкет - Как только все условия будут выполнены, функция Lambda запускает функцию AWS -шага.
- Функция фильтрует сообщения с Код события :
Машина State Functions Functions интегрируется с двумя функциями Lambda, чтобы получить состояние экземпляра, а также попытаться остановить экземпляр RDS.
- В случае, если состояние экземпляра не «доступно», государственная машина ждет 5 минут, а затем перепроверяет состояние.
- Наконец, когда состояние экземпляра Amazon RDS «доступно»; Государственная машина попытается остановить экземпляр Amazon RDS.
Примечание. Этот блог для обработки RDS Cluster с несколькими намерениями, для одного экземпляра, Catch
RDS-EVENT-0154
: Экземпляр DB начинается из -за его превышения максимально разрешенного времени, которое останавливается.
Давайте начнем писать IAC с помощью Pulumi и TypeScript
🚀 Создайте кластер RDS с несколькими экземплярами
- Создайте кластер RDS с одним или несколькими случаями
- Используя импортированный существующий VPC (необязательно)
rds.ts Введите полноэкранный режим Выйдите из полноэкранного режима
🚀 Создать тему SNS и подписаться на событие на RDS Cluster
- Создайте тему SNS для получения событий от RDS Cluster
- Создать подписку на события:
- Цель: тема SNS
- Тип источника: кластеры (и указывают на кластер, который создан с шага выше)
- Конкретные категории событий:
уведомление
index.ts Введите полноэкранный режим Выйдите из полноэкранного режима
🚀 Создать функцию Lambda, которая подписывается на тему SNS
- Функция лямбда будет вызвана темой SNS, когда есть событие
Функция Lambda анализирует сообщение о событии, чтобы фильтровать идентификатор события
RDS-EVENT-0153
и проверяет тег кластера RDS для ключа: значениеавтоза защита: Да
Анкет Если все условия совпадают, то функция лямбда выполняет статусную машину состоянияСоздайте роль IAM, которая потребляется Lambda Function
Ям-рол Введите полноэкранный режим Выйдите из полноэкранного режима
- Создать функцию Lambda, которая является подпиской темы SNS
СТАРТ-ШАН-ФУНК-ЛАБДА Введите полноэкранный режим Выйдите из полноэкранного режима
- Создать машину состояния функции шага с плавными определениями
Stepfunc.ts Введите полноэкранный режим Выйдите из полноэкранного режима
🚀 Создайте функцию лямбда для получения кластера RDS и статуса экземпляров
retive-rds-status.ts Введите полноэкранный режим Выйдите из полноэкранного режима
🚀 Создайте функцию лямбды, чтобы остановить кластер RDS
Stop-rds.ts Введите полноэкранный режим Выйдите из полноэкранного режима
🚀 Создайте функцию Lambda, чтобы отправить Slack
Send-slack.ts Введите полноэкранный режим Выйдите из полноэкранного режима
🚀 SFN IAM Роль для запуска функций Lambda
sfn-role.ts Введите полноэкранный режим Выйдите из полноэкранного режима
🚀 Pulumi Deploy Stack
🚀 Заключение
Теперь мы можем сэкономить время и сэкономить деньги на этом решении. Плюс, мы получим Slack Message, когда есть события
Хотя Pulumi поддерживает многие облака и предварительного проводника и может визит диаграмма ресурсов в стеке, но есть больше вариантов, таких как комплект разработки AWS (CDK)
Ref: Полевые примечания: остановка автоматического запускаемого экземпляра базы данных с Amazon RDS
🚀 Vu Dao 🚀 Следуйте
Vumdao/Вумдао
Оригинал: «https://dev.to/aws-builders/rds-auto-restart-protection-1bd9»