无法将 Terraform Provisioner 与 aws lightsail 一起使用

Fail to use terraform provisioner with aws lightsail

我无法通过 aws lightsail 使用供应器("file" 和 "remote-exec")。对于 "file" 供应商,我一直收到连接拒绝连接到端口 22 的拨号错误,"remote-exec" 给我一个超时错误。我可以看到它一直在尝试连接到实例,但就是无法连接到它。

对于文件供应器,我也尝试过直接使用 scp,它工作得很好。

我使用的连接块示例片段如下:

resource "aws_lightsail_instance" "han-mongo" {
  name              = "han-mongo"
  availability_zone = "us-east-1b"
  blueprint_id      = "ubuntu_16_04"
  bundle_id         = "nano_1_0"
  key_pair_name     = "my_key_pair"
  user_data         = "${file("userdata.sh")}" 

  provisioner "file" {
         source = "file.service"
         destination = "/home/ubuntu"
         connection {
            type = "ssh"
            private_key =  "${file("my_key.pem")}"
            user = "ubuntu"
            timeout = "20s"
        }
  }
}

除了认证信息,还需要告诉Terraform应该使用哪个IP地址来连接,像这样:

connection {
  type        = "ssh"
  host        = "${self.public_ip_address}"
  private_key = "${file("my_key.pem")}"
  user        = "ubuntu"
  timeout     = "20s"
}

对于某些资源,Terraform 能够从资源属性自动推断出一些连接详细信息,但目前 Lightsail 实例不支持此功能,因此有必要明确指定 host 参数。