Tablestore は、オープンソースの Infrastructure as Code (IaC) ツールである Terraform と統合されています。Terraform を使用すると、コンソールではなくプログラムで Tablestore インスタンスを定義およびプロビジョニングできます。
このトピックでは、Terraform 構成の記述、インスタンス作成への適用、結果の確認、およびクリーンアップについて説明します。
このトピックのサンプルコードは、Terraform Explorer で直接実行できます。
前提条件
開始する前に、以下を確認してください。
最小限必要な権限を持つ RAM ユーザー。ご利用の Alibaba Cloud アカウントの AccessKey ペアが漏洩するリスクを軽減するため、ルートアカウントではなく RAM ユーザーを使用してください。詳細については、「RAM ユーザーの作成」および「RAM ユーザーへの権限付与」をご参照ください。次のポリシーを RAM ユーザーにアタッチします。
{ "Version": "1", "Statement": [ { "Effect": "Allow", "Action": [ "ots:GetInstance", "ots:BindInstance2Vpc", "ots:ListVpcInfoByInstance", "ots:UnbindInstance2Vpc", "ots:DeleteInstance", "ots:InsertInstance", "ots:UpdateInstance", "ots:ListInstance" ], "Resource": "*" } ] }次のいずれかの方法でセットアップされた Terraform ランタイム環境。
Terraform Explorer (推奨): Alibaba Cloud が提供するオンラインランタイム環境です。インストールは不要です。追加費用なしでクイック実験に最適です。
Cloud Shell: Terraform がプリインストールされており、認証情報が事前構成されています。高速で低コストのデバッグセッションに最適です。
ローカルインストール: オンプレミス環境に Terraform をインストールして構成します。カスタム開発環境や制限されたネットワーク環境に最適です。
必要なリソース
この構成では、次の Terraform リソースを使用します。
alicloud_ots_instance -- Tablestore インスタンス。
引数リファレンス
alicloud_ots_instance リソースは、次の引数をサポートしています。
| 引数 | 必須 | 説明 | 例 |
|---|---|---|---|
name | はい | インスタンス名。リージョン内で一意である必要があります。ランダムなサフィックスを追加すると、ロールバック時の名前衝突を防ぐことができます。 | tf-example-12345 |
description | いいえ | インスタンスの説明。 | tf-example |
accessed_by | いいえ | インスタンスへのアクセスを許可するネットワークタイプ。有効な値: Any、Vpc、ConsoleOrVpc。 | Vpc |
tags | いいえ | インスタンスに割り当てるタグのマップ。 | { Created = "TF" } |
手順
ステップ 1: 構成の記述
作業ディレクトリと main.tf という名前のファイルを作成します。次の構成を追加します。
variable "name" {
default = "tf-example"
}
variable "region" {
default = "cn-hangzhou"
}
provider "alicloud" {
region = var.region
}
resource "random_integer" "default" {
min = 10000
max = 99999
}
# 名前の一意性を確保するため、ランダムなサフィックスを付けて Tablestore インスタンスを作成します
resource "alicloud_ots_instance" "default" {
name = "${var.name}-${random_integer.default.result}"
description = var.name
accessed_by = "Vpc"
tags = {
Created = "TF"
For = "Building table"
}
}random_integer リソースは、インスタンス名にランダムなサフィックスを追加します。Tablestore インスタンス名はリージョン内で一意である必要があり、削除されたインスタンスが完全に解放されるまでに時間がかかるため、インスタンスを破棄して再作成する必要がある場合に名前衝突を防ぎます。
ステップ 2: Terraform の初期化
必要なプロバイダープラグインをダウンロードするには、次のコマンドを実行します。
terraform init予想される出力:
Terraform has been successfully initialized!
You may now begin working with Terraform. Try running "terraform plan" to see
any changes that are required for your infrastructure. All Terraform commands
should now work.
If you ever set or change modules or backend configuration for Terraform,
rerun this command to reinitialize your working directory. If you forget, other
commands will detect it and remind you to do so if necessary.ステップ 3: 構成の適用
インスタンスを作成するには、次のコマンドを実行します。
terraform applyプロンプトが表示されたら、yes と入力し、[Enter] を押して確認します。予想される出力:
You can apply this plan to save these new output values to the Terraform state, without changing any real infrastructure.
Do you want to perform these actions?
Terraform will perform the actions described above.
Only 'yes' will be accepted to approve.
Enter a value: yes
Apply complete! Resources: 2 added, 0 changed, 0 destroyed.ステップ 4: 結果の確認
次のいずれかの方法を使用して、インスタンスが作成されたことを確認します。
オプション A: terraform show の実行
terraform show出力には、インスタンス名、説明、ネットワークアクセスタイプなどのインスタンスの詳細が表示されます。
オプション B: Tablestore コンソールの確認
Tablestore コンソールにログインします。[すべてのインスタンス] ページで、新しいインスタンスがリストに表示されていることを確認します。
クリーンアップ
この構成で管理されているインスタンスと、それに関連付けられたすべてのリソースを削除するには、次のコマンドを実行します。
terraform destroyプロンプトが表示されたら、yes と入力し、Enter キーを押して確認します。 想定される出力は次のとおりです。
Plan: 0 to add, 0 to change, 2 to destroy.
Do you really want to destroy all resources?
Terraform will destroy all your managed infrastructure, as shown above.
There is no undo. Only 'yes' will be accepted to confirm.
Enter a value: yes
...
Destroy complete! Resources: 2 destroyed.terraform destroy およびその他のコマンドの詳細については、「一般的なコマンド」をご参照ください。
その他の例
Alibaba Cloud サービスの Terraform に関するその他の例については、landing-with-terraform quickstarts リポジトリをご参照ください。
よくある質問
マルチサービスのワークフローにおける名前の衝突を回避する方法
Tablestore のインスタンス名は、リージョン内で一意である必要があります。また、インスタンスを削除しても、その名前はすぐには解放されません。Tablestore インスタンスを作成した後にワークフローがロールバックした場合、前のインスタンスがまだ削除処理中である可能性があるため、同じインスタンス名で再実行すると失敗します。
各インスタンス名にランダムなサフィックスまたは自動増分 ID を追加して、実行ごとに一意の名前が生成されるようにしてください。本トピックのサンプルコードでは、random_integer リソースを使用してこれを実現しています。