У меня есть следующий код модуля S3:
#------------------------------------------------------------
# variables
#------------------------------------------------------------
variable "ENV" {}
#------------------------------------------------------------
# data
#------------------------------------------------------------
data "aws_s3_bucket" "dlt_bucket" {
bucket = "dlt-bucket-${var.ENV}"
}
data "aws_sns_topic" "dlt_sns_topic" {
name = "dlt-sns-${var.ENV}"
}
#------------------------------------------------------------
# resources
#------------------------------------------------------------
resource "aws_s3_bucket_notification" "bucket_notification" {
bucket = data.aws_s3_bucket.dlt_bucket.id
topic {
topic_arn = data.aws_sns_topic.dlt_sns_topic.arn
events = ["s3:ObjectCreated:*"]
filter_prefix = "raw-content-topic-${var.ENV}-dlt"
}
}
А это мой основной модуль:
#------------------------------------------------------------
# main.tf
#------------------------------------------------------------
locals {
local_data = jsondecode(file("${path.module}/vars-${var.environment}.json"))
}
module "infrastructure_sns" {
source = "./modules/infrastructure/resources/sns"
ENV = var.environment
DLT_NOTIFICATION_EMAIL_ADDRESS = local.local_data.dlt_notification_email_address
}
module "infrastructure_s3" {
source = "./modules/infrastructure/resources/s3"
ENV = var.environment
depends_on = [
module.infrastructure_sns.dlt_sns_topic
]
}
но когда я запускаю план, я получаю следующую ошибку:
Error: no matching SNS Topic found
”‚
”‚ with module.infrastructure_s3.data.aws_sns_topic.dlt_sns_topic,
”‚ on modules/infrastructure/resources/s3/main.tf line 13, in data "aws_sns_topic" "dlt_sns_topic":
”‚ 13: data "aws_sns_topic" "dlt_sns_topic" {
Я попытался установить data
в модуле S3 и вызвать оттуда sns_topic, а также добавить локальный depends_on
в модуль S3, но все равно получил ту же ошибку.
Пожалуйста, посоветуйте, как я могу это решить?
Решено путем передачи темы SNS в качестве переменной в модуль S3:
module "infrastructure_s3" {
source = "./modules/infrastructure/resources/s3"
ENV = var.environment
SNS_DLT_TOPIC_ARN = module.infrastructure_sns.dlt_sns_topic.arn
}
Модуль SNS output.tf
output "dlt_sns_topic" {
value = aws_sns_topic.dlt_sns_topic
description = "dlt sns topic"
}
Модуль S3 main.tf
#------------------------------------------------------------
# variables
#------------------------------------------------------------
variable "ENV" {}
variable "SNS_DLT_TOPIC_ARN" {}
#------------------------------------------------------------
# data
#------------------------------------------------------------
data "aws_s3_bucket" "dlt_bucket" {
bucket = "dlt-bucket-${var.ENV}"
}
#------------------------------------------------------------
# resources
#------------------------------------------------------------
resource "aws_s3_bucket_notification" "bucket_notification" {
bucket = data.aws_s3_bucket.dlt_bucket.id
topic {
topic_arn = var.SNS_DLT_TOPIC_ARN
events = ["s3:ObjectCreated:*"]
filter_prefix = "raw-content-topic-${var.ENV}-dlt"
}
}
Ведро и тема SNS находятся в одном регионе?