1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Azure × Terraform】PowerShellプロファイルとサービスプリンシパルでリソースグループ作成

Posted at

1. はじめに

1-1 ご挨拶

初めまして、井村と申します。

Terraform 構成ファイルで Azure サブスクリプションの資格情報を記述することは良くないため、PowerShellプロファイルを使ってAzureリソースを作成する方法を備忘録として残します。

Azure CLIやTerraformなどの自動化ツールがAzureリソースを操作するためにサービスプリンシパルを活用しますので、サービスプリンシパルの情報も併せてPowerShellプロファイルに記述します。

2. 事前準備

2-1 Azure CLIとTerraformのインストール

インストール後、バージョンを確認します。

PowerShell
# Azure CLIのバージョン確認
az version

# Terraformのバージョン確認
terraform version
# 出力例
{
  "azure-cli": "2.71.0",
  "azure-cli-core": "2.71.0",
  "azure-cli-telemetry": "1.1.0",
  "extensions": {}
}

Terraform v1.12.2
on windows_amd64

2-2 サービスプリンシパルの作成

1 . Azureへログイン

以下コマンドでAzureへログインします。

PowerShell
Connect-AzAccount
# 出力例
Account   SubscriptionName        TenantId          Environment
-------   ----------------        --------          -----------
<省略>        <省略>         "<AzureテナントID>"       <省略>

後に使う AzureテナントID をメモします。

2 . AzureサブスクリプションIDの取得

以下コマンドでAzureサブスクリプションIDを取得します。

PowerShell
Get-AzSubscription
# 出力例
 Name             Id                   TenantId   State
 ----             --                   --------   -----
<省略>  "<AzureサブスクリプションID>"     <省略>    <省略>

後に使う AzureサブスクリプションID をメモします。

3 . サービスプリンシパルの作成

以下コマンドでサービスプリンシパルを作成します。

  • 権限:共同作成者
  • サービスプリンシパル名:sp-dev-terraform
PowerShell
$sp = New-AzADServicePrincipal -DisplayName sp-dev-terraform -Role "Contributor"

4 . サービスプリンシパルのクライアントIDを表示します。

以下コマンドでサービスプリンシパルのクライアントIDを表示します。

PowerShell
$sp.AppId
# 出力例
"<サービスプリンシパルのクライアントID>"

後に使う サービスプリンシパルのクライアントID をメモします。

5 . 自動生成されたパスワードをテキストに変換します。

以下コマンドでサービスプリンシパルのパスワードを表示します。

PowerShell
$sp.PasswordCredentials.SecretText
# 出力例
"<サービスプリンシパルのパスワード>"

後に使う サービスプリンシパルのパスワード をメモします。

以上で事前準備は終了です。

3. PowerShellプロファイルの設定

1 . PowerShellプロファイルの起動

以下コマンドでPowerShellプロファイルをテキストで開きます。

PowerShell
notepad $PROFILE

2 . 資格情報の記載

テキスト内に以下を記載して保存します。

$env:ARM_TENANT_ID="<AzureテナントID>"
$env:ARM_SUBSCRIPTION_ID="<AzureサブスクリプションID>"
$env:ARM_CLIENT_ID="<サービスプリンシパルのクライアントID>"
$env:ARM_CLIENT_SECRET="<サービスプリンシパルのパスワード>"

3 . プロファイルの読み込み

以下コマンドでプロファイルの情報を環境変数へ反映させます。

PowerShell
. $PROFILE

4 . 環境変数の確認

以下コマンドでプロファイルより設定した環境変数を確認します。

PowerShell
gci env:ARM_*
# 出力例
Name                  Value
----                  ----
ARM_TENANT_ID         "<AzureテナントID>"
ARM_SUBSCRIPTION_ID   "<AzureサブスクリプションID>"
ARM_CLIENT_ID         "<サービスプリンシパルのクライアントID>"
ARM_CLIENT_SECRET     "<サービスプリンシパルのパスワード>"

以上でPowerShellプロファイルの設定は終了です。

4. 検証

最後にTerraformを利用してリソースグループを作成します。
検証用フォルダとしてデスクトップ上に「Work_Terraform」を作成します。
Terraform構成ファイルは以下となります。

Work_Terraform
│── main.tf
│── outputs.tf
│── provider.tf
│── terraform.tfvars
└── variables.tf

1 . 検証用フォルダの準備

PowerShell
# 検証用フォルダの作成
 New-Item -Path "$HOME\Desktop\Work_Terraform" -ItemType Directory

# 検証用フォルダへ移動
Set-Location -Path "$HOME\Desktop\Work_Terraform"

2 . Terraform構成ファイルの準備

以下Terraform構成ファイルを検証用フォルダに格納します。

main.tf
main.tf
resource "azurerm_resource_group" "rg" {
  name     = "rg-${var.env}-${var.location}-${var.system}"
  location = var.location
}
outputs.tf
outputs.tf
output "resource_group_name" {
  value = azurerm_resource_group.rg.name
}

output "resource_group_location" {
  value = azurerm_resource_group.rg.location
}
provider.tf
provider.tf
terraform {
  required_providers {
    azurerm = {
      source  = "hashicorp/azurerm"
      version = "~>3.0"
    }
  }
}
provider "azurerm" {
  features {}
}
terraform.tfvars
terraform.tfvars
env      = "dev"
location = "japaneast"
system   = "hoge"
variables.tf
variables.tf
variable "env" {
  description = "Environment"
  type        = string
}

variable "location" {
  description = "Azure location"
  type        = string
}

variable "system" {
  description = "System name"
  type        = string
}

provider.tfに認証情報を記述していないことを確認します。

3 . リソースグループの作成

それではAzure上にリソースグループを作成します。
以下コマンドを実行します。

PowerShell
# 初期化
terraform init

# 計画の確認
terraform plan

# 適用
terraform apply

「terraform apply」が正常終了すると以下ログが出力されます。

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

Outputs:

resource_group_location = "japaneast"
resource_group_name = "rg-dev-japaneast-hoge"

実際にAzureポータル画面からリソースグループを確認することができます。

以上で検証は終了です。

5. 参考

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?