Terraform,创建具有和不具有多个Origins的CloudFront分布式可重用模块

时间:2017-03-06 18:01:06

标签: amazon-cloudfront terraform siteorigin

我有一个需要CloudFront + s3的应用程序。我想创建一个CloudFront模块,并使其可以重用于其他应用程序。

我的问题是我有一个需要两个Origins(s3_origin_config和custom_origin_config)的应用程序以及只需要s3_origin_config的其他应用程序。

问题是:我如何拥有一个处理需要两个Origins的应用程序的模块,另一个只需要一个Origin的模块。

下面是我的代码示例:

resource "aws_cloudfront_distribution" "s3_distribution" {
  origin {
    domain_name = "${var.domain_name}"
    origin_id   = "${var.app_name}-${var.environment}"
    origin_path = "/${var.environment}/${var.setup}/public"
    s3_origin_config {
       origin_access_identity = ${aws_cloudfront_origin_access_identity.origin_access_identity.cloudfront_access_identity_path}"
       }
  }


#HERE, I would like something like if $second_origin, then:
#I know there is no if in terraform, just to have an example ;)
origin {             
   domain_name = "${var.second_origin_domain_name}"
   origin_id   = "Custom-${var.second_origin_domain_name}"
   custom_origin_config {
      http_port              = "80"
      https_port             = "443"
      origin_protocol_policy = "https-only"
      origin_ssl_protocols   = ["TLSv1", "TLSv1.1", "TLSv1.2"]
    }
  custom_header {
    name  = "${var.second_origin_header_name}"
    value = "${var.second_origin_header_key}"
  }
}...

谢谢!

1 个答案:

答案 0 :(得分:0)

您需要创建两个具有不同原始要求的Cloudfront资源。使用count,您可以同时启用一个资源和禁用另一个资源。这将使您可以将同一模块用于不同的原产地要求。

这是一个简单的例子。

resource "aws_cloudfront_distribution" "cf_app1" {
  count = "${var.something ? 1 : 0}"
}

resource "aws_cloudfront_distribution" "cf_app2" {
  count = "${var.something ? 0 : 1}"
}