Terraform@Azure – 2:最初のデプロイ作業(リソースグループのデプロイ)

リソースグループのデプロイ

  • Terraformのコードは、拡張子.tfのファイルにHashiCorp Configuration Language(HCL)という言語で書く

プロバイダの設定

  • 次の内容を含む main.tfというファイルを作成する
  • プロバイダとしてAzureを利用し、インフラをデプロイするサブスクリプションとテナントを指定している
provider "azurerm" {

features {}

subscription_id = ”サブスクリプションIDを記載”

client_id = ”サービスプリンシパルのアプリケーションIDを記載”

client_secret = ”サービスプリンシパルのクライアントシークレットを記載”

tenant_id = ”Entra IDのテナントIDを記載”

}

リソースの設定

  • Terraformでリソースを作成する際の一般的な文法
resource "<プロバイダ>_<タイプ>" "<名前>"

{

[設定・・・]

}
  • プロバイダ
    • プロバイダの名前(azurerm、aws、・・・)
  • タイプ
    • プロバイダ内に作成するリソースのタイプ
  • 名前
    • このリソースを参照するのにTerraformコード内で使用する識別子
  • 設定
    • リソース特有の引数
  • 各プロバイダ、リソース、引数、などの情報は都度Terraformのドキュメントを参照する
    • https://registry.terraform.io/providers/hashicorp/azurerm/latest/docs

リソースグループのデプロイ

  • Terraformのドキュメント引用(https://registry.terraform.io/providers/hashicorp/azurerm/latest/docs/resources/resource_group)
resource "azurerm_resource_group" "example" {

name = "example"

location = "West Europe"

}
  • 今回は下記のようにmain.tfファイルに書く
provider "azurerm" {

features {}

subscription_id = ”サブスクリプションIDを記載”

client_id = ”サービスプリンシパルのアプリケーションIDを記載”

client_secret = ”サービスプリンシパルのクライアントシークレットを記載”

tenant_id = ”Entra IDのテナントIDを記載”

}

resource "azurerm_resource_group" "rg-tf" {

name = "rg-tf"

location = "Japaneast"

}

Terraformの実行

  • ターミナルを起動し、main.tfファイルを作ったフォルダを開き、terraform initコマンドを実行する
  • Terraformを初めて使うときには terraform init を実行して、Terraformがコードをスキャンし、どのプロバイダを使うのか判断し、そのプロバイダに関するコードをダウンロードする必要がある
  • デフォルトでは、.terraformディレクトリにダウンロードされる
  • .terraform.lock.hclファイルにダウンロードしたプロバイダのコードについての情報も保存する

実行結果

$ terraform init

Initializing the backend...

Initializing provider plugins...

- Finding latest version of hashicorp/azurerm...

- Installing hashicorp/azurerm v3.93.0...

- Installed hashicorp/azurerm v3.93.0 (signed by HashiCorp)

Terraform has created a lock file .terraform.lock.hcl to record the provider

selections it made above. Include this file in your version control repository

so that Terraform can guarantee to make the same selections by default when

you run "terraform init" in the future.

Terraform has been successfully initialized!

You may now begin working with Terraform. Try running "terraform plan" to see

any changes that are required for your infrastructure. All Terraform commands

should now work.

If you ever set or change modules or backend configuration for Terraform,

rerun this command to reinitialize your working directory. If you forget, other

commands will detect it and remind you to do so if necessary.

  • プロバイダのコードがダウンロードされたので、terraform planを実行する
  • planコマンドを使うと、実際に変更を加える前にTerraformが何をする予定なのか確認できる
  • (+):作成されるもの
  • (ー):削除されるもの
  • (〜):変更されるもの

実行結果

$ terraform plan

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_resource_group.rg-tf will be created

+ resource "azurerm_resource_group" "rg-tf" {

+ id = (known after apply)

+ location = "japaneast"

+ name = "rg-tf"

}

Plan: 1 to add, 0 to change, 0 to destroy.
  • 最後に、実際にリソースを作成するには、terraform applyコマンドを実行する
azurerm_resource_group.rg-tf: Creating...

azurerm_resource_group.rg-tf: Creation complete after 1s [id=/subscriptions/xxxxxxxxxxxxxxxx/resourceGroups/rg-tf]

Apply complete! Resources: 1 added, 0 changed, 0 destroyed.

リソースの変更

  • リソースグループにタグを付けてみる
provider "azurerm" {

features {}

subscription_id = ”サブスクリプションIDを記載”

client_id = ”サービスプリンシパルのアプリケーションIDを記載”

client_secret = ”サービスプリンシパルのクライアントシークレットを記載”

tenant_id = ”Entra IDのテナントIDを記載”

}

resource "azurerm_resource_group" "rg-tf" {

name = "rg-tf"

location = "Japaneast"

tags = {

environment = "Staging"

}

}
  • Teraform applyをもう一度実行してみる
$ terraform apply

azurerm_resource_group.rg-tf: Refreshing state... [id=/subscriptions/xxxxxxxxxxxx/resourceGroups/rg-tf]

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

~ update in-place

Terraform will perform the following actions:

# azurerm_resource_group.rg-tf will be updated in-place

~ resource "azurerm_resource_group" "rg-tf" {

id = "/subscriptions/92c7afc3-695f-47ac-bdf2-66494e00abbb/resourceGroups/rg-tf"

name = "rg-tf"

~ tags = {

+ "environment" = "Staging"

}

# (1 unchanged attribute hidden)

}

Plan: 0 to add, 1 to change, 0 to destroy.
  • (+)は「”environment” = “Staging”」のみ(Refeshing state…と出力されている)。Terraformは、リソースグループが既に存在していることをわかっている
  • Terraformは、現在デプロイされているものとTerraformのコードに書かれていることの差分を表示する。所謂、手続き型言語の特徴

参考

https://learn.microsoft.com/ja-jp/azure/developer/terraform/create-resource-group?tabs=azure-cli

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA