Azure で CelerData Cloud BYOC をプロビジョニングする
この記事では、Azure 上で CelerData Cloud BYOC クラスターをデプロイするために必要な以下の手順を説明します。
Azure でのクラスター デプロイメントのために Terraform 設定を開始する前に、この記事をお読みください。
準備
初めて Azure アカウント レベルでインフラストラクチャを作成するために CelerData Cloud BYOC プロバイダーを使用する前に、次の準備を完了する必要があります。
Azure の場合
Azure の場合、以下が必要です。
- 管理者権限 を持つ Azure サービス アカウントを持っていること。
- Azure CLI をインストールすること。詳細については、Azure CLI のインストール方法を参照してください。
CelerData の場合
CelerData の場合、CelerData Cloud BYOC プラットフォームに認証するための資格情報を取得する必要があります。詳細については、認証を参照してください。
Terraform の場合
Terraform の場合、以下が必要です。
-
ターミナルに Terraform をインストールすること。
-
Terraform プロジェクトを持っていること。ターミナルで空のディレクトリ(例:
terraform
)を作成し、そこに移動します。(各 Terraform 設定ファイルのセットは、それ自身のディレクトリにある必要があります。これを Terraform プロジェクトと呼びます。)
プロバイダーの設定
このセクションでは、準備を完了したことを前提としています。
Terraform プロジェクトに .tf ファイル(例: main.tf)を作成します。次に、以下のコード スニペットを .tf ファイルに追加します。
terraform {
required_providers {
celerdatabyoc = {
source = "CelerData/celerdatabyoc"
version = "<provider_version>"
}
azuread = {
source = "hashicorp/azuread"
version = "2.47.0"
}
azurerm = {
source = "hashicorp/azurerm"
version = "=3.0.0"
}
}
}
provider "celerdatabyoc" {
client_id = "<client_id>"
client_secret = "<client_secret>"
}
locals {
cluster_region = "<Azure_region_ID>"
azure_region = "<Azure_region_name>"
}
指定する必要があるパラメーターは次のとおりです。
provider_version
: 使用する CelerData プロバイダーのバージョンを入力します。最新のプロバイダー バージョンを選択することをお勧めします。例:version = "1.0.2"
。CelerData Cloud BYOC が提供するプロバイダー バージョンは、CelerData Cloud BYOC プロバイダー ページで確認できます。client_id
とclient_secret
: アプリケーション キーの Client ID と Secret を入力します。CelerData の場合を参照してください。cluster_region
とazure_region
: CelerData クラスターを実行したい Azure リージョンの ID(例:eastus
)と名前(例:East US
)をそれぞれ入力します。サポートされているクラウド プラットフォームとリージョンを参照してください。ここで指定する Azure リージョンは、Azure オブジェクトの設定 で作成するリソース グループの Azure リージョンと同じである必要があります。これらのリージョン要素をローカル値として設定することで、Terraform 設定でこれらのリージョン要素の引数をlocal.cluster_region
とlocal.azure_region
に直接設定して時間を節約できます。
Azure オブジェクトの設定
このセクションでは、準備を完了したことと、プロバイダーを設定したことを前提としています。
Azure 上でのクラスター デプロイメントは、次の Azure オブジェクトに依存します。
-
クラスター デプロイメントに必要なすべての Azure リソースをホストするリソース グループ。これには、ストレージ アカウントとその中のコンテナー、マネージド ID、仮想ネットワークとその中のサブネット、セキュリティ グループ、および SSH 公開キーが含まれます。
-
データを保存するために使用されるストレージ アカウントとその中のコンテナー。
-
クラスターがコンテナーにクエリ プロファイルを保存できるようにするために必要な権限を付与する必要があるマネージド ID。
-
Terraform をサービス プリンシパルとして承認するためのアプリ登録、および登録されたアプリケーションのクライアント シークレット。Terraform が Azure サービス アカウント内でクラスターをデプロイするために必要なリソースを起動できるように、アプリケーションにロール割り当てを追加する必要もあります。
-
仮想マシン (VM) へのアクセスを提供する SSH 公開キー。これによ り、Terraform は VM 上で必要なサービス プロセスをデプロイできます。
ローカル コンピューターで SSH 公開キーを作成する必要があります。これは、このオブジェクトの
public_key
要素にパスを入力する必要があるためです。 -
クラスターが依存する 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 Account 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
}
詳細については、次のドキュメントを参照してください。
- azurerm_resource_group
- azurerm_user_assigned_identity
- azurerm_role_assignment
- azurerm_storage_account
- azurerm_storage_container
- azuread_application_registration
- azuread_service_principal
- azuread_application_password
- azurerm_ssh_public_key
- azurerm_virtual_network
- azurerm_subnet
- azurerm_subnet_network_security_group_association
インフラストラクチャの説明
このセクションでは、Azure 上でのクラシック CelerData クラスターのデプロイメントを自動化するサンプル インフラストラクチャ設定を提供し、CelerData Cloud BYOC プロバイダーを使用する方法を理解するのに役立ちます。準備を完了した、プロバイダーを設定した、および Azure オブジェクトを設定したことを前提としています。
クラシック CelerData クラスターを作成するには、プロバイダーと Azure オブジェクトを設定した .tf ファイル(例: main.tf)で、構築するインフラストラクチャを表す次のリソースを宣言する必要があります。
celerdatabyoc_azure_data_credential
resource "celerdatabyoc_azure_data_credential" "example" {
name = "<data_credential_name>"
managed_identity_resource_id = azurerm_user_assigned_identity.example.id
storage_account_name = azurerm_storage_account.example.name
container_name = azurerm_storage_container.example.name
}
このリソースには、次の必須引数が含まれています。
-
name
: (新しいリソースを強制)データ資格情報の名前。ユニークな名前を入力します。 -
managed_identity_resource_id
: (新しいリソースを強制)マネージド ID の ID。この引数をazurerm_user_assigned_identity.example.id
に設定します。 -
storage_account_name
: (新しいリソースを強制)ストレージ アカウントの名前。この引数をazurerm_storage_account.example.name
に設定します。 -
container_name
: (新しいリソースを強制)コンテナーの名前。この引数をazurerm_storage_container.example.name
に設定します。
celerdatabyoc_azure_deployment_credential
resource "celerdatabyoc_azure_deployment_credential" "example" {
name = "<deployment_credential_name>"
application_id = azuread_application_registration.example.client_id
directory_id = azuread_service_principal.app_service_principal.application_tenant_id
client_secret_value = azuread_application_password.example.value
ssh_key_resource_id = azurerm_ssh_public_key.example.id
}
このリソースには、次の必須引数が含まれています。
-
name
: (新しいリソースを強制)デプロイメント資格情報の名前。ユニークな名前を入力します。 -
application_id
: (新しいリソースを強制)登録されたアプリケーションのアプリケーション(クライアント)ID。この引数をazuread_application_registration.example.client_id
に設定します。 -
directory_id
: (新しいリソースを強制)登録されたアプリケーションのディレクトリ(テナント)ID。この引数をazuread_service_principal.app_service_principal.application_tenant_id
に設定します。 -
client_secret_value
: (新しいリソースを強制)登録されたアプリケーションのクライアント シークレットの値。この引数をazuread_application_password.example.value
に設定します。 -
ssh_key_resource_id
: (新しいリソースを強制)SSH 公開キーの ID。この引数をazurerm_ssh_public_key.example.id
に設定します。
celerdatabyoc_azure_network
resource "celerdatabyoc_azure_network" "example" {
name = "<network_credential_name>"
deployment_credential_id = celerdatabyoc_azure_deployment_credential.example.id
virtual_network_resource_id = azurerm_virtual_network.example.id
subnet_name = azurerm_subnet.example.name
region = local.cluster_region
public_accessible = true
}
このリソースには、次の必須引数とオプシ ョン引数が含まれています。
必須:
-
name
: (新しいリソースを強制)ネットワーク設定の名前。ユニークな名前を入力します。 -
deployment_credential_id
: (新しいリソースを強制)デプロイメント資格情報の ID。この引数をcelerdatabyoc_azure_deployment_credential.example.id
に設定します。 -
virtual_network_resource_id
: (新しいリソースを強制)Azure 仮想ネットワークのリソース ID。この引数をazurerm_virtual_network.example.id
に設定します。 -
subnet_name
: (新しいリソースを強制)サブネットの名前。この引数をazurerm_subnet.example.name
に設定します。 -
region
: (新しいリソースを強制)Azure リージョンの ID。この引数をlocal.cluster_region
に設定します。Terraform 設定でリージョン要素をローカル値として設定することをお勧めします。ローカル値を参照してください。
オプション:
public_accessible
: クラスターがパブリック ネットワークからアクセス可能かどうか。 有効な値:true
とfalse
。この引数をtrue
に設定すると、CelerData はクラスターにロード バランサーをアタッチして、受信クエリを分散し、クラスターにパブリック ドメイン名を割り当てて、パブリック ネットワーク経由でクラスターにアクセスできるようにします。この引数をfalse
に設定すると、クラスターはプライベート ドメイン名を介してのみア クセス可能です。
celerdatabyoc_classic_cluster
resource "celerdatabyoc_classic_cluster" "demo_cluster" {
deployment_credential_id = celerdatabyoc_azure_deployment_credential.example.id
data_credential_id = celerdatabyoc_azure_data_credential.example.id
network_id = celerdatabyoc_azure_network.example.id
cluster_name = "<cluster_name>"
fe_instance_type = "<fe_node_instance_type>"
fe_node_count = 1
be_instance_type = "<be_node_instance_type>"
be_node_count = 1
// optional
be_volume_config {
vol_number = <vol_number>
vol_size = <vol_size>
iops = <iops>
throughput = <throughput>
}
default_admin_password = "<SQL_user_initial_password>"
expected_cluster_state = "Running"
resource_tags = {
celerdata = "<tag_name>"
}
csp = "azure"
region = local.cluster_region
depends_on = [azurerm_role_assignment.assignment_app_roles,azurerm_role_assignment.assignment_identity_roles]
}
設定の適用
Terraform 設定で プロバイダーを設定し、インフラストラクチャ オブジェクトを説明した後、次の手順に従って Terraform プロジェクトで設定を適用します。
-
Terraform 設定で定義されたプロバイダーを初期化してインストールします。
terraform init
-
Terraform プロジェクトが適切に構成されていることを確認します。
terraform plan
エラーがある場合は、Terraform 設定を編集し、前述のコマンドを再実行します。
-
Terraform 設定を適用します。
terraform apply
システムが「Apply complete!」メッセージを返すと、Terraform 設定が正常に適用されたことを示します。
Terraform 設定でプロバイダーのバージョンを変更した後は、terraform init -upgrade
を実行してプロバイダー を初期化し、その後 terraform apply
を再度実行して Terraform 設定を適用する必要があります。
設定の削除
Terraform 設定が不要になった場合は、削除することができます。
Terraform 設定を削除することは、CelerData Cloud BYOC プロバイダーによって作成されたすべてのリソースを破棄することを意味します。
Terraform 設定を削除するには、Terraform プロジェクトで次のコマンドを実行します。
terraform destroy
システムが「Destroy complete!」メッセージを返すと、Terraform 設定が正常に削除され、Terraform 設定によって作成されたクラスターも解放されます。