【第6回:回答編】Terraform×GitHub Copilot 答え合わせと解説

IT・技術

AIと一緒に設計図は書けましたか? 「AIが思うように動いてくれなかった」「エラーが出てしまった」という方のために、今回の正解コードと、僕自身の宿題回答を公開します!

1. 答え合わせ:サンプルコード集

プロンプトの出し方や環境によって多少の差異は出ますが、以下の構成になっていれば「正解」です。

① variables.tf(変数の定義)

まずは「何を設定項目にするか」のラベルを貼ります。

variable "rg_name" {
  description = "リソースグループの名前"
  type        = string
}

variable "location" {
  description = "リソースをデプロイする場所"
  type        = string
  default     = "Japan East"
}

② terraform.tfvars(具体的な値)

環境変数のように、実際の名前や場所を指定します。

rg_name  = "rg-terraform-study"
location = "Japan East"

③ main.tf(設計図本体)

変数を呼び出しながら、一気に組み立てる指示書です。

provider "azurerm" {
  features {}
}

# 1. リソースグループの作成
resource "azurerm_resource_group" "rg" {
  name     = var.rg_name
  location = var.location
}

# 2. ネットワーク(土地と区画)の作成
resource "azurerm_virtual_network" "vnet" {
  name                = "vnet-terraform"
  address_space       = ["10.0.0.0/16"]
  location            = azurerm_resource_group.rg.location
  resource_group_name = azurerm_resource_group.rg.name
}

resource "azurerm_subnet" "subnet" {
  name                 = "snet-default"
  resource_group_name  = azurerm_resource_group.rg.name
  virtual_network_name = azurerm_virtual_network.vnet.name
  address_prefixes     = ["10.0.1.0/24"]
}

# 3. 仮想マシン(Ubuntu)の最小構成
resource "azurerm_network_interface" "nic" {
  name                = "nic-vm"
  location            = azurerm_resource_group.rg.location
  resource_group_name = azurerm_resource_group.rg.name
  ip_configuration {
    name                          = "internal"
    subnet_id                     = azurerm_subnet.subnet.id
    private_ip_address_allocation = "Dynamic"
  }
}

resource "azurerm_linux_virtual_machine" "vm" {
  name                = "vm-terraform"
  resource_group_name = azurerm_resource_group.rg.name
  location            = azurerm_resource_group.rg.location
  size                = "Standard_B1s" # 最小・最安クラス
  admin_username      = "adminuser"
  network_interface_ids = [azurerm_network_interface.nic.id]

  admin_password                  = "P@ssw0rd1234!"
  disable_password_authentication = false

  os_disk {
    caching              = "ReadWrite"
    storage_account_type = "Standard_LRS"
  }

  source_image_reference {
    publisher = "Canonical"
    offer     = "0001-com-ubuntu-server-jammy"
    sku       = "22_04-lts"
    version   = "latest"
  }
}

2. ✍️ 僕の「宿題」回答

Q1:AI(Copilot)に指示を出すとき、一番うまく伝わった「言葉(プロンプト)」は?

回答: 単に「VM作って」と頼むよりも、「variables.tfの変数を使って、リソースグループ、VNet、Subnet、Ubuntu VMを最小構成で作って」と、参照先と範囲を具体的に指定した時が一番正確でした。AIには「前提条件」を丁寧に伝えるのがコツですね。


3. 次はいよいよ最終回!

これで、あなたは「コードでインフラを操る技術」を手にしました。

次回は全連載の締めくくり。 今回作ったこの「最小構成」を、どうやって「構成図」に落としていくのかを解説していきます。

コメント

タイトルとURLをコピーしました