Как подписаться на временное восстановление БД в терраформе?Или это просто невозможно? - PullRequest
0 голосов
/ 01 июля 2019

Я смотрю на этот пример кода , и я не уверен, как я могу принять его в моей ситуации:

Моя цель:

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

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

Вот мой рабочий процесс:

1) Лямбда-функция start_restore запускается в запланированное время. это Функция написана на Python и использует boto3 для создания временного mysql db с именами типа temp-sales-20190701. Функция будет найдите последний снимок БД sales и восстановите его до temp-sales-20190701

2) После завершения восстановления я хочу выполнить некоторые действия с Temp дБ и будет сброшен в конце концов. ( Пожалуйста, не задавайте вопросов нужна временная база данных на этом этапе. Я намеренно пропускаю много детали, потому что это очень специфично для требования пользователя )

Вот код в примере:

resource "aws_db_instance" "default" {
  allocated_storage    = 10
  engine               = "mysql"
  engine_version       = "5.6.17"
  instance_class       = "db.t2.micro"
  name                 = "mydb"
  username             = "foo"
  password             = "bar"
  db_subnet_group_name = "my_database_subnet_group"
  parameter_group_name = "default.mysql5.6"
}

resource "aws_sns_topic" "default" {
  name = "rds-events"
}

resource "aws_db_event_subscription" "default" {
  name      = "rds-event-sub"
  sns_topic = "${aws_sns_topic.default.arn}"

  source_type = "db-instance"
  source_ids  = ["${aws_db_instance.default.id}"]

  event_categories = [
    "availability",
    "deletion",
    "failover",
    "failure",
    "low storage",
    "maintenance",
    "notification",
    "read replica",
    "recovery",
    "restoration",
  ]
}

(как придира, думаю, мне нужно только "restoration" в event_categories)

В результате aws_db_instance.default отсутствует при применении файла terraform, поскольку temp-sales-20190701 создается на лету. Я думаю, что было бы невозможно создать подписку на событие db с неизвестным идентификатором db, правильно?

Если это так, могу ли я создать подписку sns внутри лямбда-функции start_restore?

1 Ответ

0 голосов
/ 12 июля 2019

Установить тип источника "db-instance"

Тогда подпишитесь только на событие "восстановление".

Затем на стороне получателя (в моем случае лямбда-функция, написанная на python), я фильтрую поле 'Source Id' в теме SNS внутри параметра event и ищу имя временной базы данных. Если идентификатор источника совпадает, то лямбда-функция будет обрабатывать событие.

...