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

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

AWS 上で CelerData Cloud BYOC クラスターを段階的にデプロイします。

AWS 上でクラスターをデプロイするために Terraform 設定を始める前にこの記事を読んでください。

準備

初めて AWS アカウントレベルでインフラストラクチャを作成するために CelerData Cloud BYOC プロバイダーを使用する前に、以下の準備を完了してください。

AWS の前提条件

  1. 管理者権限を持つ AWS アカウントを持っていること。

  2. AWS S3 バケットを持っていること。

  3. 以下のポリシーが添付された IAM ユーザーを持ち、その IAM ユーザーのためにアクセスキーのペアを作成すること。

    {
    "Version": "2012-10-17",
    "Statement": [
    {
    "Effect": "Allow",
    "Action": [
    "iam:CreateRole",
    "iam:PutRolePolicy",
    "iam:GetRole",
    "iam:ListRolePolicies",
    "iam:GetRolePolicy",
    "iam:ListAttachedRolePolicies",
    "iam:ListInstanceProfilesForRole",
    "iam:DeleteRolePolicy",
    "iam:DeleteRole",
    "iam:CreateInstanceProfile",
    "iam:GetInstanceProfile",
    "iam:RemoveRoleFromInstanceProfile",
    "iam:DeleteInstanceProfile",
    "iam:AddRoleToInstanceProfile",
    "iam:PassRole"
    ],
    "Resource": "*"
    }
    ]
    }

CelerData の前提条件

CelerData Cloud BYOC プラットフォームに認証するための資格情報を取得してください。詳細は Authentication を参照してください。

Terraform の前提条件

  1. Terraform をターミナルにインストールしてください。

  2. Terraform プロジェクトを持っていること。ターミナルで空のディレクトリ(例: terraform)を作成し、そこに移動してください。(各 Terraform 設定ファイルのセットは独自のディレクトリに存在する必要があります。これを Terraform プロジェクトと呼びます。)

プロバイダーの設定

このセクションでは、準備を完了したことを前提としています。

Terraform プロジェクトに .tf ファイル(例: main.tf)を作成します。その後、以下のコードスニペットを .tf ファイルに追加します。

terraform {
required_providers {
celerdatabyoc = {
source = "CelerData/celerdatabyoc"
version = "<provider_version>"
}
aws = {
source = "hashicorp/aws"
version = "4.26.0"
}
}
}

provider "celerdatabyoc" {
client_id = "<client_id>"
client_secret = "<client_secret>"
}

provider "aws" {
region = "<region_name>"
access_key = "<your_access_key>"
secret_key = "<your_secret_key>"
}

locals {
s3_bucket = "<bucket_name>"
}

指定する必要があるパラメータは以下の通りです。

  • provider_version: 使用する CelerData プロバイダーのバージョンを入力します。最新のプロバイダーバージョンを選択することをお勧めします。例: version = "1.0.2"。CelerData Cloud BYOC が提供するプロバイダーバージョンは CelerData Cloud BYOC provider ページで確認できます。
  • client_idclient_secret: アプリケーションキーの Client IDSecret を入力します。"For CelerData" を参照してください。
  • region_name: CelerData クラスターを実行したい AWS リージョンの ID を入力します。Supported cloud platforms and regions を参照してください。
  • access_keysecret_key: アクセスキー ID(略して "access key")とシークレットアクセスキー(略して "secret key")を入力します。"For AWS" を参照してください。セキュリティのために、アクセスキーとシークレットキーを environment variables として設定することができます。
  • s3_bucket: S3 バケットの名前を入力します。この方法で、バケット要素がローカル値として設定され、Terraform 設定でバケット要素の引数を local.s3_bucket に直接設定することで時間を節約できます。Local Values を参照してください。

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

このセクションでは、AWS 上でクラシックな CelerData クラスターを自動的にデプロイするサンプルインフラストラクチャ設定を提供し、CelerData Cloud BYOC プロバイダーをどのように使用できるかを理解するのに役立ちます。準備を完了したことと、プロバイダーを設定したことを前提としています。

クラシックな CelerData クラスターを作成するには、構築するインフラストラクチャを表す以下のリソースを、プロバイダーを設定した .tf ファイル(例: main.tf)に宣言する必要があります。

データ資格情報関連のリソース

data "celerdatabyoc_aws_data_credential_assume_policy" "assume_role" {}

resource "celerdatabyoc_aws_data_credential_policy" "role_policy" {
bucket = local.s3_bucket
}

resource "aws_iam_role" "celerdata_data_cred_role" {
name = "<celerdata_data_credential_role_name>"
assume_role_policy = data.celerdatabyoc_aws_data_credential_assume_policy.assume_role.json
description = "<celerdata_data_credential_role_description>"
inline_policy {
name = "<celerdata_data_credential_role_policy_name>"
policy = celerdatabyoc_aws_data_credential_policy.role_policy.json
}
}

