terraform为RDS创建cloudwatch事件以触发lambda

terraform为RDS创建cloudwatch事件以触发lambda,terraform,terraform-provider-aws,Terraform,Terraform Provider Aws,我想在RDS实例重新启动或停止时运行AWS lambda函数。 我正在探索创建cloudwatch事件,每当RDS实例重新启动或停止时,它都会触发我的lambda函数 如何使用terraform设置此功能。我使用了下面的方法进行尝试,但它无法执行。 provider "aws" { access_key = "" secret_key = "" version = "~> 2.10" region = "ap-southeast-1" } resource "aw

我想在RDS实例重新启动或停止时运行AWS lambda函数。 我正在探索创建cloudwatch事件,每当RDS实例重新启动或停止时,它都会触发我的lambda函数

如何使用terraform设置此功能。我使用了下面的方法进行尝试,但它无法执行。

provider "aws" 
{
    access_key = ""
    secret_key = ""
version = "~> 2.10"
    region = "ap-southeast-1"
}
resource "aws_cloudwatch_event_rule" "test-RDS-event" {
  name = "test-RDS-event"
  description = "Capture RDS event for lambda target"
  event_pattern = <<pattern
  {
    "source": [
      "aws.rds"
      ],
      "detail-type": [
        "RDS DB Instance Event"
      ],
      "detail": {
        "EventCategories": [
          "failover"
        ]
      }

  }
pattern
}
resource "aws_cloudwatch_event_target" "lambda" {
  rule = "${aws_cloudwatch_event_rule.test-RDS-event.name}"
  target_id = "populate_NLB_TG_with_RDS"
  arn = "${aws_cloudwatch_event_target.lambda.arn}"
  }
提供程序“aws”
{
access_key=“”
secret_key=“”
version=“~>2.10”
region=“ap-东南-1”
}
资源“aws\u cloudwatch\u事件\u规则”“测试RDS事件”{
name=“测试RDS事件”
description=“捕获lambda目标的RDS事件”

event_pattern=在提供的代码中,您没有创建lambda函数,因此-不要使用lambda的arn。它应该类似于:

resource "aws_lambda_function" "rds-events" {
  filename = "${data.archive_file.start_scheduler.output_path}"
  function_name = "rds-events"
  ...
} 

resource "aws_cloudwatch_event_target" "lambda" {
  rule = "${aws_cloudwatch_event_rule.test-RDS-event.name}"
  target_id = "populate_NLB_TG_with_RDS"
  arn = "${aws_lambda_function.rds-events.arn}"
}

在提供的代码中,您没有创建lambda函数,因此-不要使用lambda的arn。它应该类似于:

resource "aws_lambda_function" "rds-events" {
  filename = "${data.archive_file.start_scheduler.output_path}"
  function_name = "rds-events"
  ...
} 

resource "aws_cloudwatch_event_target" "lambda" {
  rule = "${aws_cloudwatch_event_rule.test-RDS-event.name}"
  target_id = "populate_NLB_TG_with_RDS"
  arn = "${aws_lambda_function.rds-events.arn}"
}

到目前为止,您尝试了什么?参考资料“aws_cloudwatch_event_rule”“test RDS event”{name=“test RDS event”description=“Capture RDS event for lambda target”event_pattern=我已经在上面写过了,当我尝试初始化时,我在下面遇到了错误:错误加载C:\Terraform\example.tf:错误读取aws_cloudwatch_event_目标的配置[lambda]:aws_lambda_function.populate_NLB_TG_with_RDS:resource变量必须由三部分组成:TYPE.NAME.ATTR in:${aws_lambda_function.populate_NLB_TG_with_RDS}您应该编辑您的问题,将Terraform代码包括在内,而不是将其放在未格式化的注释中。您好,对不起,我对这个门户和编程非常陌生,所以我不太确定。我已经更新了代码和我收到的错误。对上述内容有任何建议。您迄今为止尝试了什么?参考资料“aws\u cloudwatch\u事件\u规则”“test RDS event”{name=“test RDS event”description=“Capture RDS event for lambda target”event_pattern=我已经在上面写过了,当我尝试初始化时,下面出现了错误:错误加载C:\Terraform\example.tf:错误读取aws_cloudwatch_event_target的配置[lambda]:aws_lambda_function.populate_NLB_TG_with_RDS:resource变量必须由三部分组成:TYPE.NAME.ATTR in:${aws_lambda_function.populate_NLB_TG_with_RDS}您应该编辑您的问题,将Terraform代码包括在内,而不是将其放在未格式化的注释中。您好,对不起,我对这个门户和编程非常陌生,所以我不太确定。我已经更新了代码和我收到的错误。以上有什么建议吗。