※本記事に記載されている内容は、2024年12月時点の情報です。 |
はじめに
こんにちは。ニフティの塚崎です。
今回は、AzureリソースをTerraformで構築する際にtfstateファイルを管理する方法をまとめてみました。
tfstateファイルをリモートで管理する際、AWSではS3 + DynamoDBの構成でバックエンドを構築すると思います。今回はそれのAzure版をやってみました。
Azureでtfstateファイルを管理するにはAzure Blob Storageを利用します。Azure Blob Storageを利用することでファイルの共有とロックができます。
やり方
今回はAzure CLIを使用します。インストール方法は以下を見てください。
https://learn.microsoft.com/ja-jp/cli/azure/install-azure-cli?view=azure-cli-latest
1.Azureログイン
Azureにログインします。また、ログイン時にサブスクリプションの選択が求められるので、今回作業するサブスクリプションを指定してください。
1 |
az login |
サブスクリプション情報を確認するコマンド
1 |
az account list --output table |
サブスクリプションを変更したい場合は以下を見てください。
https://learn.microsoft.com/ja-jp/cli/azure/account?view=azure-cli-latest#az-account-set
2.ストレージアカウント作成
ストレージアカウントを作成します。注意点として、ストレージアカウント名はグローバルで一意にする必要があります。また、ここではリソースグループは既に作成されていることを想定しています。(リソースグループが無い場合は適宜作成してください)
1 |
az storage account create -n "ストレージアカウント名" -g "リソースグループ名" --sku Standard_LRS |
オプション:リソースグループの作成(無い場合)
1 |
az group create --name "リソースグループ名" --location japaneast |
参考
https://learn.microsoft.com/ja-jp/cli/azure/group?view=azure-cli-latest#az-group-create
3.アカウントキー取得
ストレージアカウントのアカウントキーを取得します。コンテナの作成にアカウントキーが必要になるみたいです。
1 |
az storage account keys list -g "リソースグループ名" -n "ストレージアカウント名" |
valueの値がアカウントキー(今回はkey1の方を利用)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
[ { "creationTime": "2024-12-06T04:10:41.047526+00:00", "keyName": "key1", "permissions": "FULL", "value": "xxx" }, { "creationTime": "2024-12-06T04:10:41.047526+00:00", "keyName": "key2", "permissions": "FULL", "value": "xxx" } ] |
参考
4.ストレージコンテナ作成
ストレージコンテナを作成します。
1 |
az storage container create -n "コンテナ名" --account-name "ストレージアカウント名" --account-key "アカウントキー" |
参考
ここまでリソースの設定は完了です。
リソース作成
試しに、TerraformでAzure仮想マシンを作成し、tfstateファイルがストレージで管理されているかを確認してみます。
main.tfを作成し、以下の内容でapplyします。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 |
provider "azurerm" { subscription_id = "<サブスクリプションID>" resource_provider_registrations = "none" features {} } terraform { required_providers { azurerm = { source = "hashicorp/azurerm" version = "4.12.0" } } backend "azurerm" { resource_group_name = "<リソースグループ名>" storage_account_name = "<ストレージアカウント名>" container_name = "<Blobコンテナ名>" key = "terraform.tfstate" } } resource "azurerm_network_interface" "main" { name = "<nic名>" location = "Japan East" resource_group_name = "<リソースグループ名>" ip_configuration { name = "internal" subnet_id = "<サブネットID>" private_ip_address_allocation = "Dynamic" } } resource "azurerm_virtual_machine" "main" { name = "<vm名>" location = "Japan East" resource_group_name = "<リソースグループ名>" network_interface_ids = [azurerm_network_interface.main.id] vm_size = "Standard_DS1_v2" storage_image_reference { publisher = "Canonical" offer = "0001-com-ubuntu-server-jammy" sku = "22_04-lts" version = "latest" } storage_os_disk { name = "myosdisk1" caching = "ReadWrite" create_option = "FromImage" managed_disk_type = "Standard_LRS" } os_profile { computer_name = "hostname" admin_username = "testadmin" admin_password = "Password1234!" } os_profile_linux_config { disable_password_authentication = false } tags = { environment = "staging" } } |
仮想マシンが作成されました。コンテナにもtfstateファイルが置いてあるので問題なさそうです。

おわりに
今回は、Azure Blob StorageでTerraformのtfstateファイルをリモート管理する方法について解説しました。
Azure環境でTerraformを活用される際の参考になれば幸いです。