resource "celerdatabyoc_aws_data_credential" "data_credential" {
name = "<celerdata_data_credential_name>"
role_arn = aws_iam_role.celerdata_data_cred_role.arn
instance_profile_arn = aws_iam_instance_profile.celerdata_data_cred_profile.arn
bucket_name = local.s3_bucket
policy_version = celerdatabyoc_aws_data_credential_policy.role_policy.version
}

celerdatabyoc_aws_data_credential_policy

このリソースには、以下の必須引数のみが含まれます。

  • bucket: (新しいリソースを強制)JSON ポリシードキュメントを生成し、クエリプロファイルを格納する AWS S3 バケットの名前。この引数を local.s3_bucket に設定してください。バケット要素を Terraform 設定でローカル値 s3_bucket として設定することをお勧めします。Local Values を参照してください。

aws_iam_role (celerdata_data_cred_role)

このリソースには、以下の必須引数とオプション引数が含まれます。

必須:

  • assume_role_policy: データ資格情報で参照される IAM ロールを引き受ける権限をエンティティに付与するポリシー。値を data.celerdatabyoc_aws_data_credential_assume_policy.assume_role.json に設定します。

オプション:

  • name: (新しいリソースを強制)データ資格情報で参照される IAM ロールの名前。ユニークな名前を入力します。省略した場合、Terraform はランダムでユニークな名前を割り当てます。詳細は IAM Identifiers を参照してください。
  • description: IAM ロールの説明。
  • inline_policy: IAM ロールに関連付けられた IAM インラインポリシーの排他的なセットを定義する構成ブロック。以下を参照してください。ブロックが構成されていない場合、Terraform はこのリソースのインラインポリシーを管理しません。空のブロック(つまり、inline_policy {})を構成すると、apply 時にバンド外で追加されたすべてのインラインポリシーが削除されます。
    • name: データ資格情報で参照される IAM ロールに添付される IAM ポリシーの名前。
    • policy: IAM ロールに添付される IAM ポリシー。値を celerdatabyoc_aws_data_credential_policy.role_policy.json に設定します。

celerdatabyoc_aws_data_credential

このリソースには、以下の必須引数とオプション引数が含まれます。

必須:

  • role_arn: (新しいリソースを強制)データ資格情報で参照される IAM ロールの ARN。値を aws_iam_role.celerdata_data_cred_role.arn に設定します。
  • instance_profile_arn: (新しいリソースを強制)データ資格情報で参照される IAM ロールのインスタンスプロファイル ARN。値を aws_iam_instance_profile.celerdata_data_cred_profile.arn に設定します。
  • bucket_name: (新しいリソースを強制)ポリシードキュメントを生成し、クエリプロファイルを格納する AWS S3 バケットの名前。この引数を local.s3_bucket に設定してください。バケット要素を Terraform 設定でローカル値 s3_bucket として設定することをお勧めします。Local Values を参照してください。
  • policy_version: (新しいリソースを強制)ポリシーのバージョン。値を celerdatabyoc_aws_data_credential_policy.role_policy.version に設定します。

オプション:

  • name: (新しいリソースを強制)データ資格情報の名前。ユニークな名前を入力します。

デプロイメント資格情報関連のリソース

resource "aws_iam_instance_profile" "celerdata_data_cred_profile" {
name = "<celerdata_data_credential_profile_name>"
role = aws_iam_role.celerdata_data_cred_role.name
}

resource "celerdatabyoc_aws_deployment_credential_policy" "role_policy" {
bucket = local.s3_bucket
data_role_arn = aws_iam_role.celerdata_data_cred_role.arn
}

resource "celerdatabyoc_aws_deployment_credential_assume_policy" "role_policy" {}

resource "aws_iam_role" "deploy_cred_role" {
name = "<celerdata_deployment_credential_role_name>"
assume_role_policy = celerdatabyoc_aws_deployment_credential_assume_policy.role_policy.json
description = "<celerdata_deployment_credential_role_description>"
inline_policy {
name = "<celerdata_deployment_credential_role_policy_name>"
policy = celerdatabyoc_aws_deployment_credential_policy.role_policy.json
}
}

resource "celerdatabyoc_aws_deployment_role_credential" "deployment_role_credential" {
name = "<celerdata_deployment_credential_name>"
role_arn = aws_iam_role.deploy_cred_role.arn
external_id = celerdatabyoc_aws_deployment_credential_assume_policy.role_policy.external_id
policy_version = celerdatabyoc_aws_deployment_credential_policy.role_policy.version
}

aws_iam_instance_profile

