我正在查看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订阅吗?
答案 0 :(得分:0)
将源类型设置为“ db-instance”
然后仅订阅事件“恢复”。
然后在接收方(在我的情况下,是用python编写的lambda函数),我在event
参数内的SNS主题中过滤了“ Source Id”字段,并查找了临时数据库名称。如果源ID匹配,则lambda函数将处理该事件。