Apply complete! Resources: 1 added, 0 changed, 0 destroyed.
Для использования средства инициализации remote-exec потребуется чуть больше усилий. Чтобы выполнить код на удаленном ресурсе, таком как сервер EC2, вашему клиенту Terraform придется сделать следующее.
Для начала создадим группу безопасности, которая разрешает входящие соединения на стандартном для SSH порте под номером 22:
resource "aws_security_group" "instance" {
ingress {
from_port = 22
to_port = 22
protocol = "tcp"
# Чтобы этот пример можно было легко попробовать, мы разрешаем все
# соединения по SSH.
# В реальных условиях вы должны принимать их только с доверенных IP-адресов.
cidr_blocks = ["0.0.0.0/0"]
}
}
Обычно для аутентификации нужно сгенерировать на своем компьютере пару SSH-ключей: открытый и секретный. Первый следует загрузить в AWS, а второй сохранить в надежном месте, откуда к нему сможет обратиться Terraform. Но, чтобы вам проще было попробовать этот пример, можете использовать ресурс tls_private_key, который сгенерирует секретный ключ автоматически:
# Чтобы этот пример можно было легко попробовать, мы генерируем секретный ключ
# в Terraform.
# В реальных условиях управление SSH-ключами следует вынести за пределы Terraform.
resource "tls_private_key" "example" {
algorithm = "RSA"
rsa_bits = 4096
}
Этот секретный ключ хранится в состоянии Terraform, что не очень хорошо для промышленного использования, но подойдет для этого примера. Теперь загрузим открытый ключ в AWS с помощью ресурса aws_key_pair:
resource "aws_key_pair" "generated_key" {
public_key = tls_private_key.example.public_key_openssh
}
Приступим к написанию кода для сервера EC2:
resource "aws_instance" "example" {
ami = "ami-0c55b159cbfafe1f0"
instance_type = "t2.micro"
vpc_security_group_ids = [aws_security_group.instance.id]
key_name = aws_key_pair.generated_key.key_name
}
Первые несколько строк этого кода должны показаться знакомыми: они развертывают Ubuntu Amazon Machine Image (AMI) на t2.micro и привязывают к этому серверу EC2 группу безопасности, которую вы создали ранее. Единственное нововведение — это использование атрибута key_name, который позволяет AWS привязать ваш открытый ключ к серверу EC2. AWS добавит этот ключ в его файл authorized_keys, благодаря чему вы сможете зайти на этот сервер по SSH с соответствующим секретным ключом.
Теперь добавим к серверу EC2 средство инициализации remote-exec:
resource "aws_instance" "example" {
ami = "ami-0c55b159cbfafe1f0"
instance_type = "t2.micro"
vpc_security_group_ids = [aws_security_group.instance.id]
key_name = aws_key_pair.generated_key.key_name
provisioner "remote-exec" {
inline = ["echo \"Hello, World from $(uname -smp)\""]
}
}
Это почти ничем не отличается от средства инициализации local-exec, только вместо одной исполняемой команды (command) здесь с помощью аргумента inline передается их список. В завершение вам нужно сконфигурировать Terraform для подключения к этому серверу EC2 по SSH при запуске remote-exec. Для этого предусмотрен блок connection:
resource "aws_instance" "example" {
ami = "ami-0c55b159cbfafe1f0"
instance_type = "t2.micro"
vpc_security_group_ids = [aws_security_group.instance.id]
key_name = aws_key_pair.generated_key.key_name
provisioner "remote-exec" {
inline = ["echo \"Hello, World from $(uname -smp)\""]
}
connection {
type = "ssh"
host = self.public_ip
user = "ubuntu"
private_key = tls_private_key.example.private_key_pem
}
}
Блок connection заставляет Terraform подключиться к публичному IP-адресу сервера EC2 по SSH с помощью имени пользователя "ubuntu" (так по умолчанию называется корневой пользователь в образах AMI с Ubuntu) и автоматически сгенерированного секретного ключа. Обратите внимание на ключевое слово self, которое применяется для задания параметра host. Это выражение со следующим синтаксисом:
self.
Этот специальный синтаксис можно использовать исключительно в блоках connection и provisioner для обращения к выходному атрибуту родительского ресурса. Если применить стандартный синтаксис вида aws_instance.example.
Вильям Л Саймон , Вильям Саймон , Наталья Владимировна Макеева , Нора Робертс , Юрий Викторович Щербатых
Зарубежная компьютерная, околокомпьютерная литература / ОС и Сети, интернет / Короткие любовные романы / Психология / Прочая справочная литература / Образование и наука / Книги по IT / Словари и Энциклопедии