【发布时间】:2019-05-11 23:53:02
【问题描述】:
我们在 CloudFront 和 S3 上托管我们的网络应用程序。此基础架构在 Terraform 模块中进行配置。我们使用相同的模块(由 Terragrunt 管理)将我们的 web 应用程序部署到我们的暂存和生产环境中。
显然,我们不希望公开访问我们的暂存环境。因此,我们创建了一个 Lambda 函数来启用基本 HTTP 身份验证,并使用 aws_cloudfront_distribution 资源中的 lambda_function_association 来启用它。
问题是我们不希望 Lambda 也运行在我们的 prod 环境中。我无法有条件地设置资源的关联。
我也尝试过创建两个具有相同名称的资源并设置count 属性,以便仅存在这些资源。
例如
# Basic Auth Guard
resource "aws_cloudfront_distribution" "default" {
count = "${var.behind_auth_guard}"
...
}
# No Basic Auth Guard
resource "aws_cloudfront_distribution" "default" {
count = "${var.behind_auth_guard ? 0 : 1}"
}
但是,当我尝试部署代码时,我得到了aws_cloudfront_distribution.default: resource repeated multiple times。
有什么方法可以实现我想要的吗?
我考虑过的另一个选项是在两个版本上都设置 Lambda,但让它在 prod 中不做任何事情。但是,这似乎效率低下且成本高昂,因为每次请求都会调用 lamdba,并且希望尽可能避免它。
【问题讨论】:
标签: aws-lambda amazon-cloudfront terraform