TerraformでAzure VM(仮想マシン)の作成、NSG割当、削除までをやってみた
TerraformとはHashiCorp社が提供するコードを利用してクラウドなどのリソースをデプロイする為のIaC(Infrastructure as Code)ツールになります。
Terraform を使うとAzure等のパブリッククラウドのリソースも操作する事が出来ます。
前回は初めてのTerraformと言う事でインストールからAzure リソースグループの作成、削除という一連の流れをやってみました。
今回はAzure VM(仮想マシン)の作成をやってみます。
今回の設定作業にあたっては、こちらのサイトを参考に実施しております。
Terraform を使用して Azure に Linux VM とインフラストラクチャを作成する(MS社公式)
作成したAzure VM(仮想マシン)やTerraformファイル
作成したAzure VM(仮想マシン)の主な構成
今回は以下のような構成でAzure VM(仮想マシン)を作成します。
区分 | 項目 | 設定値 |
リソースグループ | リソースグループ名 | test-rg |
場所 | 米国東部2(eastus2) | |
仮想ネットワーク | 仮想ネットワーク名 | vnet-01 |
アドレス空間 |
10.0.0.0/16
|
|
サブネット | サブネット名 | subnet-01 |
サブネットアドレス空間 |
10.0.1.0/24
|
|
パブリックIP | パブリックIP名 | pubip-01 |
ネットワークインターフェース | ネットワークインターフェース名 |
test-vm-01-nic
|
仮想マシン | 仮想マシン名 |
terra-testvm-01
|
OS |
CentOS 8.1(Gen2)
|
|
仮想マシンサイズ | Standard_B1ms | |
管理者ユーザー名 |
adminuser
|
|
管理者パスワード |
P@$$w0rd1234!
|
|
ディスク名 | test-vm-01_OsDisk |
作成したTerraformのファイル
今回作成したファイルは表の通りとなります。
Terraform自体の設定ファイル、Azure VM(仮想マシン)のテンプレートファイルで構成されています。
今回作成したファイルはすべて同じディレクトリに配置しています。
作成したファイル | |
Terraform自体の設定ファイル | |
main.tf |
TerraformでAzureリソースを操作する為の設定ファイルです。 |
リソースに関するテンプレートファイル | |
vm.tf |
Azure VM(仮想マシン)に関するテンプレートファイルです。 |
※ファイル名は任意ですが拡張子が.tfである必要があります。
Terraformでリソースをデプロイする際に利用したコマンド
今回利用したコマンドはterraform apply、terraform destroyになります。
terraform init実行済みの前提となります。
利用したTerraformコマンド | |
terraform apply | resourceで定義されたリソースをデプロイします。 新規リソース作成や既存リソースの変更を行います。 |
terraform destroy | 指定したリソースを削除します。 指定しない場合はすべてのリソースを削除します。 |
※今回はオプションを含めて最低限の利用にしています。
Azure VM(仮想マシン)デプロイ用ファイル(.tfファイル)
main.tfの内容
main.tfでTerraformがAzureリソース操作する為の設定をします。
vm.tfの内容
vm.tfでTerraformでAzure VM(仮想マシン)リソースをデプロイする為の定義をしています。
仮想マシンだけではなく関連する仮想ネットワークやパブリックIP等のリソースも併せて定義しています。
※リソースブロックの順番はどのような順番でも問題ありません。Terraform側で依存関係を解釈して適切な順番でデプロイしてくれます。
設定ファイル | ||
リソースグループ、仮想ネットワーク、サブネット、パブリックIP、ネットワークインターフェースと言ったAzure VM(仮想マシン)の関連リソースを定義します。 各リソースをデプロイするリソースグループはazurerm_resource_group.rg-01.nameと記載しています。 サブネットの場合はデプロイ先の仮想ネットワークを virtual_network_name = azurerm_virtual_network.vnet-01.nameと記載しています。vm.tf内で定義している仮想ネットワーク(vnet-01)指定しています。 |
||
Azure VM(仮想マシン)のリソースを定義しています。 OSのイメージの指定ですが、 ※Azure VM(仮想マシン)のテンプレートはWindowsとLinuxで異なります。 |
||
※Azure VM(Linux)をパスワード認証でデプロイする場合は、disable_password_authentication = falseの追加が必要になります。 |
Terraformでの変数利用についてはこちら。
Terraformのモジュール化についてはこちら。
Terraformを使ってAzure VM(仮想マシン)をデプロイ
Terraform applyでAzure VM(仮想マシン)をデプロイ
terraform applyでAzure VM(仮想マシン)をデプロイしてみます。
terraform apply実行時に確認メッセージが表示されますので"yes"と入力します。
完了するとApply complete! Resources: 6 added, 0 changed, 0 destroyed.と表示されます。
新規にリソースが6つ作成された事が分かります。
実行結果(抜粋) | ||
+ createの部分に作成されるリソースの情報が表示されています。 |
Azure Portalで作成されたリソースを確認
Azure Portalで作成されたリソースを確認してみます。
Azure Portalで確認 | |
リソースグループを確認します。 指定したAzureリソースが作成されている事が分かります。 |
|
指定した通りAzure VM(仮想マシン)が作成されている事が分かります。 |
Terraform destroyで作成したリソースを削除
最後にterraform destroyでAzure VM(仮想マシン)を削除します。
terraform destroy実行時に確認メッセージが表示されますので"yes"と入力します。
Destroy complete! Resources: 6 destroyed.と表示されリソースが6つ削除された事が分かります。
実行結果(抜粋) | ||
+ createの部分に作成されるリソースの情報が表示されています。 |
Azure VM(仮想マシン)にNSG(ネットワークセキュリティグループ)を追加
先ほど作成したAzure VM(仮想マシン)にはNSG(ネットワークセキュリティグループ)がありません。
Terraform使ってNSGを追加してみます。
NSGをAzure VM(仮想マシン)に割り当てる為に必要なリソースブロックは2つ
vm.tfにNSGの設定を追加します。
NSGはAzure VM(仮想マシン)のネットワークインターフェースに追加します。
追加するリソースブロックは2つです。
-
- 追加するリソースブロック
- azurerm_network_security_group:NSG自体を規定
- azurerm_network_interface_security_group_association:ネットワークインターフェースにNSGを割り当て
- 追加するリソースブロック
vm.tfの内容(NSG割り当て後)
vm.tfを編集してネットワークインターフェースにNSG割り当てを行います。
追加する場所はvm.tfの中のどこでも問題ありません。
vm.tf(NSG追加部分のみ抜粋) | ||
azurerm_network_security_groupでNSGを規定しています。security_ruleが規則作成部分になります。 azurerm_network_interface_security_group_associationでネットワークインターフェースにNSGを割り当てています。 ※NSGをサブネットに割り当てる場合は、azurerm_subnet_network_security_group_associationを使います。
|
||
|
Terraform applyでNSGをデプロイ
terraform applyでNSGをデプロイしてみます。
terraform apply実行時に確認メッセージが表示されますので"yes"と入力します。
Apply complete! Resources: 2 added, 0 changed, 0 destroyed.と表示されNSGのデプロイが完了した事が分かります。
実行結果(抜粋) | ||
|
Azure Portalで作成されたリソースを確認
Azure Portalで作成されたリソースを確認してみます。
Azure Portal | |
仮想マシンのネットワークを見るとNSGが作成されている事が確認出来ます。 |
最後に
Terraform を使ったAzure VM(仮想マシン)の作成、削除についてやってみました。
Terraformの公式サイトのAzure Providerで各Azureのリソースドキュメントが整備されています。
こちらを活用するとTerraformで簡単にAzure関連のリソースがデプロイはもちろん、作成したリソースの変更も簡単にできる事が分かりました。
今回は1台のAzure VM(仮想マシン)作成のみを行っていますが、変数を使ったりするともっと便利に作成できる事が出来ます。
今後も引き続き色々試してみたいと思います。
変数の使い方やModuleの使い方などTerraform関連の記事はこちらに記載しております。
併せて見て頂けると大変有難いです。