с AWS Lambda, Amazon EventBridge, политиками и правилами IAM

Подробно шаг за шагом.

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

Базам данных выставляются счета за вычислительные затраты и затраты на хранение. Чтобы снизить общие затраты, Amazon RDS позволяет временно останавливать инстансы. Пока инстанс остановлен, с вас взимается плата за хранение и резервное копирование, но не за часы работы инстанса БД. Обратите внимание, что остановленный экземпляр будет автоматически запущен через 7 дней.

Пока ваш экземпляр БД остановлен, с вас взимается плата за выделенное хранилище (включая выделенное количество операций ввода-вывода в секунду). С вас также взимается плата за хранение резервных копий, включая создание снимков вручную и автоматическое резервное копирование в течение указанного периода хранения. Однако с вас не взимается плата за часы работы инстанса БД.

Когда вы останавливаете экземпляр БД, он сохраняет свой идентификатор, конечную точку сервера доменных имен (DNS), группу параметров, группу безопасности и группу параметров. Когда вы запускаете экземпляр БД, он имеет ту же конфигурацию, что и при его остановке. Кроме того, если вы остановите экземпляр БД, Amazon RDS сохранит журналы транзакций Amazon S3. Это означает, что при необходимости вы можете выполнить восстановление на определенный момент времени.

Когда вы останавливаете экземпляр БД, он сохраняет свою конечную точку DNS. Если вы остановите экземпляр БД, имеющий общедоступный IP-адрес, Amazon RDS освободит его общедоступный IP-адрес. Когда экземпляр БД перезапускается, он получает другой общедоступный IP-адрес.

Примечание. Всегда следует подключаться к экземпляру БД, используя конечную точку DNS, а не IP-адрес.

Подробности о стоимости:

Здесь мы полагаемся на четыре ключевые службы: роль IAM, политику, правило EventBridge и функцию Lambda.

Создание ролей и политик IAM обычно бесплатно, но если вы активно используете функции IAM, например частые изменения ролей и политик, может взиматься небольшая плата за запросы API, которая, как правило, невелика и не является серьезной проблемой.

Amazon EventBridge предоставляет уровень бесплатного пользования с 1 миллионом событий в месяц в течение первого года, а в дальнейшем плата взимается за публикацию событий и доставку настраиваемых событий, обычно по разумной цене, привязанной к вашему использованию.

Стоимость AWS Lambda зависит от количества запросов и продолжительности выполнения. Первые 1 миллион запросов ежемесячно бесплатны; после этого вы платите за каждый запрос. Вам выставляется счет за точное время выполнения с шагом 1 мс в зависимости от продолжительности работы вашей функции и ее схемы использования.

Далее я шаг за шагом проведу вас через весь процесс, раскрывая каждую деталь.

Перейдите и нажмите на базу данных.

Нажмите «Теги» и на вкладке «Теги» под сведениями об экземпляре выберите «Добавить теги».

В качестве ключа тега введите UAT-TEST.

В поле «Значение» введите Auto-Shutdown.

Выберите Добавить.

Создайте политику и роль IAM для Lambda:

Теперь мы создаем политику IAM и роль для Lambda, чтобы остановить экземпляры.

  1. На консоли IAM в разделе «Управление доступом» на панели навигации выберите «Политики».
  2. Выберите Создать политику.

3. На вкладке JSON введите следующий код политики.

# Policy 
{
 "Version": "2012-10-17",
 "Statement": [
  {
   "Sid": "VisualEditor0",
   "Effect": "Allow",
   "Action": [
    "rds:DescribeDBClusterParameters",
    "rds:StartDBCluster",
    "rds:StopDBCluster",
    "rds:DescribeDBEngineVersions",
    "rds:DescribeGlobalClusters",
    "rds:DescribePendingMaintenanceActions",
    "rds:DescribeDBLogFiles",
    "rds:StopDBInstance",
    "rds:StartDBInstance",
    "rds:DescribeReservedDBInstancesOfferings",
    "rds:DescribeReservedDBInstances",
    "rds:ListTagsForResource",
    "rds:DescribeValidDBInstanceModifications",
    "rds:DescribeDBInstances",
    "rds:DescribeSourceRegions",
    "rds:DescribeDBClusterEndpoints",
    "rds:DescribeDBClusters",
    "rds:DescribeDBClusterParameterGroups",
    "rds:DescribeOptionGroups"
   ],
   "Resource": [
    "arn:aws:rds:ap-south-1:001626390090:db:database-1" #Put your RDS Database ARN
   ]
  }
 ]
}

4. Выберите «Далее», а затем укажите название политики и необходимые сведения.

5. Добавьте теги и выберите Createpolicy.

Теперь мы создаем роль IAM.

  1. В области навигации выберите Роли.
  2. Выберите Создать роль.

