如何轻松地扩展由第三方编写的terraform模块?
下面是一个为RDS事件创建sns主题的模块如何轻松地扩展由第三方编写的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
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
。你的问题的答案是否定的,这就是为什么你至少需要重构这个部分。通常,模块应该用于收集多个资源,并为最终用户做出明智的决策,就像普通语言中的类或模块一样。在需要抽象之前不要抽象东西。这个类不仅仅是一个简单的包装器。我只想给出一个简单的例子,所以我省略了一些属性。这很公平。不幸的是,您不能像那样扩展模块的资源。您可以编辑模块以使某些参数有条件,也可以将一个模块包装到另一个模块中以添加额外资源/更改默认值等,但这是有限的。