Resource Orchestration Service (ROS) は、マネージド Terraform 実行を提供します。本トピックでは、ROS における Terraform コードの記述方法とベストプラクティスについて説明します。ROS における Terraform の概念に既に精通しているユーザーを対象としています。
開発方法
ワークフローに最適な開発方法を選択してください。
オンプレミス環境を使用します。
Terraform オンラインデバッグツールを使用します。このオプションは Alibaba Cloud リソースのみをサポートします。
ROS コンソールで Terraform スタックを作成し、必要に応じてスタックを作成または更新します。詳細については、「Terraform スタックの作成」、「スタックの作成を続行」、および「スタックの更新」をご参照ください。
開発に関する推奨事項
.tf ファイル内で alicloud プロバイダーを宣言しないでください。
ROS は、一時的な AccessKey ペアまたは Security Token Service (STS) 認証情報と、現在の Alibaba Cloud アカウントのスタックリージョンを使用するデフォルトの alicloud プロバイダーを提供します。デフォルトのプロバイダーを使用することで、以下のメリットがあります。
開発を簡素化し、セキュリティを向上させ、AccessKey ペアの漏洩リスクを軽減します。
リソースとスタックを同じアカウントとリージョンに配置し、一元管理と統合を実現します。
料金照会、システムタグ、カスタムスタックタグの伝播、スタックリソースグループの伝播、リスク検出など、リソースとスタックが同じアカウントとリージョンを共有する必要がある機能を強化します。
説明スタックとスタックリソースグループが異なるアカウントとリージョンに属する場合、特定のシナリオでは、料金照会、システムタグ、カスタムスタックタグの伝播、およびリスク検出がサポートされます。
スタックとスタックリソースグループが異なるリージョンに属する場合、特定のシナリオでは、スタックリソースグループの伝播がサポートされます。
オンプレミスのコードは、名前が .debug.tf で終わるファイルに保存してください。
Terraform コードが ROS で実行される際、ROS は .debug.tf ファイルを無視し、オーケストレーションから除外します。オンプレミス環境では、Terraform はこれらのファイルを通常どおり処理します。たとえば、provider.debug.tf ファイルを作成して alicloud プロバイダーを構成します。オンプレミス環境でこのファイルを使用してコードを開発する場合、この構成が有効になり、中国 (香港) リージョンにリソースが作成されます。ROS でスタックを作成すると、このファイルは無視され、スタックのリージョンにリソースが作成されます。provider.debug.tf のサンプルコンテンツ:
variable "region" { type = string default = "cn-hongkong" } provider "alicloud" { region ="${var.region}" }プロバイダーのバージョンを固定してください。
ROS マネージド Terraform は、Aliyun::Terraform-v1.0 のリリース後、複数のプロバイダーバージョンをサポートしています。プロバイダーのバージョンを固定することで、アップストリームの更新による破壊的な変更を防ぎ、安定性を維持します。サンプルコード:
terraform { required_providers { alicloud = { source = "aliyun/alicloud" version = "1.140.0" } } }利用可能なプロバイダーバージョンについては、「ROS バージョンサポート」の Provider version 列をご参照ください。
Aliyun::Terraform-v1.0 以降を使用してください。
Aliyun::Terraform-v0.12 および Aliyun::Terraform-v0.15 は、互換性のためにのみ保守されています。これらのリリースのプロバイダーバージョンと機能は更新されません。
.tfvars ファイルの代わりに ROS パラメーターを使用して変数値を渡してください。
ROS パラメーターは、.tfvars ファイルと比較して以下の利点があります:
テンプレートの変更が少なくて済みます。ほとんどの場合、パラメーター値の更新で十分です。
変数との 1 対 1 のマッピングが ROS コンソールに表示されます。.tfvars ファイルでは、変数値が通知なく上書きされる可能性があり、実際の値とコンソールに表示される内容との間に不一致が生じることがあります。
詳細については、「(オプション) Parameters」をご参照ください。
擬似パラメーターを使用してスタック情報を取得してください。
詳細については、「(オプション) Parameters」をご参照ください。たとえば、.tf ファイルで ALIYUN__Region 変数を定義し、var.ALIYUN__Region で参照してスタックのリージョンを取得します。サンプルコード:
variable "ALIYUN__Region" { type = string default = "cn-hongkong" }変数を正確に定義してください。
ROS は Terraform 変数を ROS パラメーターに自動的に変換します。適切に定義された変数は、正確な変換結果を生成します。詳細については、「(オプション) Parameters」をご参照ください。
各変数には必ず type パラメーターを指定してください。型を指定しない場合、ROS は変数を文字列として扱う場合があり、そのまま Terraform に渡すため、オーケストレーション中に型エラーが発生する可能性があります。
パスワードなどの機密データを含む変数の場合は、
sensitive = trueを設定してください。variable "password" { type = string sensitive = true }
Metadata を使用して、コンソールでのパラメーターの表示方法を制御してください。
パラメーターのグループ化:詳細については、「Metadata」および「Metadata を使用したパラメーターのグループ化」をご参照ください。
パラメーターの非表示:Metadata.ALIYUN::ROS::Interface.Hidden を使用して、コンソールから非表示にするパラメーターを指定します。
ROSTemplateFormatVersion: '2015-09-01' Description: Creates a simple oss bucket Parameters: BucketName: Type: String Label: Bucket Name Description: en: Bucket name Default: bucketName1 Metadata: ALIYUN::ROS::Interface: Hidden: - BucketName Workspace: ...パラメーター制約のクエリ:.metadata ファイルで ALIYUN::ROS::Interface の ResourcesForParameterConstraints を使用して、パラメーターの制約を構成します。詳細については、「Terraform テンプレートのパラメーター制約クエリの手動構成」をご参照ください。
コンソールでのパラメーター入力モードを制御してください。
ROS パラメーター:AssociationProperty および AssociationPropertyMetadata を使用して、値を自動的に検証し、有効なオプションを指定します。詳細については、「AssociationProperty および AssociationPropertyMetadata」および「Resource Orchestration Service コンソールでのパラメーター設定の動的選択」をご参照ください。
Terraform 変数:description パラメーターを使用して、Terraform 変数の AssociationProperty および AssociationPropertyMetadata を設定します。詳細については、「(オプション) Parameters」をご参照ください。サンプルコード:
variable "vpc_id" { type = string description = <<EOT { "AssociationProperty": "ALIYUN::ECS::VPC::VPCId", "Description": { "en": "Please search the ID starts with (vpc-xxx)from console-Virtual Private Cloud", }, "Label": { "en": "Existing VPC ID", } } EOT }