您可以通過參數約束查詢功能來查詢模板中定義參數的取值。
背景信息
通過AssociationProperty和AssociationPropertyMetadata可以篩選參數。在特定場景下,篩選出來的參數可能不符合需求。
例如:多個產品都支持ZoneId參數,而不同產品支持的ZoneId不同,此時您需要使用參數約束查詢功能,查詢模板中定義參數的取值。
支持查詢的參數
您可以調用GetTemplateParameterConstraints接口查詢參數取值,無需在模板中額外增加字段去查詢。
模板內容中必須包含參數信息,即模板結構中包含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 |
| 說明 ZoneId,DBInstanceStorageType,Category建議必填,否則會導致校驗不完全。 MultiAZ建議設置為false,否則會導致校驗不完全。 通過Metadata設置參數順序試,建議將Engine對應的參數放在其他RDS屬性對應的參數前方,否則會導致校驗不完全。 |
ALIYUN::RDS::PrepayDBInstance |
| 說明 ZoneId,DBInstanceStorageType,Category建議必填,否則會導致校驗不完全。 MultiAZ建議設置為false,否則會導致校驗不完全。 通過Metadata設置參數順序試,建議將Engine對應的參數放在其他RDS屬性對應的參數前方,否則會導致校驗不完全。 |
ALIYUN::RDS::ReadOnlyDBInstance |
| 說明 ZoneId,DBInstanceStorageType,Category建議必填,否則會導致校驗不完全。 MultiAZ建議設置為false,否則會導致校驗不完全。 通過Metadata設置參數順序試,建議將Engine對應的參數放在其他RDS屬性對應的參數前方,否則會導致校驗不完全。 |
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 |
| 無 |
參數之間的依賴關系
使用模板在ROS創建ECS資源時,需要填寫ZoneInfo
、InstanceType
等參數。
由于各個可用區支持的ECS實例規格不同,填寫ZoneInfo
后,可能導致您無法選擇特定的InstanceType
。
如果您只需要選擇特定的InstanceType
,那么您可以通過Metadata
設置參數之間的依賴關系。
關于Metadata的信息,請參見元數據(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
- ZoneInfo
手動配置Terraform類型模板的參數約束查詢
在Metadata字段或.metadata文件中的ALIYUN::ROS::Interface字段中增加ResourcesForParameterConstraints字段,對參數進行約束。
您需要定義與參數約束相關的資源,并設置對應屬性。關于ResourcesForParameterConstraints字段的相關語法,請參見資源(Resources)。
模板中定義的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字段中只需要定義一個類型為ALIYUN::ECS::Instance(ROS中與alicloud_instance對應的資源類型)的資源,并關聯相關參數image_id、instance_type、zone_id,就可以實現對instance_type、zone_id、image_id的約束(image_id已隱藏)。