Terraform 2 базис
Terraform 2 базис
В прошлой части мы создали vps в digital ocean и узнали ее ip:
http://snakeproject.ru/rubric/article.php?art=е1_21082024
Сделаем связку ip - домен на примере aws
К примеру, у нас есть уже созданный домен domain.ru у провайдера aws
Мы хотим создать запись типа А для созданной VPS из прошлого шага - vps.domain.ru
Выданный ip адрес машине, найди в переменной:
terraform show -json terraform.tfstate | jq '.values.root_module.resources[] | select(.address=="digitalocean_droplet.foobar") | .values.ipv4_address'
Наши переменные для работы с провайдером:
# cat terraform.tfvars
aws_access_key = "xxx"
aws_secret_key = "xxx"
Файл переменных:
# cat variables.tf
variable "aws_access_key" {}
variable "aws_secret_key" {}
variable "ipv4_address" {
default = "1.1.1.1"
}
variable "aws_region" {
default = "eu-west-1"
}
Описываем првайдера:
# cat provider.tf
provider "aws" {
access_key = var.aws_access_key
secret_key = var.aws_secret_key
region = var.aws_region
}
Описываем ресурсы:
# cat resources.tf
data "aws_route53_zone" "zone" {
name = "domain.ru"
}
resource "aws_route53_record" "record" {
zone_id = data.aws_route53_zone.zone.id
name = "vps"
type = "A"
ttl = "300"
records = [var.ipv4_address]
}
Полный вперед:
# terraform init
# terraform plan
# terraform apply
Второй пример
Создание машины в digital ocean, получение выданнго ip и связка с aws
terraform.tfvars:
do_token="DO token"
aws_access_key = "Your access key"
aws_secret_key = "You secret key"
variables.tf:
variable "do_token" {}
variable "aws_access_key" {}
variable "aws_secret_key" {}
variable "aws_region" {
default = "eu-west-1"
}
provider.tf:
terraform {
required_providers {
digitalocean = {
source = "digitalocean/digitalocean"
version = "~> 2.0"
}
}
}
provider "digitalocean" {
token = var.do_token
}
provider "aws" {
access_key = var.aws_access_key
secret_key = var.aws_secret_key
region = var.aws_region
}
resources.tf:
resource "digitalocean_volume" "v5" {
region = "nyc1"
name = "test_volume"
size = 5
initial_filesystem_type = "ext4"
description = "test_5gb_volume"
}
resource "digitalocean_droplet" "foobar" {
name = "test_vps"
size = "s-1vcpu-1gb"
image = "ubuntu-20-04-x64"
region = "nyc1"
}
resource "digitalocean_volume_attachment" "foobar" {
droplet_id = digitalocean_droplet.foobar.id
volume_id = digitalocean_volume.v5.id
}
locals {
vps_ip = digitalocean_droplet.foobar.ipv4_address
}
data "aws_route53_zone" "zone" {
name = "domain.ru"
}
resource "aws_route53_record" "record" {
zone_id = data.aws_route53_zone.zone.id
name = "vps_name"
type = "A"
ttl = "300"
records = [local.vps_ip]
}
Выше мы использовали конструкцию locals для получения ip соззданной vps
Комментарии пользователей
Анонимам нельзя оставоять комментарии, зарегистрируйтесь!
|