2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Azure環境でTerraformを使ってみる(2/2)

Posted at

はじめに

「Azure環境でTerraformを使ってみる(1/2)」の続きです。

初めてterraformを使う方かつAzureで試してみたい方向けにやり方をまとめました。

概要

前回はネットワークを作成したので今回はVMを作成しネットワークに配置したいと思います。

構成図

最終的な構成図です。
二つのサブネットを含むVNETと3枚のNWインターフェースを持つVMを1台作成します

概要図.png

作業の流れ

  1. (前回の記事)ネットワークを作成するコードを準備
  2. (前回の記事)terraformの環境を準備
  3. (前回の記事)terraformを実行
  4. VMを作成するコードを準備
  5. terraformを実行

手順

4.VMを作成するコードを準備

  1. Networkのコードを準備した時と同じようにVMを作成するコードを準備します
    丸ごとコピーしてローカルPCのメモ帳などで作成し保存して下さい
    VM、パブリックIP、ネットワークインターフェースを作成するコードを作成します
    vm.tfのos_profile の部分は必ず適当に書き換えて下さい。
    ユーザー名はadminなどでもよいのですが、パスワードは複雑なものにしておかないとterraformでリソースを作成中にエラーが発生して失敗します
    (やり直して手間取るのが嫌な方は難しくしておいてください)
        admin_username = "username"
        admin_password = "password"
vm.tf
###############################
# vm00を作成
###############################
# パブリックIPアドレスを作成
resource "azurerm_public_ip" "vm00_publicip" {
    name                         = "vm00_PublicIP"
    location                     = "Japan East"
    resource_group_name          = "${azurerm_resource_group.ec_group.name}"
    allocation_method            = "Dynamic"
}

# ネットワークインターフェース1を作成
resource "azurerm_network_interface" "vm00_BKnic" {
    name                      = "vm00_NIC01"
    location                  = "Japan East"
    resource_group_name       = "${azurerm_resource_group.ec_group.name}"

    ip_configuration {
        name                          = "vm00_NIC01Configuration"
        subnet_id                     = "${azurerm_subnet.ec_BKsubnet.id}"
        private_ip_address_allocation = "Dynamic"
        public_ip_address_id          = "${azurerm_public_ip.vm00_publicip.id}"
    }
}

# ネットワークインターフェース1にセキュリティーグループを紐付ける
resource "azurerm_network_interface_security_group_association" "assoc00" {
  network_interface_id      = azurerm_network_interface.vm00_BKnic.id
  network_security_group_id = azurerm_network_security_group.eclinux_nsg.id
}

# ネットワークインターフェース2を作成
resource "azurerm_network_interface" "vm00_FR01nic" {
    name                      = "vm00_NIC02"
    location                  = "Japan East"
    resource_group_name       = "${azurerm_resource_group.ec_group.name}"

    ip_configuration {
        name                          = "vm00_NIC02Configuration"
        subnet_id                     = "${azurerm_subnet.ec_FRsubnet.id}"
        private_ip_address_allocation = "Dynamic"
    }
}

# ネットワークインターフェース2にセキュリティーグループを紐付ける
resource "azurerm_network_interface_security_group_association" "assoc01" {
  network_interface_id      = azurerm_network_interface.vm00_FR01nic.id
  network_security_group_id = azurerm_network_security_group.eclinux_nsg.id
}

# ネットワークインターフェース3を作成
resource "azurerm_network_interface" "vm00_FR02nic" {
    name                      = "vm00_NIC03"
    location                  = "Japan East"
    resource_group_name       = "${azurerm_resource_group.ec_group.name}"

    ip_configuration {
        name                          = "vm00_NIC03Configuration"
        subnet_id                     = "${azurerm_subnet.ec_FRsubnet.id}"
        private_ip_address_allocation = "Dynamic"
    }
}


# 仮想サーバーの作成
resource "azurerm_virtual_machine" "vm00" {
    name                  = "vm00"
    location              = "Japan East"
    resource_group_name   = "${azurerm_resource_group.ec_group.name}"
    network_interface_ids = ["${azurerm_network_interface.vm00_BKnic.id}","${azurerm_network_interface.vm00_FR01nic.id}","${azurerm_network_interface.vm00_FR02nic.id}"]
    primary_network_interface_id="${azurerm_network_interface.vm00_BKnic.id}"
 
    vm_size               = "Standard_B2s"
    
    storage_os_disk {
        name              = "vm00_OsDisk"
        caching           = "ReadWrite"
        create_option     = "FromImage"
        managed_disk_type = "Premium_LRS"
    }

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

    os_profile {
        computer_name  = "vm00"
        admin_username = "*****"
        admin_password = "*****"
    }
    
    os_profile_linux_config {
        disable_password_authentication = false
    }
}