このリソースには、以下のオプション引数のみが含まれます。

  • name: (新しいリソースを強制)インスタンスプロファイルの名前。ユニークな名前を入力します。省略した場合、Terraform はランダムでユニークな名前を割り当てます。この引数は name_prefix と競合します。この引数の値は、アルファベットの大文字と小文字、数字、そしてこれらの特殊文字: _, +, =, ,, ., @, - で構成される文字列にすることができます。スペースは許可されていません。
  • role: インスタンスプロファイルに追加する IAM ロールの名前。値を aws_iam_role.celerdata_data_cred_role.name に設定します。

celerdatabyoc_aws_deployment_credential_policy

このリソースには、以下の必須引数のみが含まれます。

  • bucket: AWS S3 バケットの名前。この引数を local.s3_bucket に設定してください。バケット要素を Terraform 設定でローカル値 s3_bucket として設定することをお勧めします。Local Values を参照してください。
  • data_role_arn: (新しいリソースを強制)デプロイメント資格情報で参照される IAM ロールの ARN。値を aws_iam_role.celerdata_data_cred_role.arn に設定します。

aws_iam_role (deploy_cred_role)

このリソースには、以下の必須引数とオプション引数が含まれます。

必須:

  • assume_role_policy: デプロイメント資格情報で参照される IAM ロールを引き受ける権限をエンティティに付与するポリシー。値を celerdatabyoc_aws_deployment_credential_assume_policy.role_policy.json に設定します。

オプション:

  • name: (新しいリソースを強制)デプロイメント資格情報で参照される IAM ロールの名前。ユニークな名前を入力します。省略した場合、Terraform はランダムでユニークな名前を割り当てます。詳細は IAM Identifiers を参照してください。
  • description: IAM ロールの説明。
  • inline_policy: IAM ロールに関連付けられた IAM インラインポリシーの排他的なセットを定義する構成ブロック。以下を参照してください。ブロックが構成されていない場合、Terraform はこのリソースのインラインポリシーを管理しません。空のブロック(つまり、inline_policy {})を構成すると、apply 時にバンド外で追加されたすべてのインラインポリシーが削除されます。
    • name: デプロイメント資格情報で参照される IAM ロールに添付される IAM ポリシーの名前。
    • policy: デプロイメント資格情報で参照される IAM ロールに添付される IAM ポリシー。値を celerdatabyoc_aws_deployment_credential_policy.role_policy.json に設定します。

celerdatabyoc_aws_deployment_role_credential

このリソースには、以下の必須引数とオプション引数が含まれます。

必須:

  • role_arn: (新しいリソースを強制)デプロイメント資格情報で参照されるクロスアカウント IAM ロールの ARN。値を aws_iam_role.deploy_cred_role.arn に設定します。
  • external_id: (新しいリソースを強制)デプロイメント資格情報で参照されるクロスアカウント IAM ロールを作成するために使用される外部 ID。値を celerdatabyoc_aws_deployment_credential_assume_policy.role_policy.external_id に設定します。
  • policy_version: (新しいリソースを強制)ポリシーのバージョン。値を celerdatabyoc_aws_deployment_credential_policy.role_policy.version に設定します。

オプション:

  • name: (新しいリソースを強制)デプロイメント資格情報の名前。ユニークな名前を入力します。

ネットワーク設定関連のリソース

resource "celerdatabyoc_aws_network" "network" {
name = "<VPC_name>"
subnet_id = "<subnet_id>"
security_group_id = "<security_group_id>"
region = "<AWS_VPC_region>"
deployment_credential_id = celerdatabyoc_aws_deployment_role_credential.deployment_role_credential.id
vpc_endpoint_id = "<vpc_endpoint_id>"
}

celerdatabyoc_aws_network リソースには、以下の必須引数とオプション引数が含まれます。

必須:

  • name: (新しいリソースを強制)クラスターをホストする AWS VPC の名前。ユニークな名前を入力します。
  • subnet_id: (新しいリソースを強制)AWS VPC 内のサブネットの ID。
  • security_group_id: (新しいリソースを強制)AWS VPC 内のセキュリティグループの ID。
  • region: (新しいリソースを強制)AWS VPC が属する AWS リージョンの ID。Supported cloud platforms and regions を参照してください。
  • deployment_credential_id: (新しいリソースを強制)デプロイメント資格情報の ID。値を celerdatabyoc_aws_deployment_role_credential.deployment_role_credential.id に設定します。

オプション:

  • vpc_endpoint_id: (オプション)VPC 内のエンドポイントの ID。より厳密なネットワーク通信方法を実現する必要がある場合、この引数を設定します。

CelerData クラスター関連のリソース

resource "celerdatabyoc_classic_cluster" "demo_cluster" {
deployment_credential_id = celerdatabyoc_aws_deployment_role_credential.deployment_role_credential.id
data_credential_id = celerdatabyoc_aws_data_credential.data_credential.id
network_id = celerdatabyoc_aws_network.network.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 = "aws"
region = "<AWS_VPC_region>"
}

設定の適用

プロバイダーの設定を完了し、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 設定によって作成されたクラスターも解放されます。