この記事のポイント
- Terraformを使用してAzure上に仮想マシンを構築する手順を詳しく解説
- プロジェクトディレクトリの作成からリソースデプロイまでを自動化して効率的に構築
- SSHキーの生成やAzure認証など、セキュアな環境構築に必要な設定を順序立てて説明
- デプロイ前の設定確認からリソース作成までをコマンドラインで簡単に実行
- 不要時のリソース停止・削除によるコスト最適化まで含めた運用方法を紹介
監修者プロフィール
坂本 将磨
Microsoft AIパートナー、LinkX Japan代表。東京工業大学大学院で技術経営修士取得、研究領域:自然言語処理、金融工学。NHK放送技術研究所でAI、ブロックチェーン研究に従事。学会発表、国際ジャーナル投稿、経営情報学会全国研究発表大会にて優秀賞受賞。シンガポールでのIT、Web3事業の創業と経営を経て、LinkX Japan株式会社を創業。
Azure仮想マシンの構築を自動化する際、多くの方がTerraformの使い方に不安を感じているのではないでしょうか。
特に初めての方にとって、インストールから設定、デプロイまでの手順は複雑に感じられるかもしれません。
本記事では、Terraformを使ったAzure仮想マシンの構築手順を、初心者の方でもわかりやすいように解説します。Terraformのインストールから始まり、SSHキーの生成、Azureへの認証、プロジェクトファイルの作成、そして実際のデプロイまで、各ステップを具体的な例を交えて説明していきます。
特に、セキュリティを確保しながら効率的に環境を構築する方法や、コスト最適化のためのリソース管理についても触れ、実践的な運用方法をご紹介します。また、よくあるトラブルの解決方法や注意点についても説明します。
仮想マシンの自動構築を検討されている方々に、本記事が安全で効率的な環境構築の手引きとなれば幸いです。
目次
Azureの仮想マシンの構築手順
今回は、Terraformを使って、Azureに仮想マシンをデプロイする方法を解説したいと思います。筆者はWindows環境ですが、Macでも同様に作業して頂ければ大丈夫です。
なお、Azure上に仮想マシンをデプロイするためのリソースグループは、既にあるものとして解説します。
まだリソースグループを用意していない方は、下記の作成方法に関する関連記事をご覧になり、先にリソースグループを用意してから以下のステップに進んで下さい。
【関連記事】
リソースグループの作成方法 → https://www.ai-souken.com/article/azure-resource-groups-explanation
Azure仮想マシンについて → https://www.ai-souken.com/article/azure-virtual-machines-overview
今回は、仮想マシンでStable diffusionを立ち上げるという目的があるので、「Stable_diffusion」という名前のリソースグループを用意しています。
リソースグループの用意
ステップ1:Terraformのインストール
まずは、Terraformをインストールします。こちらの公式サイトのインストール画面にアクセスして下さい。すると、以下のようなページが出てきます。
Terraformインストール画面その1
ご自身の環境に合ったものを選択して下さい。筆者は、以下を選択しました。
Terraformインストール画面その2
すると、zipファイルがインストールされるので、そのzipファイルを解凍して下さい。
今回は以下のように、Cドライブの中に用意した「Terraform」というフォルダに、解凍済みのフォルダを保存しました。
解凍済みフォルダの確認
これで、とりあえずTerraformのインストールは完了しました。
次に、環境変数を設定します。環境変数を設定することで、ターミナル上でterraformコマンドを実行できるようにします。 設定 > システム > バージョン情報 > システムの詳細設定 の順でクリックして下さい。
PC設定画面
すると、以下のようにプロパティが表示されます。「環境変数」をクリックして下さい。
システムの詳細設定
システム環境変数内にある「Path」を選択し、「編集」をクリックします。その後、「新規」をクリックし、先ほど解凍したフォルダのパスを貼り付けて下さい。
それでは、Terraformコマンドを実行して、正しく動作するか確認してみましょう。先ほど保存したフォルダへと移動し、以下のコマンドを入力して下さい。
terraform
すると、以下のように正しくインストールされていることが確認できます。
terraformの動作確認
念のため、バージョンも確認しておきましょう。以下のコマンドを入力して下さい。
terraform -v
以下のようにバージョンを確認することが出来ました。
terraformのバージョン確認
ステップ2:プロジェクトディレクトリの作成
任意の新しいディレクトリを作成し、そこに以下のTerraformコードを「main.tf」という名前で保存します。
# Azure プロバイダーの設定
terraform {
required_providers {
azurerm = {
source = "hashicorp/azurerm"
version = "~> 2.65"
}
}
}
provider "azurerm" {
features {}
}
# 既存のリソースグループの名前を指定
variable "existing_resource_group_name" {
type = string
default = "Stable_diffusion" # ここに既存のリソースグループの名前を指定
}
variable "location" {
type = string
default = "Japan East" # 既存のリソースグループと同じリージョンを指定
}
# 仮想ネットワークの作成
resource "azurerm_virtual_network" "vnet" {
name = "stable-diffusion-vnet"
address_space = ["10.0.0.0/16"]
location = var.location
resource_group_name = var.existing_resource_group_name
}
# サブネットの作成
resource "azurerm_subnet" "subnet" {
name = "stable-diffusion-subnet"
resource_group_name = var.existing_resource_group_name
virtual_network_name = azurerm_virtual_network.vnet.name
address_prefixes = ["10.0.1.0/24"]
}
# パブリックIPアドレスの作成
resource "azurerm_public_ip" "public_ip" {
name = "stable-diffusion-public-ip"
location = var.location
resource_group_name = var.existing_resource_group_name
allocation_method = "Dynamic"
}
# ネットワークセキュリティグループの作成
resource "azurerm_network_security_group" "nsg" {
name = "stable-diffusion-nsg"
location = var.location
resource_group_name = var.existing_resource_group_name
security_rule {
name = "SSH"
priority = 1001
direction = "Inbound"
access = "Allow"
protocol = "Tcp"
source_port_range = "*"
destination_port_range = "22"
source_address_prefix = "*"
destination_address_prefix = "*"
}
security_rule {
name = "HTTP"
priority = 1002
direction = "Inbound"
access = "Allow"
protocol = "Tcp"
source_port_range = "*"
destination_port_range = "80"
source_address_prefix = "*"
destination_address_prefix = "*"
}
}
# ネットワークインターフェースの作成
resource "azurerm_network_interface" "nic" {
name = "stable-diffusion-nic"
location = var.location
resource_group_name = var.existing_resource_group_name
ip_configuration {
name = "internal"
subnet_id = azurerm_subnet.subnet.id
private_ip_address_allocation = "Dynamic"
public_ip_address_id = azurerm_public_ip.public_ip.id
}
}
# 仮想マシンの作成
resource "azurerm_linux_virtual_machine" "vm" {
name = "small-vm" # 仮想マシン名を変更
resource_group_name = var.existing_resource_group_name
location = var.location
size = "Standard_B1s" # 小規模なVMサイズを指定
admin_username = "azureuser"
network_interface_ids = [
azurerm_network_interface.nic.id,
]
admin_ssh_key {
username = "azureuser"
public_key = file("../.ssh/id_rsa.pub") # SSHキーのパスを適切に設定してください
}
os_disk {
caching = "ReadWrite"
storage_account_type = "Standard_LRS" # コストを抑えるためStandard_LRSを使用
}
source_image_reference {
publisher = "Canonical"
offer = "UbuntuServer"
sku = "18.04-LTS"
version = "18.04.202401161" # 最新の18.04バージョン
}
}
なお、以下のような仮想マシンを作成しています。
- 仮想マシンのサイズ:Standard_B1s
- OSディスクのストレージアカウントタイプ:Standard_LRS
- 仮想マシンのソースイメージ:
- パブリッシャー: Canonical
- オファー: UbuntuServer
- SKU: 18.04-LTS
- バージョン: 18.04.202401161
今回は、「Project_VM」というディレクトリを用意し、そこにコードを保存しました。
プロジェクトディレクトリの作成画面
注意点
- リソースグループ名は、ご自身で用意したリソースグループ名に変える
- デプロイされるリソースの名前は、自由に設定可能(変数nameで定義されている部分を編集すれば良い)
- 仮想マシンのサイズやストレージアカウントのタイプ、ソースイメージは、求める条件に合わせて変えるようにする
ステップ3:SSHキーの準備
後ほど使う事になるSSHキーを準備します。まずは、はじめに作成した「Terraform」フォルダ内に、「.ssh」という名前のフォルダを作成して下さい。
SSHキー用フォルダの作成
次に、ターミナルで以下のコマンドを実行します。
ssh-keygen
すると、どこに鍵を保存するのか、入力を求められるので、先ほど作成した「.ssh」フォルダのパスに「\id_rsa」と付け加えて実行します。
SSHキーの作成
いくつか質問されますが、特にこだわりの無い方は「Enter」を繰り返し押して大丈夫です。
これで、以下のようにSSHキーの作成が完了しました。
SSHキーの作成完了画面
注意点
「.ssh」フォルダの中を確認すると、下記のように2つのファイルが作成されていることが確認出来ます。
キーの種類
上のファイルは、秘密鍵です。これは、絶対に誰にも教えてはいけません。
下のファイルは、公開鍵です。これは、誰かに教えても大丈夫です。
ステップ4:Azureへの認証
Azure CLIを使用して認証を行います。以下のコマンドを実行してログインして下さい。
az login
コマンドを実行すると、下記のような表示が出るので、使用するアカウントを選択してログインして下さい。
Azureログイン画面
なお、Azure CLIを使用したことが無い方は、以下の関連記事をご覧ください。
【関連記事】
→https://www.ai-souken.com/article/azure-cli-overview
ステップ5:Terraformの初期化
ターミナルでプロジェクトディレクトリ(Project_VM)に移動し、以下のコマンドを実行して下さい。
terraform init
すると、以下のように「Terraformの初期化が完了した」という表示が出ます。
Terraform初期化完了
ステップ6:デプロイ前の確認
以下のコマンドを実行し、Terraformが行う変更を事前に確認しておきましょう。
terraform plan
注意点
- 改行コードがCRLFだと上手く動作しないので、LFに変更しておく
- ステップ4でAzureにログイン出来ていないと失敗する
- ログインしたアカウントに権限が無いとエラーを吐く
ステップ7:リソースのデプロイ
問題無ければ、以下のコードを実行して、リソースをデプロイして下さい。
terraform apply
確認を求められた場合は、「yes」と入力して下さい。
ステップ8:デプロイ完了の確認
それでは、正しくデプロイされたのかをポータルで確認します。
リソースの確認
上記の画像を見ると、「Stable_diffusion」というリソースグループの中に、「small-vm」というリソースが作成されている、つまり、Terraformを使って仮想マシンをデプロイ出来たことが分かります。
補足:リソースが必要ない時
無駄にコストをかけないようにするため、仮想マシンを使わない場合は、停止か削除をしておきましょう。
仮想マシンのリソース画面を開き、下記の「停止」か「削除」を選択する事で実行できます。
仮想マシンの停止・削除
まとめ
本記事では、Terraformを使ってAzureに仮想マシンを構築する手順を解説しました。具体的には、Terraformのインストールから始まり、プロジェクトディレクトリの作成、SSHキーの準備、Azureへの認証、そして実際のリソースのデプロイまでを行いました。今回の解説を参考に、Terraformを使ったAzureリソースの管理を習得し、今後のプロジェクトでインフラの自動化や効率化に役立てて下さい。