温馨提示:本文翻译自stackoverflow.com,查看原文请点击:provisioning - How to send local files using Terraform Cloud as remote backend?
terraform provisioning terraform-cloud

provisioning - 如何使用Terraform Cloud作为远程后端发送本地文件?

发布于 2020-04-10 11:30:06

我正在创建AWS EC2实例,并且正在使用Terraform Cloud作为后端。

./main.tf中

terraform {

    required_version = "~> 0.12"
    backend "remote" {
    hostname     = "app.terraform.io"
    organization = "organization"
    workspaces { prefix = "test-dev-" }

  }

./modules/instances/function.tf中


resource "aws_instance" "test" {
    ami = "${var.ami_id}"
    instance_type = "${var.instance_type}"
    subnet_id = "${var.private_subnet_id}"
    vpc_security_group_ids = ["${aws_security_group.test_sg.id}"]
    key_name      = "${var.test_key}"                                        

    tags = {
        Name = "name"
        Function = "function"
    }

  provisioner "remote-exec" {
    inline = [
      "sudo useradd someuser"
    ]

    connection {
      host = "${self.public_ip}"
      type        = "ssh"
      user        = "ubuntu"
      private_key = "${file("~/.ssh/mykey.pem")}"
    }
  }
}

结果,我得到了以下错误:

Call to function "file" failed: no file exists at /home/terraform/.ssh/...

因此,这里发生的是terraform想在Terraform Cloud中而不是我的本地计算机中查找文件。如何从本地计算机传输文件并仍然使用Terraform Cloud?

查看更多

提问者
Kingindanord
被浏览
75
Kingindanord 2020-03-25 10:20

没有直接的方法可以完成我在问题中提出的要求。最后,我最终使用以下CLI将密钥上传到AWS中:

aws ec2 import-key-pair --key-name "name_for_the_key" --public-key-material file:///home/user/.ssh/name_for_the_key.pub

然后像这样引用它:

resource "aws_instance" "test" {

    ami = "${var.ami_id}"

    ...

    key_name      = "name_for_the_key"   

    ...

}

注意 Yes是file://曾经看起来像“ Windowsest”语法,但是您也必须在Linux上使用它。