2017-07-25 69 views
0

我正在尝试在Terraform中创建一个解决方案,从而可以使用让我们在S3存储桶中进行加密或提供自己的TLS证书来创建TLS证书。我面临的问题是我似乎无法有条件地运行Let's Encrypt证书生成和上传步骤。terraform中的条件TLS证书管理

如何使最后两个步骤有条件?我正在考虑将它们包装在null_resource中,我如何根据外部数据制作触发器?

任何提示非常感谢!多谢你们。

ň

resource "null_resource" "sync_certs" { 
    provisioner "local-exec" { 
    command = "mkdir -p ./tmp/certs" 
    } 
    provisioner "local-exec" { 
    command = "aws s3 sync s3://xxxxxx/${var.root_domain_name}/${var.env_name} ./tmp/certs/ && ls -l ./tmp/certs/" 
    } 
} 

resource "tls_private_key" "cert_private_key" { 
    count  = "${var.bank_count}" 
    algorithm = "RSA" 
} 

resource "acme_registration" "reg" { 
    server_url = "${var.acme_url}" 

    account_key_pem = "${tls_private_key.generated_key.private_key_pem}" 

    email_address = "xxxxx" 
} 

resource "acme_certificate" "certificate" { 
    count   = "${var.bank_count}" 
    server_url  = "${var.acme_url}" 
    account_key_pem = "${tls_private_key.generated_key.private_key_pem}" 
    common_name  = "${var.bank_names[count.index]}.${var.env_name}.${var.root_domain_name}" 

    dns_challenge { 
    provider = "route53" 
    } 

    registration_url = "${acme_registration.reg.id}" 
} 

resource "local_file" "privkey" { 
    count  = "${var.bank_count}" 
    content  = "${tls_private_key.generated_key.private_key_pem}" 
    filename = "./tmp/certs/${var.bank_names[count.index]}.privkey.pem" 
} 


resource "aws_s3_bucket_object" "tls_private_key_file" { 
    count  = "${var.bank_count}" 
    bucket  = "xxxx" 
    key   = "${var.root_domain_name}/${var.env_name}/${var.bank_names[count.index]}.privkey.pem" 
    source  = "./tmp/certs/${var.bank_names[count.index]}.privkey.pem" 
    content_type = "text/plain" 
    depends_on = ["local_file.privkey"] 
} 

} 

回答

0

不知道如果我的理解是正确的,你在找这样的事情?

首先定义一个开关开/关变量enable=true|false

将计数代码放在您想要控制的任何资源中。

count = "${var.enable ? var.bank_count : 0}" 
0

我最终解决了这个问题,将terraform包装在一个脚本中。在这里,我可以检查是否要在s3中使用certs,并且在覆盖目录中移动terraform的相应文件。不漂亮,但它的作品!