すべてのプロダクト
Search
ドキュメントセンター

Resource Orchestration Service:Terraform コード開発の方法と推奨事項

最終更新日:Aug 28, 2026

Resource Orchestration Service (ROS) は、マネージド Terraform 実行を提供します。本トピックでは、ROS における Terraform コードの記述方法とベストプラクティスについて説明します。ROS における 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
      }