パラメーター制約クエリ機能を使用して、テンプレートで定義されているパラメーターの値を取得できます。
背景情報
AssociationProperty および AssociationPropertyMetadata を使用してパラメーターをフィルタリングする場合、フィルタリングされたパラメーターは特定のシナリオで要件を満たさない場合があります。
たとえば、ZoneId パラメーターは複数の Alibaba Cloud サービスでサポートされていますが、有効な値はサービスによって異なります。 この場合、パラメーター制約クエリを実行して、テンプレートで定義されている ZoneId パラメーターの値を取得できます。
サポートされているプロパティ
リソースタイプのプロパティが Ref 関数を使用してパラメーターによって参照されている場合、GetTemplateParameterConstraints 操作を呼び出して、プロパティ値を取得できます。次の表に、パラメーター制約クエリ機能をサポートするすべてのプロパティと、対応するリソースタイプを示します。
GetFeatureDetails 操作を呼び出して、プロパティがパラメーター制約クエリ機能をサポートするリソースタイプを取得できます。
パラメーター制約をクエリするテンプレートには、Parameters セクションが含まれている必要があります。
リソースタイプ | プロパティ | 説明 |
ALIYUN::ADB::DBCluster |
| なし。 |
ALIYUN::ALB::LoadBalancer |
| なし。 |
ALIYUN::AMQP::Instance |
| なし。 |
ALIYUN::ApiGateway::Instance |
| なし。 |
ALIYUN::CDDC::DedicatedHost |
| なし。 |
ALIYUN::CEN::CenBandwidthPackage |
| なし。 |
ALIYUN::ClickHouse::DBCluster |
| なし。 |
ALIYUN::CloudPhone::InstanceGroup |
| なし。 |
ALIYUN::CS::AnyCluster |
| なし。 |
ALIYUN::CS::ClusterNodePool |
| なし。 |
ALIYUN::CS::KubernetesCluster |
| なし。 |
ALIYUN::CS::ManagedEdgeKubernetesCluster |
| なし。 |
ALIYUN::CS::ManagedKubernetesCluster |
| なし。 |
ALIYUN::CS::ServerlessKubernetesCluster |
| なし。 |
ALIYUN::DRDS::DrdsInstance |
| なし。 |
ALIYUN::DTS::SubscriptionInstance |
| なし。 |
ALIYUN::DTS::SynchronizationJob |
| なし。 |
ALIYUN::ECD::Desktops |
| なし。 |
ALIYUN::ECS::DedicatedHost |
| なし。 |
ALIYUN::ECS::Disk |
| なし。 |
ALIYUN::ECS::Instance |
| なし。 |
ALIYUN::ECS::InstanceGroup |
| なし。 |
ALIYUN::ECS::InstanceGroupClone |
| なし。 |
ALIYUN::ECS::PrepayInstance |
| なし。 |
ALIYUN::ECS::PrepayInstanceGroupClone |
| なし。 |
ALIYUN::ECS::VSwitch |
| なし。 |
ALIYUN::EHPC::Cluster |
| なし。 |
ALIYUN::ElasticSearch::Instance |
| ゾーン別にのみ仕様をクエリできます。 |
ALIYUN::EMR::Cluster |
| なし。 |
ALIYUN::Flink::Instance |
| なし。 |
ALIYUN::GA::Accelerator |
| なし。 |
ALIYUN::GA::BandwidthPackage |
| なし。 |
ALIYUN::GPDB::DBInstance |
| なし。 |
ALIYUN::GPDB::ElasticDBInstance |
| なし。 |
ALIYUN::GWS::Instance |
| なし。 |
ALIYUN::MONGODB::Instance |
| なし。 |
ALIYUN::MONGODB::PrepayInstance |
| なし。 |
ALIYUN::MONGODB::ServerlessInstance |
| なし。 |
ALIYUN::MONGODB::ShardingInstance |
| なし。 |
ALIYUN::NAS::FileSystem |
| なし。 |
ALIYUN::POLARDB::DBCluster |
| なし。 |
ALIYUN::PrivateLink::VpcEndpointService |
| なし。 |
ALIYUN::RDS::DBInstance |
| 説明
|
ALIYUN::RDS::DBInstanceClone |
| 説明
|
ALIYUN::RDS::PrepayDBInstance |
| 説明
|
ALIYUN::RDS::ReadOnlyDBInstance |
| 説明
|
ALIYUN::REDIS::Instance |
| なし。 |
ALIYUN::REDIS::PrepayInstance |
| なし。 |
ALIYUN::SLB::AnyTunnel |
| なし。 |
ALIYUN::SLB::LoadBalancer |
| なし。 |
ALIYUN::TSDB::HiTSDBInstance |
| なし。 |
ALIYUN::VPC::EIP |
| なし。 |
ALIYUN::VPC::EIPPro |
| なし。 |
ALIYUN::VPC::NatGateway |
| なし。 |
ALIYUN::VPC::RouterInterface |
| なし。 |
パラメーター間の依存関係
Resource Orchestration Service (ROS) でテンプレートを使用して Elastic Compute Service (ECS) リソースを作成する場合は、ZoneInfo や InstanceType などのパラメーターを指定する必要があります。
サポートされている ECS インスタンスタイプは、ゾーンによって異なります。そのため、InstanceType パラメーターの特定の値は、ZoneInfo パラメーターを指定した後に使用できなくなる場合があります。
InstanceType パラメーターの特定の値のみを使用する場合は、Metadata セクションを使用して、InstanceType パラメーターと ZoneInfo パラメーター間の依存関係を構成できます。
詳細については、「Metadata」をご参照ください。
ROSTemplateFormatVersion: '2015-09-01'
Parameters:
ZoneInfo:
Type: String
InstanceType:
Type: String
Resources:
ECS:
Type: ALIYUN::ECS::Instance
Properties:
ZoneId:
Ref: ZoneInfo
InstanceType:
Ref: InstanceType
ImageId: ubuntu
Metadata:
ALIYUN::ROS::Interface:
ParameterGroups:
- Parameters:
- InstanceType
- ZoneInfoTerraform テンプレートのパラメーター制約クエリを手動で構成する
Metadata セクションまたは .metadata ファイルの ALIYUN::ROS::Interface に ResourcesForParameterConstraints を追加して、パラメーターの制約を構成できます。
パラメーター制約に関連するリソースを定義し、リソースプロパティを指定する必要があります。 ResourcesForParameterConstraints の構文の詳細については、「Resources」をご参照ください。
テンプレートで定義されている Mappings、Conditions、および Rules セクションの構成は、パラメーター制約クエリ中に自動的に有効になります。 詳細については、「(オプション) Mappings」、「(オプション) Conditions」、および「(オプション) Rules」をご参照ください。
ROSTemplateFormatVersion: '2015-09-01'
Transform: Aliyun::Terraform-v1.1
Workspace:
.metadata: |-
{
"ALIYUN::ROS::Interface": {
"ResourcesForParameterConstraints": {
"instance": {
"Type": "ALIYUN::ECS::Instance",
"Properties": {
"ImageId": {
"Ref": "image_id"
},
"InstanceType": {
"Ref": "instance_type"
},
"ZoneId": {
"Ref": "zone_id"
}
}
}
},
"Hidden": [
"image_id"
]
}
}
main.tf: |-
variable "image_id" {
type = string
default = "ubuntu_18_04_64_20G_alibase_2019****.vhd"
}
variable "instance_type" {
type = string
}
variable "zone_id" {
type = string
}
resource "alicloud_vpc" "vpc" {
cidr_block = "172.16.X.X/16"
}
resource "alicloud_security_group" "group" {
vpc_id = alicloud_vpc.vpc.id
}
resource "alicloud_vswitch" "vswitch" {
vpc_id = alicloud_vpc.vpc.id
cidr_block = "172.16.X.X/24"
zone_id = var.zone_id
}
resource "alicloud_instance" "instance" {
availability_zone = var.zone_id
security_groups = [alicloud_security_group.group.id]
instance_type = var.instance_type
image_id = var.image_id
vswitch_id = alicloud_vswitch.vswitch.id
}上記の Terraform テンプレートでは、4 つのリソースが定義されています。 zone_id パラメーターと instance_type パラメーターに制約が構成され、パラメーターは alicloud_instance に関連付けられています。
ResourcesForParameterConstraints では、alicloud_instance に対応する ROS の ALIYUN::ECS::Instance リソースタイプのみが定義されています。 リソースタイプは、image_id、instance_type、および zone_id パラメーターに関連付けられており、これらのパラメーターの制約を構成します。 この例では、image_id パラメーターは非表示になっています。