Как отправлять локальные файлы с помощью 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?
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.