Серия терраформ
- Часть 1: Введение
- Часть 2: Создание сервера
- Часть 3: обеспечение сервера
- Часть 4: Управление государством Terraform
- Часть 5: Чистый код с модулями Terraform
- Часть 6: петли с терраформой
- Часть 7: условные с терраформи
- Часть 8: тестирование кода Terraform
Теперь, когда мы могли бы создать сервер, пришло время настроить его немного. Для нас это бесполезно, если он сидит прямо там. Итак, давайте установим Nginx, а затем сделаем один из наших доменов на сервер, чтобы увидеть, работает ли он или нет.
На данный момент это только для установки Nginx, но это по -прежнему обеспечение сервера. Мы собираемся использовать Remote-Exec Provisioner Чтобы достичь этой простой установки.
Внутри Digitalocean_droplet
Ресурс, добавьте предварительного заведения ниже:
resource "digitalocean_droplet" "web" { image = "ubuntu-20-04-x64" name = "terraform-sandbox" region = "ams3" size = "s-1vcpu-1gb" provisioner "remote-exec" { inline = [ "export PATH=$PATH:/usr/bin", # install nginx "sudo apt-get update", "sudo apt-get -y install nginx" ] } }
Есть лучшие способы предоставить сервер, но мы доберемся до этого позже. Для нашей простой установки Nginx это помогло бы.
Тем не менее, здесь не хватает одна вещь. Как Terraform подключится к нашему серверу для запуска сценария Bash выше?
Вам сначала нужно перейти к своему Учетная запись/безопасность Страница на DigitaloCean и добавьте там клавишу SSH вашего компьютера. Если вы не знаете, как это сделать, DigitaloCean поможет вам создать и использовать ключ SSH на этой странице. Вам понадобится отпечаток пальца SSH, показанный на этой странице.
Теперь мы собираемся создать новый файл Terraform и назвать его переменные.tf
Анкет
variable "public_key" {} variable "private_key" {} variable "ssh_fingerprint" {}
Вы видите, как мы создаем переменные в Terraform. Как правило, вы также можете дать им значения по умолчанию. Однако, поскольку они содержат конфиденциальные данные, мы намеренно оставили их пустыми. Таким образом, Terraform попросит нас заполнить их во время планирования или подачи заявления.
Мы возвращаемся к нашему main.tf
Теперь и добавьте ssh_keys
Параметр внутри нашего ресурса капель.
resource "digitalocean_droplet" "web" { image = "ubuntu-20-04-x64" name = "terraform-sandbox" region = "ams3" size = "s-1vcpu-1gb" ssh_keys = [ var.ssh_fingerprint ] provisioner "remote-exec" { inline = [ "export PATH=$PATH:/usr/bin", # install nginx "sudo apt-get update", "sudo apt-get -y install nginx" ] } }
Это дополнение предоставит держателю ключа SSH для доступа к нашей капельке. Мы предоставили список ssh_keys
Анкет Это означает, что вы можете добавить более одного. Кроме того, он также показывает, как мы можем получить доступ к переменным, определенным в файлах Terraform. Подсказка: var.ssh_fingerprint
, var.public_key
, так далее.
Наконец, мы собираемся определить соединение
В пределах ресурса капель.
resource "digitalocean_droplet" "web" { image = "ubuntu-20-04-x64" name = "terraform-sandbox" region = "ams3" size = "s-1vcpu-1gb" ssh_keys = [ var.ssh_fingerprint ] connection { host = self.ipv4_address user = "root" type = "ssh" private_key = file(var.private_key) timeout = "2m" } provisioner "remote-exec" { inline = [ "export PATH=$PATH:/usr/bin", # install nginx "sudo apt-get update", "sudo apt-get -y install nginx" ] } }
Это объявление об соединении определяет соединение SSH. Хост является IP -адресом нашей капельки. Обратите внимание, как мы использовали я
объект там. Он будет связан с корень
Пользователь, используя закрытый ключ нашего компьютера.
Наш main.tf
готов создать каплю, а затем установить соединение с ней для установки Nginx. Теперь вместо простого терраформ применить
, нам также нужно сделать это с заполнением переменных:
$ terraform apply \ -var "public_key=$HOME/.ssh/id_rsa.pub" \ -var "private_key=$HOME/.ssh/id_rsa" \ -var "ssh_fingerprint=YOUR_FINGERPRINT"
Вам нужно использовать свой отпечаток пальца SSH вместо your_fingerprint. И, пожалуйста, также отметьте, что public_key
и private_key
Значения могут отличаться в зависимости от того, как вы их создали.
Когда вы запустите команду, она покажет вам план и попросит вашего одобрения. Вы не увидите предварительного заведения в плане. Но когда вы примените его план, вы увидите, как Terraform подключается к капельке, и вы увидите журналы сценария Provisioner.
У нас есть сервер, и у нас работает Nginx. Вы можете посетить IP -адрес вашего сервера, чтобы увидеть его глазами. Тем не менее, давайте перейдем на один шаг вперед и используем домен вместо IP -адреса.
Создать Domain.tf
Заполните и заполняйте его:
resource "digitalocean_domain" "yourdomain" { name = "yourdomain.com" ip_address = digitalocean_droplet.web.ipv4_address } resource "digitalocean_record" "cname_www" { domain = digitalocean_domain.yourdomain.name type = "CNAME" name = "www" value = "@" }
Сначала мы создаем Digitalocean_domain
ресурс. Вам нужно обновить имя с помощью вашего доменного адреса. Обратите внимание, как мы использовали ipv4_address
Атрибут, чтобы указать наш домен с определенным IP -адресом. Вы можете увидеть Полный список атрибутов ссылка в реестре терраформ. Точно так же, как мы получаем доступ к IP -адресу, вы можете получить доступ к любому атрибуту из Digitalocean_droplet.web
Анкет
Во -вторых, мы создаем Digitalocean_record
ресурс, чтобы указать все www
Запросы субдомена к основному. Таким образом, yourdomain.com и www.yourdomain.com приведет к нашей капельке. Посмотрите, как мы установили домен
параметр внутри digitalocean_domain.yourdomain.name
. Вот как Terraform поймет, в каком домене он должен создать эту запись.
Заказ ресурсов не важен
Один интересный факт с Terraform, который мы можем упомянуть здесь, заключается в том, что Terraform не заботится о порядке ресурсов. Даже если вы объявите Digitalocean_record
ресурс перед Digitalocean_domain
Во -первых, это все равно будет работать. Это потому, что Terraform является декларативным, и он создает свой график зависимости на основе того, что вы объявили.
Вернемся к созданию домена … Теперь, если вы снова примените свой план:
$ terraform apply \ -var "public_key=$HOME/.ssh/id_rsa.pub" \ -var "private_key=$HOME/.ssh/id_rsa" \ -var "ssh_fingerprint=YOUR_FINGERPRINT"
Вы увидите план так же, как это:
Terraform will perform the following actions: # digitalocean_domain.yourdomain will be created + resource "digitalocean_domain" "yourdomain" { + id = (known after apply) + ip_address = "111.111.111.111" + name = "yourdomain.com" + urn = (known after apply) } # digitalocean_record.cname_www will be created + resource "digitalocean_record" "cname_www" { + domain = "yourdomain.com" + fqdn = (known after apply) + id = (known after apply) + name = "www" + ttl = (known after apply) + type = "CNAME" + value = "@" } Plan: 2 to add, 0 to change, 0 to destroy.
Примените план, и это все. Теперь, если вы посетите свой домен, вы увидите, что конфигурация сайта по умолчанию в этом NGINX поймает ваш запрос и покажет вам страницу по умолчанию:
PS: фото обложки от Тянь Куан
Часть 2 …………………………………………………………………………………………. Часть 4
Оригинал: «https://dev.to/gzg/what-i-ve-learned-learning-terraform-part-3-2e32»