Amazon web services 地形、已创建但未正确链接的基础设施、SQS、Lambda、CloudWatch

Amazon web services 地形、已创建但未正确链接的基础设施、SQS、Lambda、CloudWatch,amazon-web-services,aws-lambda,amazon-sqs,terraform,amazon-cloudwatch,Amazon Web Services,Aws Lambda,Amazon Sqs,Terraform,Amazon Cloudwatch,我正在尝试使用Terraform创建AWS基础设施。 SQS、Lambda和CloudWatch。 我可以成功创建基础设施,但无法正确链接 i、 e.添加/发送SQS消息时,CloudWatch是否会触发lambda函数的事件 我有什么遗漏吗 ----------------------------------------------------------- 提供程序“aws”{ region=“${var.region}” } #SQS 资源“aws_sqs_队列”“sqs测试”{ name

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

i、 e.添加/发送SQS消息时,CloudWatch是否会触发lambda函数的事件

我有什么遗漏吗

-----------------------------------------------------------
提供程序“aws”{
region=“${var.region}”
}
#SQS
资源“aws_sqs_队列”“sqs测试”{
name=“sqs测试”
延迟时间=0秒
最大消息大小=262144
消息保留时间=345600秒
接收\等待\时间\秒=10
}
#创建IAM角色以访问Lamda。
资源“aws_iam_角色”“iam_用于lambda”{
name=“iam_代表λ”

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

更新

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


参考资料:

从AWS门户手动完成架构设计时,架构设计良好,工作正常。尝试使用Terraform进行构建时,架构设计不起作用。是否存在不使用SQS触发器进行Lambda的限制?(这是相当新的,可在Terraform中使用AWS provider 1.26+)。是的。根据答案对架构设计进行了更改。工作正常。
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}"
}