您可以通過參數約束查詢功能來查詢範本中定義參數的取值。
背景資訊
通過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已隱藏)。