【问题标题】:Terraform conditional provisioningTerraform 条件供应
【发布时间】:2017-12-23 23:31:47
【问题描述】:

我对 Terraform 配置有疑问。当我第一次运行 terraform 时,我使用的是在 AWS 控制台中生成的 SSH 密钥。此密钥正在添加到ubuntu 用户(它是 Ubuntu 16.04 AMI)。然后我运行remote-exec 配置:

provisioner "remote-exec" {
  inline = [
  "sudo apt -y update && sudo apt install -y python"
  ]
  connection {
    user = "ubuntu"
    private_key = "${file("${var.aws_default_key_name}.pem")}"
  }
}

我需要安装 python,以便以后可以使用 Ansible。那是我唯一需要这个密钥的地方,再也没有了,因为我用我的私钥创建了我自己的用户。但是,当我稍后尝试运行 terraform 时,它会搜索文件 file("${var.aws_default_key_name}.pem"。 现在我有一个问题,如何在后续运行中跳过此配置?

我不想将 SSH 密钥存储在存储库中。

我可以创建一个空文件来“欺骗”terraform,但我不喜欢这个解决方案。

有更好的想法吗?

【问题讨论】:

    标签: amazon-web-services terraform


    【解决方案1】:

    不要在 aws_instance 块中进行配置,而是将其移到 null_resource 块中,并使用适当的触发器。

    resource "aws_instance" "cluster" {
      count = 3
    
      # ...
    }
    
    resource "null_resource" "cluster" {
      # Changes to any instance of the cluster requires re-provisioning
      triggers {
        cluster_instance_ids = "${join(",", aws_instance.cluster.*.id)}"
      }
    
      connection {
        host = "${element(aws_instance.cluster.*.public_ip, 0)}"
      }
    
      provisioner "remote-exec" {
        inline = [something]
      }
    }
    

    如果您的触发器不更改 null_resource 配置,则不会在后续运行中触发。

    【讨论】:

    • 我会测试并告诉你,但看起来很有希望!
    【解决方案2】:

    Sparrowform 是基于 Terraform 的基础设施的轻量级供应商。相对于其他供应工具的好处是,terraform apply 的基础设施引导阶段与供应阶段分离,因此您可以这样做:

    $ terraform apply # does infra bootstrap
    
    $ nano sparrowfile # Sparrowdo equivalent for remote-exec chunk
    
    #!/usr/bin/env perl6
    
    bash 'apt -y update';
    package-install 'python';
    
    $ sparrowform --ssh_user=my-user --ssh_private_key=/path/to/key  # do provision stage
    

    显然,您可以后续运行不运行sparrowform。它完成了它的工作(安装 ansible 相关的依赖项,就是这样)。然后你放弃你最初的ssh_private_key 并使用新的私钥(我猜是ansible相关的?)

    PS。披露 - 我是工具作者

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-08-20
      • 2020-04-26
      • 1970-01-01
      • 2017-11-14
      • 1970-01-01
      • 2021-12-27
      • 2018-01-21
      • 2020-07-16
      相关资源
      最近更新 更多