3. Чтобы выбрать тип доверенного лица, выберите сервис AWS.

4. В разделе «Общие случаи использования» выберите «Лямбда».

5. Выберите Далее.

5. Найдите и выберите созданную вами политику (RDS_Stop_Policy).

6. В поле «Имя роли» введите Rdsstop_Lambda.

7. В разделе «Теги» укажите ключ и значение (необязательно).

8. Просмотрите прилагаемые политики и выберите «Создать роль».

Теперь вы можете прикрепить эту роль при создании функций Lambda.

Создайте свою функцию Lambda, чтобы остановить базу данных.

  1. В консоли Lambda выберите «Функции» на панели навигации.
  2. Выберите функцию «Создать».

3. В качестве имени функции введите stoprds_lambda_function.

4. В качестве среды выполнения выберите Python 3.7.

5. Для роли «Выполнение» выберите «Использовать существующую роль».

6. В качестве Существующей роли выберите созданную вами роль (Rdsstop_Lambda).

7. Выберите функцию Создать.

8. На странице сведений о функции перейдите к коду функции.

9. Удалите пример кода и введите следующее:

Замените регион в предоставленном коде на тот, в котором находится ваш RDS, и замените идентификаторы базы данных RDS фактическими именами ваших баз данных.

import boto3

def lambda_handler(event, context):
    # Replace with your AWS region
    region = 'ap-south-1'                     #Region
    
    # Replace with your RDS instance identifiers
    instance_ids = ['database-1']             #DB Identifiers      
    
    rds_client = boto3.client('rds', region_name=region)
    
    for instance_id in instance_ids:
        try:
            response = rds_client.stop_db_instance(DBInstanceIdentifier=instance_id)
            print(f"Stopping RDS instance {instance_id}: {response}")
        except Exception as e:
            print(f"Error stopping RDS instance {instance_id}: {e}")
    
    return {
        'statusCode': 200,
        'body': 'RDS instances stopping...'
    }

10. Измените имя файла на «lambda_function.py».

11. Сначала нажмите «Файл», а затем нажмите «Сохранить».

Прокрутите вниз и выберите кнопку «Изменить» в разделе «Настройки времени выполнения».

В разделе «обработчик» введите имя файла вместе с именем функции, например: «lambda_function.lambda_handler», затем нажмите кнопку «Сохранить».

12. Перейдите на вкладку «Конфигурация» и выберите «Переменные среды». Нажмите «РЕДАКТИРОВАТЬ» и добавьте переменные среды, как показано ниже.

13. Чтобы убедиться, что введенный вами код используется во время тестирования, обязательно нажмите кнопку «Развернуть»; в противном случае будет выполнен код по умолчанию.

14. Выберите «Тест», а затем выберите «Настроить тестовое событие».

15. Назовите событие «StopRDS_Event» и сохраните изменения.

16. Нажмите кнопку «Тест», чтобы проверить работоспособность лямбда-функции. Если вы столкнулись с ошибкой, указывающей на то, что база данных не находится в доступном состоянии, это говорит о том, что лямбда-функция работоспособна. Поскольку вы уже остановили базу данных, это признак того, что функция работает должным образом.

# Execution Results and Logs
 
Test Event Name
stopRDS

Response
{
  "statusCode": 200,
  "body": "RDS instances stopping..."
}

Function Logs
START RequestId: 86572816-41da-4973-a240-b903dd07fd87 Version: $LATEST
Error stopping RDS instance database-1: An error occurred (InvalidDBInstanceState) when calling the StopDBInstance operation: Instance database-1 is not in available state.
END RequestId: 86572816-41da-4973-a240-b903dd07fd87
REPORT RequestId: 86572816-41da-4973-a240-b903dd07fd87 Duration: 1927.93 ms Billed Duration: 1928 ms Memory Size: 128 MB Max Memory Used: 75 MB Init Duration: 316.53 ms

Request ID
86572816-41da-4973-a240-b903dd07fd87

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

18. На странице сведений о функции вы увидите, что функция выполнена успешно.

После создания и тестирования функций мы можем создать правила EventBridge для запуска этих функций по мере необходимости.

Создайте правило Amazon EventBridge:

Правила Amazon EventBridge запускают созданные нами функции для остановки базы данных с тегами. В этом посте мы настроим их на срабатывание по шаблону событий.

  1. На консоли EventBridge в разделе «События» на панели навигации выберите «Правила». В разделе «Создать правило» определите имя правила, как показано ниже, и нажмите «Далее».

2. В настройках шаблона событий выберите «Служба AWS» как «RDS» и «Тип события» как «Событие экземпляра базы данных RDS». Нажмите «Редактировать шаблон», а затем введите шаблон, представленный ниже.

