Как отправлять локальные файлы с помощью Terraform Cloud в качестве удаленного сервера?

Я создаю экземпляр 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 Cloud вместо моей локальной машины. Как я могу передать файл с моего локального компьютера, продолжая использовать Terraform Cloud?


person Kingindanord    schedule 01.02.2020    source источник


Ответы (1)


Нет прямого способа сделать то, что я спросил в вопросе. В конце концов, я загрузил ключи в AWS с его CLI следующим образом:

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"   

    ...

}

Примечание. Да, file:// выглядит как синтаксис Windowsest, но вы должны использовать его и в Linux.

person Kingindanord    schedule 25.03.2020