如何轻松地扩展由第三方编写的terraform模块?

如何轻松地扩展由第三方编写的terraform模块?,terraform,Terraform,下面是一个为RDS事件创建sns主题的模块 module "rds_event_sns" { source = "../../../../common/sns/topic" name = "${var.lambda_filename}-rds-event" } 下面是common/sns/topic terraform { required_version = "0.11.7" } variable "name" {} variable "publishers" { typ

下面是一个为RDS事件创建sns主题的模块

module "rds_event_sns" {
  source = "../../../../common/sns/topic"
  name = "${var.lambda_filename}-rds-event"
}
下面是
common/sns/topic

terraform {
  required_version = "0.11.7"
}

variable "name" {}

variable "publishers" {
  type = "list"
}


resource "aws_sns_topic" "topic_simple" {
  name = "canva-${var.queue_prefix}${var.name}"
}
我希望如何在sns主题上设置
lambda\u failure\u feedback\u role\u arn
lambda\u failure\u feedback\u role\u arn
。资源
主题\u simple
似乎不接受这些属性

我是否可以简单地将这些属性传递给
topic\u simple
,而不更改
common/sns/topic
?e、 g

module "rds_event_sns" {
  source = "../../../../common/sns/topic"
  name = "${var.lambda_filename}-rds-event"
  lambda_failure_feedback_role_arn: "arn:aws:iam::147857925614:role/SNSFailureFeedback"
  lambda_success_feedback_role_arn: "arn:aws:iam::147857925614:role/SNSSuccessFeedback"
}

如果这不是terraform的工作原理,那么什么是一个好的替代方案?

这是该模块的全部吗?如果是,为什么它是一个模块而不是一个资源?除了添加不必要的抽象级别,它实际上没有做任何事情。
rds\u event\u sns.arn
随后在同一tf文件中的几个地方使用。我不拥有这些代码,只想做一些小的更改,所以我不希望进行任何重构。是的,但您可以用
module.rds\u event\u sns.arn
替换它的
aws\u sns\u topic.rds\u event.arn
。你的问题的答案是否定的,这就是为什么你至少需要重构这个部分。通常,模块应该用于收集多个资源,并为最终用户做出明智的决策,就像普通语言中的类或模块一样。在需要抽象之前不要抽象东西。这个类不仅仅是一个简单的包装器。我只想给出一个简单的例子,所以我省略了一些属性。这很公平。不幸的是,您不能像那样扩展模块的资源。您可以编辑模块以使某些参数有条件,也可以将模块包装在另一个模块中以添加额外资源/更改默认值等,但这只是事情的极限。这就是该模块的全部内容吗?如果是,为什么它是一个模块而不是一个资源?除了添加不必要的抽象级别,它实际上没有做任何事情。
rds\u event\u sns.arn
随后在同一tf文件中的几个地方使用。我不拥有这些代码,只想做一些小的更改,所以我不希望进行任何重构。是的,但您可以用
module.rds\u event\u sns.arn
替换它的
aws\u sns\u topic.rds\u event.arn
。你的问题的答案是否定的,这就是为什么你至少需要重构这个部分。通常,模块应该用于收集多个资源,并为最终用户做出明智的决策,就像普通语言中的类或模块一样。在需要抽象之前不要抽象东西。这个类不仅仅是一个简单的包装器。我只想给出一个简单的例子,所以我省略了一些属性。这很公平。不幸的是,您不能像那样扩展模块的资源。您可以编辑模块以使某些参数有条件,也可以将一个模块包装到另一个模块中以添加额外资源/更改默认值等,但这是有限的。