Terraformは、リソースオーケストレーションを自動化するオープンソースツールです。 Terraformは、Resource Orchestration Service(ROS)でマネージドサービスとして利用できます。 このトピックで説明する開発方法と推奨事項は、ROSで管理されるTerraformの関連概念に精通しており、Terraformコードを開発してROSで使用したいユーザーを対象としています。
開発方法
使い慣れた開発方法を使用してTerraformコードを記述およびテストすることをお勧めします。 次の開発方法のいずれかを使用できます。
オンプレミス環境を使用します。
Terraformオンラインデバッグツールを使用します。 この方法は、Alibaba Cloudリソースに対してのみ使用できます。
ROSコンソールでTerraformスタックを作成し、ビジネス要件に基づいてスタックの作成を続行するか、スタックを更新します。 詳細については、「Terraformスタックの作成」、「スタックの作成の続行」、および「スタックの更新」をご参照ください。
開発に関する推奨事項
.tfファイルでAlibaba Cloudプロバイダー(alicloud)を宣言しないでください。
ROSは、一時的なAccessKeyペアまたはSecurity Token Service(STS)クレデンシャルと現在のAlibaba Cloudアカウントのスタックリージョンを使用するデフォルトプロバイダーalicloudを提供します。 ROSのデフォルトプロバイダーには、次の利点があります。
開発が容易になり、セキュリティが向上し、AccessKeyペアの漏洩のリスクが軽減されます。
集中管理と統合のために、リソースとスタックが同じアカウントとリージョンに属するようにします。
価格照会、システムタグ、カスタムスタックタグの伝播、スタックリソースグループの伝播、およびリソースとスタックが同じアカウントとリージョンに属する場合のリスク検出などの機能が強化されます。
説明スタックとスタックグループが異なるアカウントとリージョンに属している場合、価格照会、システムタグ、カスタムスタックタグの伝播、およびリスク検出は特定のシナリオでサポートされます。
スタックとスタックグループが異なるリージョンに属している場合、スタックリソースグループの伝播は特定のシナリオでサポートされます。
オンプレミスコードを、名前が.debug.tfで終わるファイルに保存します。
TerraformコードがROSで管理されている場合、ROSは名前が.debug.tfで終わるファイルを無視し、Terraformはファイルをオーケストレーションしません。 Terraformコードがオンプレミス環境でテストされている場合、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" } } }プロバイダーのバージョンの詳細については、「サポートされているTerraformとプロバイダーのバージョン」の[プロバイダーバージョン]列をご参照ください。
Aliyun::Terraform-v1.0以降を使用します。
Aliyun::Terraform-v0.12およびAliyun::Terraform-v0.15は、互換性を維持するためだけに使用されます。 対応するプロバイダーのバージョンと機能は更新されなくなりました。
.tfvarsファイル以外のROSパラメーターを使用して変数値を渡します。
ROSパラメーターには、次の利点があります。
テンプレートの変更回数を減らします。 ほとんどの場合、パラメーター値を変更するだけで済みます。
変数と1対1のマッピングがあります。 ROSコンソールで、ROSパラメーターと変数の間のマッピングを表示できます。 .tfvarsファイルを使用すると、変数値が上書きされ、実際の値がコンソールに表示される値と異なる場合があります。
詳細については、「(オプション)パラメーター」をご参照ください。
疑似パラメーターを使用してスタック情報を取得します。
詳細については、「(オプション)パラメーター」をご参照ください。 たとえば、.tfファイルでALIYUN__Region変数を定義し、var.ALIYUN__Regionを使用してスタックのリージョンを取得できます。 サンプルコード:
variable "ALIYUN__Region" { type = string default = "cn-hongkong" }変数定義を絞り込みます。
ROSは、Terraform変数をROSパラメーターに自動的に変換します。 変数の定義を絞り込むことで、変換結果の精度を確保できます。 詳細については、「(オプション)パラメーター」をご参照ください。
変数にtypeパラメーターを指定しないと、ROSは変数を文字列として識別し、文字列をTerraformに渡す可能性があります。 Terraformが変数をオーケストレーションすると、変数型のエラーが発生する可能性があります。
パラメーターに機密情報が含まれている場合は、対応するパラメーター変数の "sensitive" を true に設定する必要があります。
variable "password" { // パスワード type = string sensitive = true }
メタデータを使用して、コンソールでのパラメーターと変数の表示を制御します。
パラメーターのグループ化:詳細については、「メタデータ」および「メタデータを使用してパラメーターをグループ化する」をご参照ください。
パラメーターの非表示: Metadata.ALIYUN::ROS::Interface.Hidden を使用して、非表示にするパラメーターを指定できます。
ROSTemplateFormatVersion: '2015-09-01' Description: シンプルな OSS バケットを作成します Parameters: BucketName: Type: String Label: バケット名 Description: en: Bucket name Default: bucketName1 Metadata: ALIYUN::ROS::Interface: Hidden: - BucketName Workspace: ...パラメーターの制約のクエリ:.metadataファイルのALIYUN::ROS::InterfaceのResourcesForParameterConstraintsを使用して、パラメーターの制約を構成できます。 詳細については、「Terraformテンプレートのパラメーター制約クエリのmanually構成」をご参照ください。
コンソールでのパラメーターと変数の入力モードを制御します。
ROSパラメーター:AssociationPropertyとAssociationPropertyMetadataを使用して、値の有効性を自動的にチェックし、ROSパラメーターに有効な値を指定できます。 詳細については、「AssociationPropertyとAssociationPropertyMetadata」および「ROSコンソールでオプション値に基づいてパラメーター構成を選択する」をご参照ください。
Terraform変数:descriptionパラメーターを使用して、Terraform変数のAssociationPropertyとAssociationPropertyMetadataを制御できます。 詳細については、「(オプション)パラメーター」をご参照ください。 サンプルコード:
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 }