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 used for multiple Alibaba Cloud services, but the values of the ZoneId parameter are different. In this case, you can obtain the value of the ZoneId parameter defined in your template by querying the constraint of the ZoneId parameter.
Supported parameters
To obtain the values of parameters defined in a template, you can call the GetTemplateParameterConstraints operation instead of adding the relevant fields to the template.
The template must contain the Parameters
section.
The following table lists the parameters whose constraints you can query.
Resource type | Parameter | 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 To ensure complete validation, we recommend that you specify ZoneId, DBInstanceStorageType, and Category. To ensure complete validation, we recommend that you set MultiAZ to false. To ensure complete validation, we recommend that you place the parameters related to the Engine property of ApsaraDB RDS before the parameters related to other ApsaraDB RDS properties when you use Metadata to specify the parameter order. |
ALIYUN::RDS::PrepayDBInstance |
| Note To ensure complete validation, we recommend that you specify ZoneId, DBInstanceStorageType, and Category. To ensure complete validation, we recommend that you set MultiAZ to false. To ensure complete validation, we recommend that you place the parameters related to the Engine property of ApsaraDB RDS before the parameters related to other ApsaraDB RDS properties when you use Metadata to specify the parameter order. |
ALIYUN::RDS::ReadOnlyDBInstance |
| Note To ensure complete validation, we recommend that you specify ZoneId, DBInstanceStorageType, and Category. To ensure complete validation, we recommend that you set MultiAZ to false. To ensure complete validation, we recommend that you place the parameters related to the Engine property of ApsaraDB RDS before the parameters related to other ApsaraDB RDS properties when you use Metadata to specify the parameter order. |
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
- ZoneInfo
Manually 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.
When you query parameter constraints in a template, the Mappings, Conditions, and Rules sections defined in the template automatically take effect. 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, the only 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.