首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >terragrunt不能访问模块输出

terragrunt不能访问模块输出
EN

Stack Overflow用户
提问于 2020-11-23 22:48:59
回答 1查看 1.8K关注 0票数 0

我在和Terragrunt做斗争(我还是个新手)。我甚至可以用纯Terragrunt回购实例来描述我的问题:

查看这里( terragrunt.hcl ),我们可以看到从特定asg-elb-service中导入模块asg-elb-servicehttps://github.com/gruntwork-io/terragrunt-infrastructure-live-example/tree/master/prod/us-east-1/prod/webserver-cluster(也是terragrunt示例)。

现在我的观点是,一切都很好,直到模块解决了我的所有需求。但是使用前面提到的例子,假设我想在这个模块的上面添加一些东西(例如,对于ALB之类的侦听器规则),那么我想依赖于模块输出,并且我们可以检查“已使用”模块公开了这些:输出(https://github.com/gruntwork-io/terragrunt-infrastructure-modules-example/blob/master/asg-elb-service/outputs.tf)。

但是,即使我在结构中添加tf文件--继续我的示例,它也是这样的:

我只是无法通过任何方式“内插”并访问模块中的输出:(

EN

回答 1

Stack Overflow用户

发布于 2020-12-01 22:15:41

terragrunt是一个很薄的包装器,它只是提供了一些额外的配置工具。terragrunt是用来使多个terraform模块的管理变得更容易,它关心远程状态等等。但它并不是通过在其上面添加一些功能来扩展terraform模块。

回到您的示例,常见的方法是创建一个新的terraform模块,可能是在现有模块的基础上添加缺少的功能。您应该将terraform模块视为在一定抽象级别上执行特定工作的函数。尽管如此,创建使用其他模块的模块是完全有效的。考虑以下示例:如果触发了AWS CloudWatch警报,则需要提供一个可以发送Slack通知的基础结构。为了简化它,让我们想象一下,警报已经创建了。缺少的部分是将发送通知的Lambda函数,触发Lambda函数的SNS主题。

这是可以使用terraform模块创建的,但是它很可能依赖于另一个terraform模块(一个提供Lambda,另一个提供SNS主题)。这些“内部”模块处于另一个抽象级别,您仍然可以在其他情况下单独重用它们。伪代码可能如下所示:

代码语言:javascript
复制
module "sns_topic" {
  source = "git::https://github.com/..."

  name  = "trigger_lambda_to_send_notification_to_slack"
}

module "labmda_function" {
  source = "git::https://github.com/..."
  
  name   = "SendMessageToSlack"
  ...
}

# Invoke Lambda by SNS
resource "aws_sns_topic_subscription" "sns_subscriptions" {
  endpoint      = module.labmda_function.lambda_endpoint # this is how you reference module output
  protocol      = "lambda"
  topic_arn     = module.sns_topic.sns_topic_arn
}

然后,您可以简单地在terragrunt中使用这个模块。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64977723

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档