[英]Create a cloudwatch event rule target to a lambda function with different inputs in Terraform
I created a CloudWatch event rule to trigger a lambda function to run in schedule.我创建了一个 CloudWatch 事件规则来触发 lambda function 按计划运行。 Howerver, I want the rule run with 2 different input values.
但是,我希望规则使用 2 个不同的输入值运行。
Eg: input1 is: {"namequery": "top-10-ip", "s3bucket": "stg-log", "query": "SELECT client_ip from ip_tables limit 10"}例如:input1 是:{“namequery”:“top-10-ip”,“s3bucket”:“stg-log”,“query”:“SELECT client_ip from ip_tables limit 10”}
and input2 is: {"namequery": "countError", "s3bucket": "stg-log", "query": "SELECT error from error_logs"}并且输入2是:{“namequery”:“countError”,“s3bucket”:“stg-log”,“query”:“SELECT error from error_logs”}
My expected result is like this image: expected result我的预期结果是这样的图像:预期结果
My Terraform code:我的 Terraform 代码:
resource "aws_cloudwatch_event_rule" "athena_sender" {
name = "${var.app_name}-${var.env_name}-lambda-athena-sender"
description = "${var.app_name}-${var.env_name} athena sender"
schedule_expression = var.options_athena_sender["schedule_expression"]
}
resource "aws_cloudwatch_event_target" "athena_sender1" {
rule = aws_cloudwatch_event_rule.athena_sender.name
target_id = aws_lambda_function.athena_sender_function.id
arn = aws_lambda_function.athena_sender_function.arn
input = <<JSON
{
"namequery": "${var.options_athena_sender["namequery1"]}",
"s3bucket": "${aws_s3_bucket.s3_logs.bucket}",
"query": "${var.options_athena_sender["query1"]}"
}
JSON
}
resource "aws_cloudwatch_event_target" "athena_sender2" {
rule = aws_cloudwatch_event_rule.athena_sender.name
target_id = aws_lambda_function.athena_sender_function.id
arn = aws_lambda_function.athena_sender_function.arn
input = <<JSON
{
"namequery": "${var.options_athena_sender["namequery2"]}",
"s3bucket": "${aws_s3_bucket.s3_logs.bucket}",
"query": "${var.options_athena_sender["query2"]}"
}
JSON
depends_on = [aws_cloudwatch_event_target.athena_sender1] // delay creation of the second athena sender CW event to prevent ConcurrentModificationException
}
However, it sounds like Terraform do not recognize the differences and it only create only 1 target.但是,听起来 Terraform 无法识别差异,并且仅创建 1 个目标。
Hope that anyone can help me, thank you so much!希望有人能帮助我,非常感谢!
This probably happens because you are using same target_id
in both cases:这可能是因为您在两种情况下都使用相同的
target_id
:
target_id = aws_lambda_function.athena_sender_function.id
Please change it to have different ids for different rules, eg:请更改它以针对不同的规则使用不同的 id,例如:
target_id = "${aws_lambda_function.athena_sender_function.id}1"
and和
target_id = "${aws_lambda_function.athena_sender_function.id}2"
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.