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

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

最終更新日:Apr 30, 2026

Terraform は、リソースの自動オーケストレーションを行うオープンソースツールです。Terraform は、Resource Orchestration Service (ROS) でマネージドサービスとして利用できます。本トピックで説明する開発方法および推奨事項は、ROS で管理される Terraform の関連概念に精通しており、Terraform コードを開発して ROS で使用したいユーザーを対象としています。

開発方法

ご自身が慣れている開発方法を使用して Terraform コードを作成・テストすることを推奨します。以下のいずれかの開発方法をご利用いただけます。

開発推奨事項

  • .tf ファイル内に Alibaba Cloud プロバイダー (alicloud) を宣言しないでください。

    ROS は、ご利用の Alibaba Cloud アカウントのテンポラリ AccessKey ペアまたはセキュリティトークンサービス (STS) 認証情報とスタックリージョンを使用するデフォルトプロバイダー alicloud を提供します。ROS のデフォルトプロバイダーには、以下のメリットがあります。

    • 開発が容易になり、セキュリティが向上し、AccessKey ペア漏洩のリスクが低減されます。

    • リソースとスタックが同一アカウントおよび同一リージョンに属するため、集中管理および統合が可能になります。

    • リソースとスタックが同一アカウントおよび同一リージョンに属することで、価格照会、システムタグ、カスタムスタックタグの伝播、スタックリソースグループの伝播、リスク検出などの機能が強化されます。

      説明
      • スタックおよびスタックグループが異なるアカウントおよびリージョンに属する場合、特定のシナリオにおいて価格照会、システムタグ、カスタムスタックタグの伝播、およびリスク検出がサポートされます。

      • スタックおよびスタックグループが異なるリージョンに属する場合、特定のシナリオにおいてスタックリソースグループの伝播がサポートされます。

  • オンプレミスコードは、ファイル名の末尾に .debug.tf を付けて保存してください。

    Terraform コードが ROS で管理されている場合、ROS はファイル名の末尾が .debug.tf であるファイルを無視し、Terraform はこれらのファイルをオーケストレーションしません。一方、オンプレミス環境で Terraform コードをテストする際には、Terraform がこれらのファイルをオーケストレーションします。たとえば、alicloud プロバイダーを構成するために provider.debug.tf という名前のファイルを作成したとします。このファイルをオンプレミス環境でコード開発に使用すると、ファイル内の構成が有効になり、リソースは中国 (香港) リージョンに作成されます。ただし、このファイルを 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 のバージョンサポート」のプロバイダーバージョン列をご参照ください。

  • Aliyun::Terraform-v1.0 以降を使用してください。

    Aliyun::Terraform-v0.12 および Aliyun::Terraform-v0.15 は互換性維持目的でのみ使用されており、対応するプロバイダーバージョンおよび機能は更新されません。

  • .tfvars ファイルではなく ROS パラメーターを使用して変数値を渡してください。

    ROS パラメーターには、以下のメリットがあります。

    • テンプレートの修正回数を削減できます。ほとんどの場合、パラメーター値を変更するだけで済みます。

    • 変数と一対一のマッピングを持ちます。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 を使用してコンソールでのパラメーターおよび変数の表示を制御してください。

    • パラメーターのグループ化:詳細については、「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 を使用して、値の妥当性を自動的にチェックし、ROS パラメーターの有効な値を指定できます。詳細については、「AssociationProperty および AssociationPropertyMetadata」および「Resource Orchestration Service コンソールでのパラメーター設定の動的選択」をご参照ください。

    • 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
      }