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

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

最終更新日:Jan 16, 2025

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

開発方法

使い慣れた開発方法を使用して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
      }