メインコンテンツまでスキップ

Azure オブジェクトの設定

このトピックでは、準備を完了し、プロバイダーを設定したことを前提としています。

Azure 上でのクラスターのデプロイは、以下の Azure オブジェクトに依存します。

  • リソースグループ: クラスターのデプロイに必要なすべての Azure リソースをホストします。これには、ストレージアカウントとその中のコンテナ、マネージドID、仮想ネットワークとその中のサブネット、セキュリティグループ、および SSH 公開鍵が含まれます。

  • ストレージアカウントとその中のコンテナ: データを保存するために使用されます。

  • マネージドID: 必要な権限を付与する必要があり、クラスターがコンテナにクエリプロファイルを保存できるようにします。

  • Terraform をサービスプリンシパルとして認証するためのアプリ登録と登録されたアプリケーションのクライアントシークレット。Terraform が Azure サービスアカウント内でクラスターをデプロイするために必要なリソースを起動できるように、アプリケーションにロールの割り当ても追加する必要があります。

  • SSH 公開鍵: 自動デプロイメントのために仮想マシン (VM) へのアクセスを提供し、Terraform が VM 上で必要なサービスプロセスをデプロイできるようにします。

    このオブジェクトの public_key 要素にパスを入力する必要があるため、ローカルコンピュータで SSH 公開鍵を作成する必要があります。

  • クラスターが依存する VM のための仮想ネットワークとその中のサブネット。

  • サブネットが割り当てられるセキュリティグループ。

これらの Azure オブジェクトを作成するには、プロバイダーを設定した .tf ファイル(例: main.tf)に以下のリソースを宣言する必要があります。

provider "azuread" {}
provider "azurerm" {
features {}
subscription_id = "<Microsoft_subscription_ID>"
}
# リソースグループを作成
resource "azurerm_resource_group" "example" {
name = "<resource_group_name>"
location = local.azure_region
}
# マネージドIDを作成
resource "azurerm_user_assigned_identity" "example" {
location = azurerm_resource_group.example.location
resource_group_name = azurerm_resource_group.example.name
name = "<managed_identity_name>"
}
# マネージドIDに権限を割り当て
locals {
managed_identity_roles = [
"Reader",
"Storage Blob Data Contributor",
]
}
resource "azurerm_role_assignment" "assignment_identity_roles" {
count = length(local.managed_identity_roles)
role_definition_name = local.managed_identity_roles[count.index]
scope = azurerm_resource_group.example.id
principal_id = azurerm_user_assigned_identity.example.principal_id
}
# ストレージアカウントを作成
resource "azurerm_storage_account" "example" {
name = "<storage_account_name>"
resource_group_name = azurerm_resource_group.example.name
location = azurerm_resource_group.example.location
account_tier = "Standard"
account_replication_type = "GRS"
}
# ストレージコンテナを作成
resource "azurerm_storage_container" "example" {
name = "<storage_container_name>"
storage_account_name = azurerm_storage_account.example.name
container_access_type = "private"
}
# アプリ登録とそのクライアントシークレットを作成
resource "azuread_application_registration" "example" {
display_name = "<app_registration_name>"
description = "My example application"
sign_in_audience = "AzureADMyOrg"
}
resource "azuread_application_password" "example" {
application_id = azuread_application_registration.example.id
display_name = "<app_secret_name>"
}
resource "azuread_service_principal" "app_service_principal" {
client_id = azuread_application_registration.example.client_id
}
# アプリケーションにロールの割り当てを追加
locals {
app_registration_roles = [
"Reader",
"Virtual Machine Contributor",
"Network Contributor",
"Managed Identity Operator"
]
}
resource "azurerm_role_assignment" "assignment_app_roles" {
count = length(local.app_registration_roles)
role_definition_name = local.app_registration_roles[count.index]
scope = azurerm_resource_group.example.id
principal_id = azuread_service_principal.app_service_principal.object_id
}
# SSH 公開鍵を作成
resource "azurerm_ssh_public_key" "example" {
name = "<ssh_key_name>"
resource_group_name = azurerm_resource_group.example.name
location = azurerm_resource_group.example.location
public_key = file("~/.ssh/id_rsa.pub")
}
# 仮想ネットワークを作成
resource "azurerm_virtual_network" "example" {
name = "<network_name>"
location = azurerm_resource_group.example.location
resource_group_name = azurerm_resource_group.example.name
address_space = ["10.0.0.0/16"]
}
# サブネットを作成
resource "azurerm_subnet" "example" {
name = "<subnet_name>"
resource_group_name = azurerm_resource_group.example.name
virtual_network_name = azurerm_virtual_network.example.name
address_prefixes = ["10.0.1.0/24"]
}
# ネットワークセキュリティグループを作成
resource "azurerm_network_security_group" "example" {
name = "<security_group_name>"
location = azurerm_resource_group.example.location
resource_group_name = azurerm_resource_group.example.name
}
# サブネットをセキュリティグループに割り当て
resource "azurerm_subnet_network_security_group_association" "example" {
subnet_id = azurerm_subnet.example.id
network_security_group_id = azurerm_network_security_group.example.id
}

詳細については、以下のドキュメントを参照してください。