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

Azure で CelerData Cloud BYOC をプロビジョニングする

この記事では、Azure 上で CelerData Cloud BYOC クラスターをデプロイするために必要な以下の手順を説明します。

Azure でのクラスター デプロイメントのために Terraform 設定を開始する前に、この記事をお読みください。

準備

初めて Azure アカウント レベルでインフラストラクチャを作成するために CelerData Cloud BYOC プロバイダーを使用する前に、次の準備を完了する必要があります。

Azure の場合

Azure の場合、以下が必要です。

  1. 管理者権限を持つ Azure サービス アカウントを持っていること。
  2. Azure CLI をインストールすること。詳細については、Azure CLI のインストール方法を参照してください。

CelerData の場合

CelerData の場合、CelerData Cloud BYOC プラットフォームに認証するための資格情報を取得する必要があります。詳細については、認証を参照してください。

Terraform の場合

Terraform の場合、以下が必要です。

  1. ターミナルに Terraform をインストールすること。

  2. 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_idclient_secret: アプリケーション キーの Client IDSecret を入力します。CelerData の場合を参照してください。
  • cluster_regionazure_region: CelerData クラスターを実行したい Azure リージョンの ID(例: eastus)と名前(例: East US)をそれぞれ入力します。サポートされているクラウド プラットフォームとリージョンを参照してください。ここで指定する Azure リージョンは、Azure オブジェクトの設定 で作成するリソース グループの Azure リージョンと同じである必要があります。これらのリージョン要素をローカル値として設定することで、Terraform 設定でこれらのリージョン要素の引数を local.cluster_regionlocal.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
}

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

インフラストラクチャの説明

このセクションでは、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: クラスターがパブリック ネットワークからアクセス可能かどうか。 有効な値: truefalse。この引数を 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 プロジェクトで設定を適用します。

  1. Terraform 設定で定義されたプロバイダーを初期化してインストールします。

    terraform init
  2. Terraform プロジェクトが適切に構成されていることを確認します。

    terraform plan

    エラーがある場合は、Terraform 設定を編集し、前述のコマンドを再実行します。

  3. 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 設定によって作成されたクラスターも解放されます。