Amazon web services 地形条件供应
我对Terraform资源调配有问题。当我第一次运行terraform时,我正在使用AWS控制台中生成的SSH密钥。这个键被添加到ubuntu用户中(它是ubuntu 16.04 AMI)。然后我运行Amazon web services 地形条件供应,amazon-web-services,terraform,Amazon Web Services,Terraform,我对Terraform资源调配有问题。当我第一次运行terraform时,我正在使用AWS控制台中生成的SSH密钥。这个键被添加到ubuntu用户中(它是ubuntu 16.04 AMI)。然后我运行remoteexecprovisioning: provisioner "remote-exec" { inline = [ "sudo apt -y update && sudo apt install -y python" ] connection { u
remoteexec
provisioning:
provisioner "remote-exec" {
inline = [
"sudo apt -y update && sudo apt install -y python"
]
connection {
user = "ubuntu"
private_key = "${file("${var.aws_default_key_name}.pem")}"
}
}
我需要安装python,以便以后可以使用Ansible。这是我唯一需要这个密钥的地方,因为我用私钥创建了自己的用户。但是,当我稍后尝试运行terraform时,它会搜索一个文件文件(${var.aws\u default\u key\u name}.pem“
)。
现在我有一个问题,如何在后续运行中跳过此设置
我不想在存储库中存储SSH密钥
我可以创建一个空文件来“欺骗”地形,但我不喜欢这个解决方案
有更好的想法吗?不要在
aws\u实例
块中进行资源调配,而是将其移出到具有适当触发器的块中
resource "aws_instance" "cluster" {
count = 3
# ...
}
resource "null_resource" "cluster" {
# Changes to any instance of the cluster requires re-provisioning
triggers {
cluster_instance_ids = "${join(",", aws_instance.cluster.*.id)}"
}
connection {
host = "${element(aws_instance.cluster.*.public_ip, 0)}"
}
provisioner "remote-exec" {
inline = [something]
}
}
如果您的触发器未更改,则在后续运行中将不会触发空\u资源调配。是基于Terraform的基础架构的轻量级调配器。与其他调配工具相比,Terraform应用的好处是基础架构引导与调配分离的阶段n阶段,因此您可以执行以下操作:
$ terraform apply # does infra bootstrap
$ nano sparrowfile # Sparrowdo equivalent for remote-exec chunk
#!/usr/bin/env perl6
bash 'apt -y update';
package-install 'python';
$ sparrowform --ssh_user=my-user --ssh_private_key=/path/to/key # do provision stage
显然,您可以自由地在后续运行中不运行sparrowform
。它完成了它的工作(即安装与ansible相关的依赖项)。然后您放弃初始的ssh_私钥
并使用新私钥(我想是与ansible相关的吧?)
注:披露-我是工具作者我会测试并让你知道,但似乎很有希望!