#Event Pattern  
{
 "source": ["aws.rds"],
 "detail-type": ["RDS DB Instance Event"],
 "resources": ["arn:aws:rds:ap-south-1:001626202209022090:db:database-1"],    #Database ARN
 "detail": {
 "EventID": ["RDS-EVENT-0088"]                   #Event ID
 }
}

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

3. Продолжайте, нажав кнопку «Далее».

4. Выберите целевую функцию Lambda и выберите функцию с именем «StopRDS_Lambda_Function».

5. Продолжайте, нажав кнопку «Далее».

6. Добавьте все необходимые теги, а затем продолжите, нажав кнопку «Далее».

Завершите процесс, нажав кнопку «Создать правило».

7. После настройки правила EventBridge важно инициировать процесс, запустив базу данных. Этот шаг жизненно важен для обеспечения правильной работы всех служб. Помните, что база данных автоматически остановится в соответствии с определенными правилами.

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

8. Для дальнейшего подтверждения вы можете перейти в CloudTrail и получить доступ к истории событий. В атрибутах поиска выберите «Имя события» и введите «StopDBInstance». Вы заметите успешный триггер события, как показано на изображении ниже.

9. Вы также можете проверить правильность работы вашей лямбда-функции, перейдя в раздел мониторинга конкретной функции. Подождите около 1 часа, чтобы данные отобразились, как показано на изображении.

10. Как и в случае с правилом EventBridge, вы можете перейти в раздел «Мониторинг», чтобы просмотреть вызовы и убедиться, что правило-триггер работает должным образом.

Эти процедуры и шаги также применимы к нескольким базам данных. Для этого необходимо включить соответствующие имена ресурсов Amazon (ARN) в политику дополнительных экземпляров RDS. Кроме того, внесите изменения в правило EventBridge и интегрируйте идентификатор базы данных каждого соответствующего экземпляра RDS в функцию Lambda.

Чтобы включить запуск экземпляров RDS, установите дополнительную функцию Lambda. Чтобы адаптировать его для запуска экземпляров RDS, просто измените код, заменив слова «stop» на «start». Стоит отметить, что при внесении изменений в правило EventBridge необходимо соблюдать последовательность остановки и последующего запуска базы данных. Эта последовательность гарантирует, что EventBridge точно идентифицирует действие как перезапуск.

Поздравляем, вы успешно справились и выполнили эту задачу!

Больше контента на PlainEnglish.io. Подпишитесь на нашу бесплатную еженедельную рассылку. Следите за нами в Twitter, LinkedIn, YouTube и Discord. Интересуетесь Взлом роста? Посмотрите Цепь.

Мы ценим ваш вклад✍✍✍, поэтому не стесняйтесь🫣🫣поделиться любыми предложениями, улучшениями или вопросами, которые у вас есть. можно иметь. Мы здесь, чтобы выслушать и помочь!🙂🙂

🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏

Я искренне надеюсь, что этот блог поможет вам сэкономить драгоценное время и позволит вам ценить моменты, проведенные со своими близкими. Продолжайте улыбаться и распространять любовь!😄😄.Спасибо, что читаете.🤝🤝

Ваша поддержка очень много значит для меня. Если этот блог показался вам интересным и информативным, пожалуйста, найдите время, чтобы нажать кнопку веселых хлопков и поделиться ею с другими. Спасибо, что были частью этого путешествия!🙏🙏.

Следуйте/Подключайтесь ко мне: LinkedIn | Средний | GitHub🔔🔔🔔🔔.

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

Ниже приведены ссылки на серию подробных | Шаг за шагом хостинг веб-сайтов WordPress на AWS Lightsail:

Часть 1:Как разместить веб-сайт WordPress на AWS LightSail.

Часть 2: Найдите учетные данные для входа на панель управления WordPress AWS Lightstail.

Часть 3: Настройка статического IP-адреса Lightsail на основе динамического IP-адреса.

Часть 3.1: Динамический IP-адрес экземпляров в AWS Lightsail.

Часть 4: Как зарегистрировать доменное имя в веб-сервисе Amazon | Зарегистрируйте доменное имя с помощью AWS Route53.

Часть 4.1: Подключение зарегистрированного домена Route53 к экземпляру AWS Lightsail.

Часть 5: Настройка бесплатного SSL-сертификата в WordPress AWS Lightsail.

Другие блоги:









Подпишитесь на нас, чтобы получать больше контента.

На простом английском языке

Спасибо, что вы являетесь частью нашего сообщества! Прежде чем уйти:

Больше контента на PlainEnglish.io. Подпишитесь на нашу бесплатную еженедельную рассылку. Следите за нами в Twitter, LinkedIn, YouTube и Discord. Интересуетесь Взлом роста? Посмотрите Цепь.