Azureの各種リソースをTerraformで構築する(超初級編)

今日は小ネタ。ワクチン接種したら微妙に腕が痛くてあまり何もする気が起きなかった。

はじめに

これまでAzureの各種リソースを構築する際はAzure Portal上で作業をしていました。はじめての構築時はわかりやすいのですが、わかりきった内容を作る場合は色々とまどろっこしいものです。AzureにはARMテンプレートという機能があり、ポータルからエクスポートもできるのですが、JSON形式でメンテナンスがちょっと大変な感じです(個人の感想です)。

docs.microsoft.com

各種リソースのメニューでARMテンプレートの出力ができるので、お手軽ではあります。

f:id:miyohide:20210808173256p:plain

そこでここではTerraformというツールを使って各種リソースを構築してみることにします。

www.terraform.io

Azure上でのTerraform

新しいツールを利用するとき環境構築が面倒くさいのですが、Azure Cloud ShellにはすでにTerraformがインストールされているので今回はCloud Shell上で実行してみることにします。

f:id:miyohide:20210808173801p:plain

ドキュメントもあります。

docs.microsoft.com

どういうことができるかは、まずはTerraformのWebページ上にあるチュートリアルをやって理解することにします。

learn.hashicorp.com

リソースグループを作成する

まずは簡単にリソースグループを作成してみます。こんな感じのスクリプトを用意します。

terraform {
  required_providers {
    azurerm = {
      source  = "hashicorp/azurerm"
      version = "~> 2.65"
    }
  }

  required_version = ">= 0.14.9"
}

provider "azurerm" {
  features {}
}

resource "azurerm_resource_group" "rg" {
  name     = "rg-railsapp"
  location = "japaneast"
}

あとは、これをAzure Cloud Shellにアップロードして、terraform initterraform applyを実行します。

f:id:miyohide:20210808174228p:plain

プロンプトでDo you want to perform these actions(これらの処理を実行しても良い?)と聞かれるのでyesと入力するとリソースグループが作成されます。

f:id:miyohide:20210808174504p:plain

Azure Container Registryを作成する

次にAzure Container Registryを作成します。先程作成したスクリプトを以下のように更新します。

terraform {
  required_providers {
    azurerm = {
      source  = "hashicorp/azurerm"
      version = "~> 2.65"
    }
  }

  required_version = ">= 0.14.9"
}

provider "azurerm" {
  features {}
}

resource "azurerm_resource_group" "rg" {
  name     = "rg-railsapp"
  location = "japaneast"
}

# Create an Azure Container Registry
resource "azurerm_container_registry" "acr" {
  name                     = "crmiyohiderailsapp"
  resource_group_name      = azurerm_resource_group.rg.name
  location                 = azurerm_resource_group.rg.location
  sku                      = "Basic"
  admin_enabled            = true
}

resource_group_namelocationは先程作成したリソースグループのものをazurerm_resource_group.rgを使って参照することができるようです。これをAzure Cloud Shellにアップロードしてterraform applyを実行します。

f:id:miyohide:20210808175351p:plain

すでにあるリソースグループに対して変更は行われず、追加でAzure Container Registryを作成します。

f:id:miyohide:20210808175527p:plain

削除

削除はterraform destroyを実行すればOKです。

f:id:miyohide:20210808175703p:plain

ポータル上でも確認してみます。無事削除されていることがわかります。

f:id:miyohide:20210808175757p:plain

参考資料

Terraformの公式にAzureの各種リソースを扱うためのドキュメントが整備されているので、これをみて色々とやってみると良いかと思います。

https://registry.terraform.io/providers/hashicorp/azurerm/latest/docs