Amazon web services 地形、已创建但未正确链接的基础设施、SQS、Lambda、CloudWatch
我正在尝试使用Terraform创建AWS基础设施。 SQS、Lambda和CloudWatch。 我可以成功创建基础设施,但无法正确链接 i、 e.添加/发送SQS消息时,CloudWatch是否会触发lambda函数的事件 我有什么遗漏吗 -----------------------------------------------------------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
提供程序“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}"
}