5.terraformを実行

  1. ローカルに作成したvm.tfファイルをコンソールにドラック&ドロップする
     lsを実行してファイルがアップロードされたことを確認する
nosecape@Azure:~$ ls
clouddrive  network.tf  terraform.tfstate  terraform.tfstate.backup  vm.tf
nosecape@Azure:~$ 

 2. terraform planを実行します

nosecape@Azure:~$ terraform plan
azurerm_resource_group.ec_group: Refreshing state... [id=/subscriptions/xxx/resourceGroups/education_env]
                    ・                 
                    ・
               <省略>
                    ・
                    ・

 5. terraform applyを実行します(リソースの作成を行います)

nosecape@Azure:~$ terraform apply

Terraform used the selected providers to generate the following execution plan. Resource actions are indicated with the following symbols:
  + create

Terraform will perform the following actions:

  # azurerm_network_interface.ecvm00_BKnic will be created
  + resource "azurerm_network_interface" "ecvm00_BKnic" {
      + applied_dns_servers           = (known after apply)
      + dns_servers                   = (known after apply)
      + enable_accelerated_networking = false
      + enable_ip_forwarding          = false
      + id                            = (known after apply)
      + internal_dns_name_label       = (known after apply)
      + internal_domain_name_suffix   = (known after apply)
                    ・
                    ・
               <省略>
                    ・
                    ・
      + storage_os_disk {
          + caching                   = "ReadWrite"
          + create_option             = "FromImage"
          + disk_size_gb              = (known after apply)
          + managed_disk_id           = (known after apply)
          + managed_disk_type         = "Premium_LRS"
          + name                      = "ecvm00_OsDisk"
          + os_type                   = (known after apply)
          + write_accelerator_enabled = false
        }
    }

Plan: 7 to add, 0 to change, 0 to destroy.

Do you want to perform these actions?
  Terraform will perform the actions described above.
  Only 'yes' will be accepted to approve.

 6. Enter a value と出てくるのでyesと入力します

  Enter a value: yes

azurerm_network_interface.ecvm00_FE02nic: Creating...
azurerm_network_interface.ecvm00_FE01nic: Creating...
azurerm_public_ip.ecvm00_publicip: Creating...
azurerm_network_interface.ecvm00_FE02nic: Creation complete after 3s 
                    ・
                    ・
               <省略>
                    ・
                    ・
azurerm_virtual_machine.ecvm00: Still creating... [6m20s elapsed]
azurerm_virtual_machine.ecvm00: Creation complete  [id=/subscriptions/xxxx/resourceGroups/education_env/providers/Microsoft.Compute/virtualMachines/ecvm00]

Apply complete! Resources: 7 added, 0 changed, 0 destroyed.
nosecape@Azure:~$ 

 これでリソースが出来上がりました。

 確認していきましょう。
  
 7.リソースグループを見てみます
 VMやネットワークインターフェイスなどが作成されています
vm02.PNG

 8. VMを見てみます
vm03.PNG

 これで予定のリソース作成が完成しました

最後に

思った以上に準備も含めて構築が簡単にできたと思います
ぜひ効率化のために使いましょう

おまけ

1 VMにNICを複数枚付けた特殊な構成にしたことにあまり意味はありません。
2 環境を消す場合はterraform destroyコマンドを実行します

nosecape@Azure:~$ terraform destroy
azurerm_resource_group.ec_group: Refreshing state... [id=/subscriptions/xxxx/resourceGroups/education_env]
azurerm_virtual_network.ec_network: Refreshing state... [id=/subscriptions/xxxx/resourceGroups/education_env/providers/Microsoft.Network/virtualNetworks/EducationNetwork]
                    ・
                    ・
               <省略>
                    ・
                    ・
Plan: 0 to add, 0 to change, 13 to destroy.

Do you really want to destroy all resources?
  Terraform will destroy all your managed infrastructure, as shown above.
  There is no undo. Only 'yes' will be accepted to confirm.

  Enter a value: yes
                    ・
                    ・
               <省略>
                    ・
                    ・
azurerm_network_interface_security_group_association.example000: Destroying... [id=/subscriptions/xxxx/resourceGroups/education_env/providers/Microsoft.Network/networkInterfaces/edvm00_NIC01|/subscriptions/xxxx/resourceGroups/education_env/providers/Microsoft.Network/networkSecurityGroups/SSHNetworkSecurityGroup]
azurerm_network_interface_security_group_association.assoc01: Destroying... [id=/subscriptions/xxxx/resourceGroups/education_env/providers/Microsoft.Network/networkInterfaces/edvm00_NIC02|/subscriptions/xxxx/resourceGroups/education_env/providers/Microsoft.Network/networkSecurityGroups/SSHNetworkSecurityGroup]


Destroy complete! Resources: 13 destroyed.
nosecape@Azure:~$ 
2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?