Мы размещаем наше веб-приложение на CloudFront и S3.Эта инфраструктура настроена в модуле Terraform.Мы используем тот же модуль (управляемый Terragrunt) для развертывания нашего веб-приложения в наших промежуточных и производственных средах.
Очевидно, что мы не хотим публичного доступа к нашей промежуточной среде.Таким образом, мы создали функцию Lambda для включения Basic HTTP Auth и используем lambda_function_association
в ресурсе aws_cloudfront_distribution
, чтобы включить ее.
Проблема в том, что мы не хотим, чтобы Lambda запускаласьна нашей среде такжеМне не удалось условно установить связь для ресурса.
Я также попытался создать два ресурса с одинаковым именем и задать свойство 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
.
Есть ли способ достичь того, чего я хочу?
Другой вариант, который я рассмотрел, - это установка лямбды на обеих версиях, но при этом она ничего не делает в prod.Однако это кажется неэффективным и дорогостоящим, поскольку Lamdba будет вызываться при каждом запросе, и он хотел бы избежать этого, если это возможно.