У меня проблема с подготовкой Terraform. Когда я впервые запускаю terraform, я использую SSH-ключ, сгенерированный в консоли AWS. Этот ключ добавляется пользователю ubuntu
(это Ubuntu 16.04 AMI). Затем я запускаю remote-exec
подготовку:
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 позже, он ищет файл file("${var.aws_default_key_name}.pem"
. Теперь у меня вопрос, как пропустить эту подготовку при последующих запусках?
Я не хочу хранить ключ SSH в репозитории.
Я мог бы создать пустой файл, чтобы «обмануть» терраформ, но мне это решение не нравится.
Есть идеи получше?
2 ответа
Вместо того, чтобы выполнять подготовку в блоке aws_instance
, переместите его в null_resource
с соответствующими триггерами.
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]
}
}
Если ваши триггеры не изменятся, подготовка null_resource не будет запускаться при последующих запусках.
Sparrowform - это облегченный провайдер для инфраструктуры на основе Terraform. Преимущества по сравнению с другими инструментами подготовки заключаются в том, что этап terraform apply
, который выполняет загрузку инфраструктуры, отделен от этапа подготовки, поэтому вы можете сделать следующее:
$ 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
последующих запусков . Он выполняет свою работу (устанавливает доступные связанные зависимости, вот и все). Затем вы отбрасываете свой начальный ssh_private_key
и переходите с новым закрытым ключом (я полагаю, это связано с недоступностью?)
PS. раскрытие информации - я автор инструмента
Похожие вопросы
Новые вопросы
amazon-web-services
Amazon Web Services (AWS) - это общедоступное облако: IaaS (инфраструктура как услуга) и SaaS (программное обеспечение как услуга), предоставляемые Amazon. Вопросы по программированию и архитектуре находятся по теме. Общую справку по серверу можно получить по адресу https://serverfault.com. Тег AWS редко используется отдельно и обычно используется вместе с другими тегами, чтобы более четко определить тему вопроса.