Terraform テンプレートは、Terraform が ROS で管理された後に Resource Orchestration Service(ROS)でサポートされます。 Terraform テンプレートを使用すると、Alibaba Cloud、Amazon Web Services(AWS)、および Microsoft Azure リソースをオーケストレートできます。 Terraform テンプレートでは、リソースとパラメータを定義し、リソース間の依存関係を設定できます。
構造
Terraform テンプレートは 10 のセクションで構成されています。 次のサンプルコードは、テンプレートの構造を示しています。
Terraform テンプレートの構造の詳細については、「スタイルガイド」をご参照ください。
ROSTemplateFormatVersion: '2015-09-01'
Transform: 'Aliyun::Terraform-v1.5'
Parameters:
subnet_mask:
Type: Number
Description:
en: Subnet mask of VSwitch
Label:
en: Subnet mask
MinValue: 13
MaxValue: 31
Default: 21
Outputs:
vpc_id:
Value: null
Description:
en: VPC ID
Workspace:
main.tf: |-
variable "zone_id" {
type = string
description = <<EOT
{
"AssociationProperty": "ALIYUN::ECS::Instance::ZoneId",
"Description": {
"en": "Zone of VSwitch",
},
"Label": {
"en": "Zone",
}
}
EOT
}
variable "subnet_mask" {
type = number
}
module "my_vpc" {
source = "./modules/vpc"
}
resource "alicloud_vswitch" "vsw" {
vpc_id = "${module.my_vpc.vpc_id}"
cidr_block = "172.16.0.0/${var.subnet_mask}"
availability_zone = var.zone_id
}
output "vsw_id" {
value = "${alicloud_vswitch.vsw.id}"
description = <<EOT
{
"Description": {
"en": "VSwitch ID",
}
}
EOT
}
modules/vpc/main.tf: |-
variable "vpc_name" {
type = string
default = "tf_test"
description = "VPC name"
}
resource "alicloud_vpc" "vpc" {
name = var.vpc_name
cidr_block = "172.16.0.0/12"
}
output "vpc_id" {
value = "${alicloud_vpc.vpc.id}"
}(必須) ROSTemplateFormatVersion
ROS Terraform テンプレートのフォーマットバージョン。 値を 2015-09-01 に設定します。
(必須) Transform
ROS と互換性のある Terraform バージョン。有効な値:
Aliyun::Terraform-v0.12: Terraform バージョン 0.12
Aliyun::Terraform-v0.15: Terraform バージョン 0.15
Aliyun::Terraform-v1.0: Terraform バージョン 1.0
Aliyun::Terraform-v1.1: Terraform バージョン 1.1
Aliyun::Terraform-v1.2: Terraform バージョン 1.2
Aliyun::Terraform-v1.3: Terraform バージョン 1.3
Aliyun::Terraform-v1.4: Terraform バージョン 1.4
Aliyun::Terraform-v1.5: Terraform バージョン 1.5
Aliyun::OpenTofu-v1.6: OpenTofu バージョン 1.6
Aliyun::OpenTofu-v1.7: OpenTofu バージョン 1.7
Aliyun::OpenTofu-v1.8: OpenTofu バージョン 1.8
HashiCorp は、Mozilla Public License(MPL)2.0 からBusiness Source License(BSL)への移行を発表しました。 ROS がサポートする最新の Terraform バージョンは Terraform バージョン 1.5.7 で、これは MPL 2.0 のもとでリリースされた最新の Terraform です。
Transform セクションを設定する前に、以下の点に注意してください。
Terraform の新しいメジャーバージョンまたはマイナーバージョンがリリースされると、ROS は新しいバージョン番号を Transform パラメータの有効な値として含めます。
Terraform のパッチバージョンの変更は、Transform パラメータの有効な値には影響しません。
スタックの作成を続行する場合、またはスタックを更新する場合は、Transform パラメータの値を変更できます。 Transform パラメータの元の値と新しい値は、次の表の条件を満たしている必要があります。 Terraform バージョン 1.x は相互に互換性があり、互いに置き換えて使用できます。
元の値
新しい値
Aliyun::Terraform-v1.0
Aliyun::Terraform-v1.1 または Aliyun::Terraform-v1.2
Aliyun::Terraform-v1.1
Aliyun::Terraform-v1.0 または Aliyun::Terraform-v1.2
Aliyun::Terraform-v1.2
Aliyun::Terraform-v1.0 または Aliyun::Terraform-v1.1
説明GetFeatureDetails 操作の UpdateAllowedTransforms パラメータを使用して、ROS で更新できる Transform バージョンをクエリできます。
(必須) Workspace
Terraform ワークスペース内のすべてのモジュールのキーと値のペア。 キーと値のペアでは、キーはモジュールファイルのパス、値はモジュールファイルの内容です。
Workspace セクションを設定する前に、以下の点に注意してください。
Workspace セクションには最大 50 個のファイルを含めることができ、空にすることはできません。
ファイルパス
ファイルパスは最大 1,024 文字です。 パス内のフォルダまたはファイルの名前は、最大 255 文字です。
ファイルパスは相対パスである必要があり、スラッシュ (/) で始めることも、
.json、.tfstate、または.hclで終わることもできません。 .tf ファイルの名前が .debug.tf で終わる場合、ROS はそのファイルを無視し、Terraform を使用してファイルをオーケストレートしません。ファイルパスには、文字、数字、および次の特殊文字を含めることができます。
! " # $ % & ' ( ) * + , - . / : ; <=> ? @ [\] ^ _ ` {|} ~ファイルパスの最大深度は 5 です。 たとえば、main.tf の深度は 1、modules/vpc/main.tf の深度は 3 です。
ファイルパスのデリミタはスラッシュ (/) で、2 つのスラッシュの間の値を空にすることも、
.または..に設定することもできません。
ファイルの内容
プロビジョナー、バックエンド、およびTerraform Cloud 機能はサポートされていません。
モジュールソース機能はサポートされています。 Alibaba Cloud が提供するモジュールまたはローカルモジュールのみを使用できます。 ローカルモジュールを使用する場合、Workspace セクションのデータのみをモジュールソースとして相対的に参照できます。 ファイルの内容はピリオドとスラッシュ (
./) で始まる必要があり、ドル記号 ($) またはパーセント記号 (%) を含めることはできません。 ファイルパスのデリミタはスラッシュ (/) で、2 つのスラッシュの間の値を空にすることも、.または..に設定することもできません。プロバイダー機能はサポートされています。
次のサンプルコードの変数を、使用する実際の情報に置き換え、山かっこ (< >) を削除する必要があります。 次のセクションでは、各変数の有効な値を示します。
<provider>: alicloud、aws、azurerm、random、template、time、fortios、fortimanager、helm、kubernetes。
<host>: registry.terraform.io。 この変数を空のままにすることもできます。
<namespace>: hashicorp、aliyun、fortinetdev。 この変数を空のままにすることもできます。
terraform { required_providers { <provider> = { source = "<host>/<namespace>/<provider>" ... } } } provider "<provider>" { ... }プロバイダー機能の特定の構成項目は制限または禁止されています。 次のセクションでは、構成項目を示します。
制限付き構成項目:
alicloud: shared_credentials_file
aws: assume_role_with_web_identity.web_identity_token_file および custom_ca_bundle
azurerm: client_id_file_path、client_certificate_path、client_secret_file_path、oidc_token_file_path
fortios: cabundlefile および fmg_cabundlefile
fortimanager: cabundlefile
helm: kubernetes.config_path
kubernetes: config_path
説明構成項目には、次のルールが適用されます。
値は単一行の文字列である必要があります。 たとえば、値を変数への参照にすることはできません。
スラッシュ (/) で変数を区切る場合は、各変数に文字、数字、
ハイフン (-)、アンダースコア (_)、ピリオド (.)のみを含めることができるようにしてください。 変数を空にすることも、.または..に設定することもできません。スラッシュ (/) で変数を区切った後、最初の変数が上記のルールに準拠していない場合は、最初の変数が
.、${path.module}、${path.root}、${path.cwd}、または${terraform.workspace}であることを確認してください。
禁止されている構成項目:
aws: shared_config_files および shared_credentials_files
helm: plugins_path、registry_config_path、repository_config_path、repository_cache、kubernetes.config_paths、kubernetes.exec
kubernetes: config_paths および exec
プロバイダー機能の
リソースとデータソースはサポートされています。 ただし、terraform_remote_stateデータソース、template.template_fileデータソース、およびtemplate.template_dirリソースはサポートされていません。リソースまたはデータソースの特定のプロパティは制限されています。 次のセクションでは、プロパティを示します。alicloud_file_crc64_checksum: filename
helm_template: repository_key_file、repository_cert_file、repository_ca_file
説明構成項目には、次のルールが適用されます。
値は単一行の文字列である必要があります。 たとえば、値を変数への参照にすることはできません。
スラッシュ (/) で変数を区切る場合は、各変数に文字、数字、
ハイフン (-)、アンダースコア (_)、ピリオド (.)のみを含めることができるようにしてください。 変数を空にすることも、.または..に設定することもできません。スラッシュ (/) で変数を区切った後、最初の変数が上記のルールに準拠していない場合は、最初の変数が
.、${path.module}、${path.root}、${path.cwd}、または${terraform.workspace}であることを確認してください。
templatefile 関数はサポートされていません。
file、fileexists、fileset、および filebase64 関数における path パラメーターは、次のルールに従う必要があります。
このパラメーターは必須です。
値は単一行の文字列である必要があります。たとえば、変数への参照は使用できません。
変数をスラッシュ (/) で区切る場合は、最初の変数が
${path.module}、${path.root}、${path.cwd}、または${terraform.workspace}であることを確認してください。変数をスラッシュ (/) で区切る場合、最初の変数の後に続く各変数には、英字、数字、
ハイフン (-), アンダースコア (_), およびピリオド (.)のみを含めることができ、空にすることも、.または..に設定することもできません。
(オプション) Description
Terraform テンプレートの説明。
(オプション) Parameters
Terraform テンプレートのパラメータ。 Terraform テンプレートのパラメータは、ROS テンプレートのパラメータと同じ構文に従います。 詳細については、概要をご参照ください。
Parameters セクションを設定する前に、以下の点に注意してください。
Parameters セクションのパラメータは .tf ファイルで定義する必要があります。 .tf ファイルのパラメータを Parameters セクションで定義する必要はありません。
.tf ファイルで定義されているパラメータが Parameters セクションで定義されていない場合、ROS は .tf ファイルからパラメータを自動的に抽出し、Parameters セクションに定義を生成します。
.tf ファイルで定義されているパラメータが Parameters セクションで既に定義されている場合、ROS は .tf ファイルからパラメータを抽出しません。Parameters セクションの定義を使用します。
Parameters セクションのパラメータの型は、.tf ファイルの関連パラメータの型と一致している必要があります。
たとえば、Parameters セクションのパラメータ型が A、.tf ファイルの関連パラメータ型が B であるとします。次の表では、パラメータ型 A とパラメータ型 B の間の制約について説明します。
表 1: Parameters セクションと .tf ファイルのパラメータ型の間の制約
.tf ファイルのパラメータ型 B
Parameters セクションのパラメータ型 A
any または空
.tf ファイルのデフォルト値の型が C の場合の A の有効な値:
C が定義されていないか C が null の場合の A の有効な値:
String、Number、CommaDelimitedList、Json、Boolean、ALIYUN::OOS::Parameter::Value、ALIYUN::OOS::SecretParameter::Value。C が文字列の場合の A の有効な値:
String、ALIYUN::OOS::Parameter::Value、ALIYUN::OOS::SecretParameter::Value。 .tf ファイルのデフォルト値を数値に変換できる場合は、A の値としてNumberもサポートされます。C が数値の場合の A の有効な値:
Number、String、ALIYUN::OOS::Parameter::Value、ALIYUN::OOS::SecretParameter::Value。C がブール値の場合の A の有効な値:
Boolean、String、ALIYUN::OOS::Parameter::Value、ALIYUN::OOS::SecretParameter::Value。C がリスト (文字列) の場合の A の有効な値:
Json、CommaDelimitedList、String、ALIYUN::OOS::Parameter::Value、ALIYUN::OOS::SecretParameter::Value。C が上記のいずれの型でもない場合の A の有効な値:
Json、String、ALIYUN::OOS::Parameter::Value、ALIYUN::OOS::SecretParameter::Value。
string
String、ALIYUN::OOS::Parameter::Value、またはALIYUN::OOS::SecretParameter::Value。number
Number、String、ALIYUN::OOS::Parameter::Value、またはALIYUN::OOS::SecretParameter::Value。bool
Boolean、String、ALIYUN::OOS::Parameter::Value、またはALIYUN::OOS::SecretParameter::Value。list (string)
Json、CommaDelimitedList、String、ALIYUN::OOS::Parameter::Value、またはALIYUN::OOS::SecretParameter::Value。その他の型
Json、String、ALIYUN::OOS::Parameter::Value、またはALIYUN::OOS::SecretParameter::Value。
ビジネス要件に基づいて、Terraform テンプレートのパラメータを抽出できます。 .tf ファイルで定義されているパラメータが Parameters セクションで定義されていない場合、ROS は .tf ファイルからパラメータを自動的に抽出し、Parameters セクションに定義を生成します。
パラメータ名: パラメータが抽出された後、パラメータの名前は変更されません。 組み込みの疑似パラメータを除き、パラメータの名前は
ALIYUN__で始めることはできません。パラメータ渡しファイル: パラメータ値を渡すには、.tfvars ファイルではなく ROS パラメータを使用することをお勧めします。 .tfvars ファイルは、Terraform の変数定義ファイルです。 .tfvars ファイルを使用する場合は、.auto.tfvars ファイルまたは .terraform.tfvars ファイルのみを使用できます。 .tfvars ファイルと ROS パラメータの優先順位に注意する必要があります。 次のセクションでは、優先順位について降順で説明します。
.auto.tfvars ファイル。
複数の .auto.tfvars ファイルを使用しないことをお勧めします。 複数の .auto.tfvars ファイルを使用する場合は、ファイル名に基づいてファイルを逆アルファベット順にソートします。 最初のファイルの優先順位が最も高くなります。 たとえば、b.auto.tfvars という名前のファイルは、a.auto.tfvars という名前のファイルよりも優先順位が高くなります。
ROS パラメータ。
terraform.tfvars ファイル。
疑似パラメータ: ROS 疑似パラメータを使用するために、.tf ファイルで次のパラメータを定義できます。 詳細については、疑似パラメータをご参照ください。
.tf ファイルのパラメータ名
.tf ファイルのパラメータ型
ROS の疑似パラメータ名
説明
ALIYUN__StackId
string
ALIYUN::StackId
スタック ID。
ALIYUN__StackName
string
ALIYUN::StackName
スタック名。
ALIYUN__TenantId
string
ALIYUN::TenantId
Alibaba Cloud アカウントの ID。
ALIYUN__Region
string
ALIYUN::Region
スタックが存在するリージョン。
ALIYUN__AccountId
string
ALIYUN::AccountId
エグゼキュータアカウントの ID。
ALIYUN__NoValue
string
ALIYUN::NoValue
ALIYUN::NoValue が設定されているパラメータの値は null です。
ALIYUN__ResourceGroupId
string
なし
スタックが属するリソースグループ。
ALIYUN__Tags
map(string)
なし
スタックに追加されるタグ。 Key はタグキーを指定し、Value はタグ値を指定します。
抽出ルール: 次の表に抽出ルールを示します。
.tf ファイルの元のパラメータ
Parameters セクションで抽出されたパラメータとパラメータの説明
type
Type。 次のルールが適用されます。
type パラメータの値が any であるか、type パラメータが空のままになっている場合、ROS は type パラメータのデフォルト値に基づいて Type パラメータを定義します。
type パラメータにデフォルト値が定義されていないか、type パラメータのデフォルト値が null の場合、ROS は Type パラメータを
Stringとして定義します。type パラメータのデフォルト値が文字列の場合、ROS は Type パラメータを
Stringとして定義します。type パラメータのデフォルト値が数値の場合、ROS は Type パラメータを
Numberとして定義します。type パラメータのデフォルト値がブール値の場合、ROS は Type パラメータを
Booleanとして定義します。type パラメータのデフォルト値が上記のいずれの型でもない場合、ROS は Type パラメータを
Jsonとして定義します。
重要デフォルトの型 (文字列) が予期した型でない場合は、type パラメータを定義することをお勧めします。
type パラメータが空のままになっていて、type パラメータのデフォルト値が数値の場合、Terraform は数値を文字列として識別し、ROS は Type パラメータを String として定義します。
variable "i" { default = 1 // Terraform はデフォルト値 1 を文字列 "1" として識別し、ROS は Type パラメータを String として定義します。 } variable "f" { default = 1.1 // Terraform はデフォルト値 1.1 を文字列 "1.1" として識別し、ROS は Type パラメータを String として定義します。 } variable "l" { default = [1.1] // Terraform はデフォルト値 [1.1] を文字列 ["1.1"] として識別し、ROS は Type パラメータを Json として定義します。 }
type パラメータの値が文字列の場合、ROS は Type パラメータを
Stringとして定義します。type パラメータの値が数値の場合、ROS は Type パラメータを
Numberとして定義します。type パラメータの値がブール値の場合、ROS は Type パラメータを
Booleanとして定義します。type パラメータの値が上記のいずれの型でもない場合、ROS は Type パラメータを
Jsonとして定義します。
default
Default。
sensitive
NoEcho。
description
description パラメータの値が
JSON文字列でない場合、ROS は Description パラメータを生成します。description パラメータの値が
JSON文字列の場合、値は ROS テンプレートの Parameters セクションと同じ構文に従う必要があります。 次のルールが適用されます。有効なパラメータのみがサポートされます。
NoEcho パラメータが定義されている場合、sensitive パラメータの値は無視されます。 NoEcho パラメータが空のままになっている場合、sensitive パラメータの値が使用されます。
Default パラメータが定義されている場合、default パラメータの値は無視されます。 Default パラメータが空のままになっている場合、default パラメータの値が使用されます。
Type パラメータが定義されている場合、Type パラメータの値は type パラメータの値と同じである必要があります。 詳細については、Parameters セクションと .tf ファイルのパラメータ型の間の制約をご参照ください。
抽出されたパラメータのサンプルコード:
Parameters: subnet_mask: Description: en: Subnet mask of VSwitch Label: en: Subnet mask MaxValue: 31 MinValue: 13 Default: 21 Type: Number zone_id: AssociationProperty: 'ALIYUN::ECS::Instance::ZoneId' Description: en: Zone of VSwitch Label: en: Zone Type: String vpc_name: Default: tf_test Description: VPC name Type: String
(オプション) Outputs
Terraform テンプレートの出力項目。 出力項目は、ROS テンプレートの出力項目と同じ構文に従います。
Outputs セクションを設定する前に、以下の点に注意してください。
Outputs セクションの出力項目は .tf ファイルで定義する必要があります。 .tf ファイルの出力項目を Outputs セクションで定義する必要はありません。
.tf ファイルで定義されている出力項目が Outputs セクションで定義されていない場合、ROS は .tf ファイルから出力項目を自動的に抽出し、Outputs セクションに定義を生成します。
.tf ファイルで定義されている出力項目が Outputs セクションで既に定義されている場合、ROS は .tf ファイルから出力項目を抽出しません。Outputs セクションの定義を使用します。
Condition パラメータは Outputs セクションではサポートされていません。
Terraform テンプレートの出力項目を返すには、Value パラメータを null に設定することをお勧めします。
ビジネス要件に基づいて、Terraform テンプレートの出力項目を抽出できます。 .tf ファイルで定義されている出力項目が Outputs セクションで定義されていない場合、ROS は .tf ファイルから出力項目を自動的に抽出し、Outputs セクションに定義を生成します。
抽出ルール: 次の表に抽出ルールを示します。
出力項目名: 出力項目の名前は変更されません。
description パラメータ:
description パラメータの値が
JSON文字列でない場合、ROS は Outputs セクションに Description パラメータを生成します。description パラメータの値が
JSON文字列の場合、値は ROS テンプレートの Outputs セクションと同じ構文に従う必要があります。 値が同じ構文に従っている場合、ROS は Outputs セクションに Description パラメータと Label パラメータを生成します。
抽出された出力項目のサンプルコード:
Outputs: vpc_id: Value: null Description: en: VPC ID vsw_id: Value: null Description: en: VSwitch ID
(オプション) Metadata
Terraform テンプレートのメタデータ。 詳細については、メタデータをご参照ください。
ROS コンソールでのみ Metadata セクションを使用する場合は、Workspace セクションに.metadata ファイルを追加できます。
(オプション) Mappings
Terraform テンプレートのマッピング。 詳細については、マッピングをご参照ください。
.mappings ファイルを Workspace セクションに追加し、ファイルの内容が有効な JSON 辞書である場合、ROS はファイルの内容を使用して Mappings セクションの構成を上書きします。
(オプション) Conditions
Terraform テンプレートの条件。 詳細については、条件をご参照ください。
.conditions ファイルを Workspace セクションに追加し、ファイルの内容が有効な JSON 辞書である場合、ROS はファイルの内容を使用して Conditions セクションの構成を上書きします。
(オプション) Rules
Terraform テンプレートのルール。 詳細については、ルールをご参照ください。
.rules ファイルを Workspace セクションに追加し、ファイルの内容が有効な JSON 辞書である場合、ROS はファイルの内容を使用して Rules セクションの構成を上書きします。