amazon-web-services - 如何使用模块指定死信依赖?
问题描述
我有以下基于这个官方模块的核心模块:
module "sqs" {
source = "github.com/terraform-aws-modules/terraform-aws-sqs?ref=0d48cbdb6bf924a278d3f7fa326a2a1c864447e2"
name = "${var.site_env}-sqs-${var.service_name}"
}
我想创建两个队列:xyz 和 xyz_dead。xyz 将其死信消息发送到 xyz_dead。
module "xyz_queue" {
source = "../helpers/sqs"
service_name = "xyz"
redrive_policy = <<POLICY {
"deadLetterTargetArn" : "${data.TODO.TODO.arn}",
"maxReceiveCount" : 5
}
POLICY
site_env = "${var.site_env}"
}
module "xyz_dead_queue" {
source = "../helpers/sqs"
service_name = "xyz_dead"
site_env = "${var.site_env}"
}
如何指定deadLetterTargetArn
依赖项?
如果我做:
data "aws_sqs_queue" "dead_queue" {
filter {
name = "tag:Name"
values = ["${var.site_env}-sqs-xyz_dead"]
}
}
并设置deadLetterTargetArn
为"${data.aws_sqs_queue.dead_queue.arn}"
,然后我收到此错误:
错误:data.aws_sqs_queue.thumbnail_requests_queue_dead:“名称”:未设置必填字段错误:data.aws_sqs_queue.thumbnail_requests_queue_dead::无效或未知键:过滤器
解决方案
最好的方法是使用模块输出的 ARN:
module "xyz_queue" {
source = "../helpers/sqs"
service_name = "xyz"
site_env = "${var.site_env}"
redrive_policy = <<POLICY
{
"deadLetterTargetArn" : "${module.xyz_dead_queue.this_sqs_queue_arn}",
"maxReceiveCount" : 5
}
POLICY
}
module "xyz_dead_queue" {
source = "../helpers/sqs"
service_name = "xyz_dead"
site_env = "${var.site_env}"
}
注意:我还在这里更改了您的 HEREDOC 的缩进,因为您通常需要使用这些.
这会将 SQS 队列的 ARN 直接从xyz_dead_queue
模块传递到xyz_queue
.
至于你得到的错误,aws_sqs_queue
数据源只需要一个name
参数,而不是filter
像其他一些数据源那样的块。
如果您想使用aws_sqs_queue
数据源,那么您只想使用:
data "aws_sqs_queue" "dead_queue" {
name = "${var.site_env}-sqs-${var.service_name}"
}
也就是说,如果您同时创建两个事物,那么除非您首先创建第一个资源,否则使用数据源引用其中一个事物将会遇到问题。这是因为数据源在资源之前运行,因此如果两个队列都不存在,您的数据源将运行并且找不到死信队列并因此失败。如果死信队列确实存在,那就没问题了。一般来说,尽管您最好避免使用这样的数据源,而仅使用它们来引用在单独terraform apply
(或者甚至可能在 Terraform 之外创建)中创建的事物。
您最好将资源或模块的输出简单地传递给其他资源/模块,并允许 Terraform 也为它们正确构建依赖关系树。
推荐阅读
- sql - 在 SQL 中根据匹配结果创建记分卡报告
- spring-boot - 使用 Spring Boot Paketo Buildpack 时的 Dockerfile“VOLUME”等效项
- vue.js - 有没有办法解决这个 VueJS 和 axios 问题“TypeError:无法读取未定义的属性 'get'”
- python - ImageAI 模型未加载
- oracle - 我有一列值(200ML),我需要将(ML)与列分开
- rust - 解锁互斥锁不会返回“MutexGuard”
- python - 有没有办法在 Python 的散点图中对颜色使用条件?
- mongodb - 如何在 mongodb 中使用聚合从动态 mongoID 获取数据
- python - 如何使用 cURL 从网站获取响应,然后将该响应作为 python 运行?
- c# - IndexOutOfRangeException:索引超出了数组的范围。(统一)