如何在Terraform中订阅临时数据库的恢复?还是不可能?

时间:2019-07-01 08:03:45

标签: terraform boto3 amazon-sns

我正在查看this example code,但不确定如何适应我的情况:

我的目标:

我想订阅rds事件,以便从快照中完全恢复临时数据库的数据时将调用我的lambda函数。

详细信息:

这是我的工作流程:

  

1)Lambda函数start_restore在计划的时间运行。这个   函数是用python编写的,并使用boto3创建拍子   名称为temp-sales-20190701的mysql db。该功能将   找到sales的最新数据库快照并将其还原到   temp-sales-20190701

     

2)恢复完成后,我要对   temp db,最终将被删除。 (请不要质疑   在此步骤中需要一个临时数据库。我故意遗漏了很多   详细信息,因为它非常针对用户需求

这是示例中的代码:

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

结果是,应用terraform文件时aws_db_instance.default不存在,因为temp-sales-20190701是动态创建的。我认为不可能用未知的数据库ID创建数据库事件订阅,对吗?

如果是这样,我可以在lambda函数start_restore中创建一个sns订阅吗?

1 个答案:

答案 0 :(得分:0)

将源类型设置为“ db-instance”

然后仅订阅事件“恢复”。

然后在接收方(在我的情况下,是用python编写的lambda函数),我在event参数内的SNS主题中过滤了“ Source Id”字段,并查找了临时数据库名称。如果源ID匹配,则lambda函数将处理该事件。