Terraform、已创建但未正确链接的基础设施、SQS、Lambda、CloudWatch

Terraform, Infrastructure created but not linked properly, SQS, Lambda, CloudWatch

我正在尝试使用 Terraform 创建 AWS 基础设施。 SQS、Lambda 和 CloudWatch。 我可以成功创建基础架构,但无法正确 link。

即当 SQS 消息为 added/sent?

时,CloudWatch 将触发一个事件到 lambda 函数

我在这里遗漏了什么吗?

-------------------------------------------- --------------

provider "aws" {
  region = "${var.REGION}"
}

# SQS
resource "aws_sqs_queue" "sqs-test" {
  name                      = "sqs-test"
  delay_seconds             = 0
  max_message_size          = 262144
  message_retention_seconds = 345600
  receive_wait_time_seconds = 10
}



#creating IAM roles to access Lamda.
resource "aws_iam_role" "iam_for_lambda" {
  name = "iam_for_lambda"
  assume_role_policy = <<EOF
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Action": "sts:AssumeRole",
      "Principal": {
        "Service": "lambda.amazonaws.com"
      },
      "Effect": "Allow",
      "Sid": ""
    }
  ]
}
EOF
}

# Creating a Lambda function
resource "aws_lambda_function" "lambda-test" {
  filename         = "test.zip"
  function_name    = "lambda-test"
  role             = "${aws_iam_role.iam_for_lambda.arn}"
  handler          = "main"
  runtime          = "go1.x"
  environment {
    variables = {
      SQS_KEY = "${var.SQS_KEY}"
      SQS_SECRET = "${var.SQS_SECRET}"
      TESTING_QUEUE = "${aws_sqs_queue.sqs-test.id}"
    }
  }
}


# Creating a CloudWatch Events Rules where any changes in SQS will trigger Lamda function.
resource "aws_cloudwatch_event_rule" "console-cl-test" {
  name        = "capture-cl-sqs-test"
  description = "Captures SQS events"
  event_pattern = <<PATTERN
{
  "detail-type": [
    "Simple Queue Service"
  ]
}
PATTERN
}

# Assigning that event to trigger a Lamda function
resource "aws_cloudwatch_event_target" "lambda-tr-test" {
  rule      = "${aws_cloudwatch_event_rule.console-cl-test.name}"
  target_id = "lambda-test"
  arn       = "${aws_lambda_function.lambda-test.arn}"
}

-------------------------------------------- --------------

我建议更改体系结构以按计划使用 SQS 消息。 只需按计划将 cloudwatch 事件规则更改为 运行,间隔时间较短,例如一分钟左右,并且在每次执行期间,使用 SQS API 消耗尽可能多的消息

更新

AWS 已于 2018 年 6 月将 SQS 事件源添加为 lambda 的触发器。

参考:https://aws.amazon.com/blogs/aws/aws-lambda-adds-amazon-simple-queue-service-to-supported-event-sources/