You can use the parameter constraint query feature to obtain the values of parameters that are defined in a template.
Background information
When you use AssociationProperty and AssociationPropertyMetadata to filter parameters, the filtered parameters may not meet your requirements in specific scenarios.
For example, the ZoneId parameter is supported by multiple Alibaba Cloud services, but its valid values differ between services. In this case, you can perform a parameter constraint query to obtain the value of the ZoneId parameter defined in your template.
Supported properties
If a property of a resource type is referenced by a parameter by using the Ref function, you can call the GetTemplateParameterConstraints operation to obtain the property value. The following table lists all properties that support the parameter constraint query feature and the corresponding resource types.
You can call the GetFeatureDetails operation to obtain the resource types whose properties support the parameter constraint query feature.
The template from which you want to query parameter contraints must contain the Parameters section.
Resource type | Property | Description |
ALIYUN::ADB::DBCluster |
| None. |
ALIYUN::ALB::LoadBalancer |
| None. |
ALIYUN::AMQP::Instance |
| None. |
ALIYUN::ApiGateway::Instance |
| None. |
ALIYUN::CDDC::DedicatedHost |
| None. |
ALIYUN::CEN::CenBandwidthPackage |
| None. |
ALIYUN::ClickHouse::DBCluster |
| None. |
ALIYUN::CloudPhone::InstanceGroup |
| None. |
ALIYUN::CS::AnyCluster |
| None. |
ALIYUN::CS::ClusterNodePool |
| None. |
ALIYUN::CS::KubernetesCluster |
| None. |
ALIYUN::CS::ManagedEdgeKubernetesCluster |
| None. |
ALIYUN::CS::ManagedKubernetesCluster |
| None. |
ALIYUN::CS::ServerlessKubernetesCluster |
| None. |
ALIYUN::DRDS::DrdsInstance |
| None. |
ALIYUN::DTS::SubscriptionInstance |
| None. |
ALIYUN::DTS::SynchronizationJob |
| None. |
ALIYUN::ECD::Desktops |
| None. |
ALIYUN::ECS::DedicatedHost |
| None. |
ALIYUN::ECS::Disk |
| None. |
ALIYUN::ECS::Instance |
| None. |
ALIYUN::ECS::InstanceGroup |
| None. |
ALIYUN::ECS::InstanceGroupClone |
| None. |
ALIYUN::ECS::PrepayInstance |
| None. |
ALIYUN::ECS::PrepayInstanceGroupClone |
| None. |
ALIYUN::ECS::VSwitch |
| None. |
ALIYUN::EHPC::Cluster |
| None. |
ALIYUN::ElasticSearch::Instance |
| You can query specifications only by zone. |
ALIYUN::EMR::Cluster |
| None. |
ALIYUN::Flink::Instance |
| None. |
ALIYUN::GA::Accelerator |
| None. |
ALIYUN::GA::BandwidthPackage |
| None. |
ALIYUN::GPDB::DBInstance |
| None. |
ALIYUN::GPDB::ElasticDBInstance |
| None. |
ALIYUN::GWS::Instance |
| None. |
ALIYUN::MONGODB::Instance |
| None. |
ALIYUN::MONGODB::PrepayInstance |
| None. |
ALIYUN::MONGODB::ServerlessInstance |
| None. |
ALIYUN::MONGODB::ShardingInstance |
| None. |
ALIYUN::NAS::FileSystem |
| None. |
ALIYUN::POLARDB::DBCluster |
| None. |
ALIYUN::PrivateLink::VpcEndpointService |
| None. |
ALIYUN::RDS::DBInstance |
| Note
|
ALIYUN::RDS::DBInstanceClone |
| Note
|
ALIYUN::RDS::PrepayDBInstance |
| Note
|
ALIYUN::RDS::ReadOnlyDBInstance |
| Note
|
ALIYUN::REDIS::Instance |
| None. |
ALIYUN::REDIS::PrepayInstance |
| None. |
ALIYUN::SLB::AnyTunnel |
| None. |
ALIYUN::SLB::LoadBalancer |
| None. |
ALIYUN::TSDB::HiTSDBInstance |
| None. |
ALIYUN::VPC::EIP |
| None. |
ALIYUN::VPC::EIPPro |
| None. |
ALIYUN::VPC::NatGateway |
| None. |
ALIYUN::VPC::RouterInterface |
| None. |
Dependency relationships between parameters
When you use a template to create Elastic Compute Service (ECS) resources in Resource Orchestration Service (ROS), you must specify parameters such as ZoneInfo and InstanceType.
The supported ECS instance types vary based on zones. Therefore, a specific value of the InstanceType parameter may become unavailable after you specify the ZoneInfo parameter.
If you want to use only the specific value of the InstanceType parameter, you can use the Metadata section to configure the dependency relationship between the InstanceType and ZoneInfo parameters.
For more information, see 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
- ZoneInfoManually configure parameter constraint query for a Terraform template
You can add ResourcesForParameterConstraints to ALIYUN::ROS::Interface in the Metadata section or the .metadata file to configure constraints for parameters.
You must define the resources relevant to the parameter constraints and specify the resource properties. For more information about the syntax of ResourcesForParameterConstraints, see Resources.
The configurations of the Mappings, Conditions, and Rules sections defined in a template automatically take effect during a parameter constraint query. For more information, see (Optional) Mappings, (Optional) Conditions, and (Optional) 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
}In the preceding Terraform template, four resources are defined. Constraints are configured for the zone_id and instance_type parameters, and the parameters are associated with alicloud_instance.
In ResourcesForParameterConstraints, only the ALIYUN::ECS::Instance resource type of ROS that corresponds to alicloud_instance is defined. The resource type is associated with the image_id, instance_type, and zone_id parameters to configure constraints for these parameters. In this example, the image_id parameter is hidden.