Лучший способ сделать это - использовать выходной 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 здесь, потому что обычно необходимо удалить отступ с помощью этих .
. При этом ARN очереди SQS будет передаваться непосредственно из модуля 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 правильно построить для них дерево зависимостей.