setup terraform

terraform-install | yandex-cli | terraform

setup

mkdir -p ~/dev/cloud-terraform/
cd ~/dev/cloud-terraform/
vi providers.tf
terraform {
  required_version = ">= 1.0.0"

  required_providers {
    yandex = {
      source = "yandex-cloud/yandex"
    }
  }
}

prepare compute node creation

–either– find your favorite image branch/family from the cli – BEWARE you need to increase output limit AFTER specifying folder-id

yc compute image list --format json --folder-id standard-images --limit 10000 | \
    jq -r '.[] | select( .family == "debian-11-oslogin" )' | \
    jq -r '.name + "," + .id + "," + .status' | sort -V | tail -5

yc compute image list --format json --folder-id standard-images --limit 10000 | \
    jq -r '.[] | select( .family == "debian-12" )' | \
    jq -r '.name + "," + .id + "," + .status ' | sort -V | tail -5

–or– just select one from the web console

Create instance
Marketplace > search Debian

minimum hw resources

we want

standard-v3 (don't ask me why, it's cheaper than v1)
2 vCPU
1 GB RAM
SSD 5GB
garanteed 5%
preemptible
define service account
os-login enabled
login & ssh key
serial console
optional public ip

that is

resource "yandex_compute_disk" "boot-disk-1" {
  name     = "host1-disk"
  type     = "network-ssd"
  zone     = "ru-central1-b"
  size     = "5"
  image_id = "fd8q49fvba72foa1ol22"
}

resource "yandex_compute_instance" "vm-1" {
  name        = "test-host1"
  platform_id = "standard-v1"
  zone        = "ru-central1-b"

  # changing hostname re-defines everything - avoid that here even for the first shot
  #hostname    = "host1"

  resources {
    cores  = 2
    memory = 1
    core_fraction = 5
  }

  boot_disk {
    disk_id = yandex_compute_disk.boot-disk-1.id
  }

  network_interface {
    # test-ru-central1-b
    subnet_id = "ZONE-B-SUBNET-ID-HERE"

    # public ip unless you have access to the internal subnet
    nat       = false
  }

  metadata = {
    # username does not matter, as it depends on the image
    ssh-keys = "debian:OPENSSH-FORMAT-PUBKEY"

    serial-port-enable = 1

    # enable only once helper tools are installed
    enable-oslogin = false
  }

  scheduling_policy {
    preemptible = true
  }

  # some settings here need a compute node restart - ok for testing
  allow_stopping_for_update = true
}

terragrunt

mkdir ~/dev/test-host1/
cd ~/dev/test-host1/
vi terragrunt.hcl

ready to go

terragrunt init

yc config profile list
yc config profile activate test

export YC_TOKEN=`yc iam create-token`
export YC_CLOUD_ID=`yc config get cloud-id`
export YC_FOLDER_ID=`yc config get folder-id`

echo $YC_TOKEN
echo $YC_CLOUD_ID
echo $YC_FOLDER_ID

terragrunt plan
rm -f /tmp/ssh_privkey
terragrunt apply

import

terraform import -no-color

resources

https://yandex.cloud/en/docs/tutorials/infrastructure-management/terraform-quickstart#cli_1

https://yandex.cloud/en/docs/tutorials/infrastructure-management/terraform-modules

https://yandex.cloud/en/docs/tutorials/infrastructure-management/terraform-data-sources

https://terraform-provider.yandexcloud.net/Resources/compute_instance

https://terraform-provider.yandexcloud.net/Resources/organizationmanager_os_login_settings

https://github.com/yandex-cloud/terraform-provider-yandex

https://registry.terraform.io/providers/yandex-cloud/yandex/latest

https://spacelift.io/blog/importing-exisiting-infrastructure-into-terraform


HOME | GUIDES | LECTURES | LAB | SMTP HEALTH | HTML5 | CONTACT
Copyright © 2024 Pierre-Philipp Braun