使用Terraform

时间:2018-02-26 09:05:04

标签: amazon-web-services azure docker google-compute-engine terraform

我想将Terrafom用于以下任务序列:

  1. 在常见的IaaS云中创建虚拟机(我目前正在使用Google Compute Engine,但AWS / Azure /等也很好)

  2. 在该VM上安装Docker

  3. 在该VM上启动Docker容器

  4. 应该采取的方式如下:

    config.tf:

    module "google_server" {
        source="google_module"
        name_machine = "server"
    }
    provider "docker" {
        alias="abc"
        host="tcp://${module.google_server.ip_address[0]}:2375"
    }
    
    resource "docker_container" "container" {
        provider = "docker.abc"
        ...
    }
    

    google_module / google_server.tf

    provider "google" {
        ...
    }
    
    resource "google_compute_instance" "vm" {
        ...
    }
    
    output "ip_address" {
      value = "${google_compute_instance.vm.*.network_interface.0.access_config.0.assigned_nat_ip}"
    }
    

    但是我收到以下错误:

    module.docker.provider.docker.abc: Error initializing Docker client: invalid endpoint
    

    如果我用随机IPv4地址替换${module.google_server.ip_address[0]},则错误会更改为超时。 我能够解决问题的唯一方法是通过带有Terraform的SSH脚本运行docker。由于这不是很干净,我将不胜感激。

1 个答案:

答案 0 :(得分:0)

我自己找到了答案。这是TerraForm的Github项目中的open issue

常见的解决方法(as described here)是首先使用TerraForm apply标记运行-target,以便运行多阶段apply

在这种情况下,它将是:

$ terraform apply -target=module.google_server
 -- works on target first --
$ terraform apply
 -- works on rest --