GCP での CelerData Cloud BYOC のプロビジョニング
GCP での CelerData Cloud BYOC クラスターのステップバイステップのデプロイメント:
GCP でのクラスターのデプロイメントのために Terraform 設定を開始する前に、この記事をお読みください。
準備
CelerData Cloud BYOC プロバイダーを使用して、GCP アカウントレベルで初めてインフラストラクチャを作成する前に、次の準備を完了する必要があります。
GCP の前提条件
- 管理者権限を持つ GCP サービスアカウントを持っていること。
- GCP CLI をイン ストールすること。詳細については、GCP CLI のインストール方法を参照してください。
CelerData の前提条件
CelerData Cloud BYOC プラットフォームに認証するための資格情報を取得します。詳細については、認証を参照してください。
Terraform の前提条件
-
Terraform をターミナルにインストールします。
-
Terraform プロジェクトを持っていること。ターミナルで空のディレクトリ(例:
terraform
)を作成し、そこに移動します。(各 Terraform 設定ファイルのセットは、それぞれ独自のディレクトリに配置する必要があります。これを Terraform プロジェクトと呼びます。)
プロバイダーの設定
このセクションでは、準備を完了したことを前提として います。
Terraform プロジェクトに .tf
ファイル(例: main.tf
)を作成します。次に、以下のコードスニペットを .tf
ファイルに追加します。
terraform {
required_providers {
celerdatabyoc = {
source = "CelerData/celerdatabyoc"
version = "<provider_version>"
}
google = {
source = "hashicorp/google"
version = "6.37.0"
}
}
}
provider "celerdatabyoc" {
client_id = "<client_id>"
client_secret = "<client_secret>"
}
provider "google" {
project = "<project_id>"
region = "<region>"
}
指定する必要があるパラメータは次のとおりです。
provider_version
: 使用する CelerData プロバイダーのバージョンを入力します。最新のプロバイダーバージョンを選択す ることをお勧めします。例:version = "1.0.3"
。CelerData Cloud BYOC が提供するプロバイダーバージョンは CelerData Cloud BYOC プロバイダー ページで確認できます。client_id
とclient_secret
: アプリケーションキーの Client ID と Secret を入力します。For CelerData を参照してください。project_id
: GCP クラウドプロジェクト ID を入力します。region
: CelerData クラスターを実行したい GCP クラウドリージョンの ID を入力します。サポートされているクラウドプラットフォームとリージョン を参照してください。
GCP オブジェクトの設定
GCP でのデプロイメントには、CelerData Cloud で Data Credential、Deployment Credential、Network Credential を作成する必要があります。詳細な手順については、Cloud Setting For GCP を参照してください。
以下はドキュメントに基づいて書かれた例です。
provider "google" {
project = "<gcp_project_id>"
region = "us-central1"
}
resource "google_project_service" "project" {
for_each = toset([
"analyticshub.googleapis.com",
"bigquery.googleapis.com",
"bigqueryconnection.googleapis.com",
"bigquerydatapolicy.googleapis.com",
"bigquerymigration.googleapis.com",
"bigqueryreservation.googleapis.com",
"bigquerystorage.googleapis.com",
"compute.googleapis.com",
"cloudapis.googleapis.com",
"logging.googleapis.com",
"iamcredentials.googleapis.com",
"dataplex.googleapis.com",
"datastore.googleapis.com",
"dns.googleapis.com",
"monitoring.googleapis.com",
"oslogin.googleapis.com",
"sqladmin.googleapis.com",
"storage.googleapis.com",
"cloudtrace.googleapis.com",
"dataform.googleapis.com",
"storage-api.googleapis.com",
"privilegedaccessmanager.googleapis.com",
"servicedirectory.googleapis.com",
"servicemanagement.googleapis.com",
"servicenetworking.googleapis.com",
"serviceusage.googleapis.com",
])
service = each.key
disable_on_destroy = false
}
resource "google_storage_bucket" "storage-bucket" {
name = "tf-test-bucket-${local.gcp_project_id}"
location = us-central1
storage_class = "STANDARD"
uniform_bucket_level_access = false
public_access_prevention = "enforced"
force_destroy = false
labels = {
environment = "prod"
}
lifecycle {
ignore_changes = [
cors
]
}
}
resource "google_service_account" "storage-sa" {
account_id = "tf-test-storage-sa"
display_name = "Terraform Test Service Account"
}
resource "google_project_iam_custom_role" "storage-custom-role" {
role_id = "tfteststoragerole"
title = "CelerData Compute Engine Storage Role"
description = "Custom role with only necessary permissions for CelerData"
project = "<gcp_project_id>"
permissions = [
"iam.serviceAccounts.signBlob",
"storage.buckets.get",
"storage.buckets.update",
"storage.objects.create",
"storage.objects.delete",
"storage.objects.get",
"storage.objects.list"
]
}
resource "google_project_iam_member" "storage-sa-role-binding" {
project = "<gcp_project_id>"
role = google_project_iam_custom_role.storage-custom-role.id
member = "serviceAccount:${google_service_account.storage-sa.email}"
condition {
title = "bucket_conditions"
description = "Bucket conditions."
expression = "resource.name.startsWith(\"projects/_/buckets/${google_storage_bucket.storage-bucket.name}/\") || resource.name == \"projects/_/buckets/${google_storage_bucket.storage-bucket.name}\""
}
}
resource "google_project_iam_custom_role" "deployment-custom-role" {
role_id = "tftestdeploymentrole"
title = "CelerData Compute Engine Deployment Role"
description = "Custom role with only necessary permissions for CelerData"
project = "<gcp_project_id>"
permissions = [
"iam.serviceAccounts.actAs",
"storage.buckets.get"
]
}
resource "google_project_iam_member" "deployment-sa-custom-role-binding-1" {
project = "<gcp_project_id>"
role = google_project_iam_custom_role.deployment-custom-role.id
member = "serviceAccount:service@celerdata-byoc-1683716900563.iam.gserviceaccount.com"
}
resource "google_project_iam_member" "deployment-sa-static-role-binding" {
project = "<gcp_project_id>"
role = "roles/compute.admin"
member = "serviceAccount:service@celerdata-byoc-1683716900563.iam.gserviceaccount.com"
}
resource "google_compute_network" "celerdata_vpc" {
name = "tf-test-vpc"
auto_create_subnetworks = false
routing_mode = "REGIONAL"
bgp_best_path_selection_mode = "LEGACY"
}
resource "google_compute_subnetwork" "subnetwork" {
name = "tf-test-subnetwork"
ip_cidr_range = "10.0.0.0/24"
region = us-central1
network = google_compute_network.celerdata_vpc.name
private_ip_google_access = true
}
resource "google_compute_firewall" "fr-ingress-internal" {
name = "tf-test-fr-ingress-internal"
network = google_compute_network.celerdata_vpc.name
priority = 100
direction = "INGRESS"
allow {
protocol = "all"
}
target_tags = [local.gcp_network_tag]
source_ranges = ["10.0.0.0/24"]
}
resource "google_compute_firewall" "fr-ingress-external" {
name = "tf-test-fr-ingress-external"
network = google_compute_network.celerdata_vpc.name
priority = 100
direction = "INGRESS"
allow {
protocol = "tcp"
ports = ["443", "9030"]
}
source_ranges = ["0.0.0.0/0"]
}
resource "google_compute_firewall" "fr-egress-internal" {
name = "tf-test-fr-egress-internal"
network = google_compute_network.celerdata_vpc.name
priority = 100
direction = "EGRESS"
allow {
protocol = "all"
}
target_tags = [local.gcp_network_tag]
source_ranges = ["10.0.0.0/24"]
}
resource "google_compute_firewall" "fr-egress-external" {
name = "tf-test-fr-egress-external"
network = google_compute_network.celerdata_vpc.name
priority = 100
direction = "EGRESS"
allow {
protocol = "tcp"
ports = ["443","9030"]
}
source_ranges = ["0.0.0.0/0"]
}
resource "google_compute_firewall" "fr-ingress-nlb" {
name = "tf-test-fr-ingress-nlb"
network = google_compute_network.celerdata_vpc.name
priority = 100
direction = "INGRESS"
allow {
protocol = "tcp"
ports = ["443"]
}
target_tags = [local.gcp_network_tag]
source_ranges = ["35.191.0.0/16", "209.85.152.0/22", "209.85.204.0/22", "130.211.0.0/22"]
}
詳細については、以下のドキュメントを参照してください。
google_project_service
google_storage_bucket
google_service_account
google_project_iam_custom_role
google_project_iam_member
google_compute_network
google_compute_firewall
インフラストラクチャの説明
このセクションでは、GCP 上にクラシック(共有なし)の CelerData クラスターをデプロイするためのインフラストラクチャ設定のサンプルを提供します。これにより、CelerData Cloud BYOC プロバイダーを使用する方法を理解するのに役立ちます。準備を完了した、プロバイダーを設定した、および GCP オブジェクトを設定した ことを前提としています。
クラシック CelerData クラスターを作成するには、プロバイダーと GCP オブジェクトを設定した .tf
ファイル(例: main.tf
)に、構築するインフラストラクチャを表す以下のリソースを宣言する必要があります。
celerdatabyoc_gcp_data_credential
resource "celerdatabyoc_gcp_data_credential" "storage_credential" {
name = "tf-test-0604"
bucket_name = google_storage_bucket.storage-bucket.name
service_account = google_service_account.storage-sa.email
}
このリソースには、次の必須引数が含まれています。
-
name
: (新しいリソースを強制)データクレデンシャルの名前。ユニークな名前を入力します。 -
bucket_name
: (新しいリソースを強制)GCP バケットの名前。この引数をgoogle_storage_bucket.storage-bucket.name
に設定します。 -
service_account
: (新しいリソースを強制)ストレージのサービスアカウントのメール。この引数をgoogle_service_account.storage-sa.email
に設定します。
celerdatabyoc_gcp_deployment_credential
resource "celerdatabyoc_gcp_deployment_credential" "deployment_credential" {
name = "tf-test-0604"
project_id = "<gcp_project_id>"
}
このリソースには、次の必須引数が含まれています。
-
name
: (新しいリソースを強制)デプロイメントクレデンシャルの名前。ユニークな名前を入力します。 -
project_id
: (新しいリソースを強制)ストレージのサービスアカウントのメール。この引数をgoogle_service_account.storage-sa.email
に設定します。
celerdatabyoc_gcp_network
resource "celerdatabyoc_gcp_network" "network_credential" {
name = "tf-test-0604"
region = us-central1
subnet = google_compute_subnetwork.subnetwork.name
network_tag = "<gcp_network_tag>"
deployment_credential_id = celerdatabyoc_gcp_deployment_credential.deployment_credential.id
}
このリソースには、次の必須引数とオプション引数が含まれています。
必須:
-
name
: (新しいリソースを強制)ネットワーク設定の名前。ユニークな名前を入力します。 -
region
: (新しいリソースを強制)GCP リージョンの ID。サポートされているクラウドプラットフォームとリージョン を参照してください。 -
subnet
: (新しいリソースを強制)GCP サブネット。例:google_compute_subnetwork.subnetwork.name
。 -
network_tag
: (新しいリソースを強制)クラスター内のノード間、および CelerData の VPC と TLS 経由での自身の VPC 間の接続を有効にするために使用するファイアウォールルールのターゲットタグ。 -
deployment_credential_id
: (新しいリソースを強制)デプロイメントクレデンシャルの ID。この引数をcelerdatabyoc_gcp_deployment_credential.example.id
に設定します。
オプション:
-
psc_connection_id
: (新しいリソースを強制)CelerData の VPC と自身の VPC 間で直接かつ安全な接続を可能にするために作成する Private Service Connection の ID。 PSC Connection の作成方 法については、Create a Private Service Connect Endpoint を参照してください。NOTE: PSC Connection を指定しない場合、CelerData の VPC はインターネット経由で自身の VPC と通信します。
celerdatabyoc_classic_cluster
resource "celerdatabyoc_classic_cluster" "demo_cluster" {
deployment_credential_id = celerdatabyoc_gcp_deployment_credential.deployment_credential.id
data_credential_id = celerdatabyoc_gcp_data_credential.storage_credential.id
network_id = celerdatabyoc_gcp_network.network_credential.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 = "gcp"
region = "us-central1"
}
celerdatabyoc_classic_cluster
リソースには、次の必須引数とオプション引数が含まれています。
必須:
-
cluster_name
: (新しいリソースを強制)クラスターの希望する名前。 -
fe_instance_type
: クラスター内の FE ノードのインスタンスタイプ。"Supported instance types" の表から FE インスタンスタイプを選択します。 -
deployment_credential_id
: (新しいリソースを強制)デプロイメントクレデンシャルの ID。この値をcelerdatabyoc_gcp_deployment_credential.deployment_credential.id
に設定します。 -
data_credential_id
: (新しいリソースを強制)データクレデンシャルの ID。この値をcelerdatabyoc_gcp_data_credential.storage_credential.id
に設定します。 -
network_id
: (新しいリソースを強制)ネットワーク設定の ID。この値をcelerdatabyoc_gcp_network.network_credential.id
に設定します。 -
be_instance_type
: クラスター内の BE ノードのインスタンスタイプ。"Supported instance types" の表から BE インスタンスタイプを選択します。 -
default_admin_password
: クラスターadmin
ユーザーの初期パスワード。 -
expected_cluster_state
: クラスターを作成する際に、作成するクラスターの状態を宣言する必要があります。クラスターの状態はSuspended
とRunning
に分類されます。プロビジョニング後にクラスターを開始したい場合、この引数をRunning
に設定します。そうしない場合、クラスターはプロビジョニング後に停止されます。 -
csp
: クラスターのクラウドサービスプロバイダー。この引数をgcp
に設定します。 -
region
: クラスターをホストする VPC が属する GCP リージョンの ID。サポートされているクラウドプラットフォームとリージョン を参照してください。
オプション:
-
fe_node_count
: クラスター内の FE ノードの数。許可される値:1
,3
,5
。デフォルト値:1
。 -
be_node_count
: クラスター内の BE ノードの数。許可される値: 0 以外の任意の正の整数。デフォルト値:3
。 -
be_disk_number
: (新しいリソースを強制)各 BE に許可される最大ディスク数。許可される値:[1,24]
。デフォルト値:2
。 -
be_disk_per_size
: 各 BE のディスクごとのサイズ。単位: GB。最大値:16000
。デフォルト値:100
。このパラメータの値を増やすことのみ可能で、2 つの値変更の間隔は 6 時間以上でなければなりません。 -
resource_tags
: クラスターに添付するタグ。
設定の適用
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 設定によって作成された クラスターも解放されます。