您可以通过参数约束查询功能来查询模板中定义参数的取值。
背景信息
通过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已隐藏)。