参数约束查询

您可以通过参数约束查询功能来查询模板中定义参数的取值。

背景信息

通过AssociationProperty和AssociationPropertyMetadata可以筛选参数。在特定场景下,筛选出来的参数可能不符合需求。

例如:多个产品都支持ZoneId参数,而不同产品支持的ZoneId不同,此时您需要使用参数约束查询功能,查询模板中定义参数的取值。

支持查询的参数

您可以调用GetTemplateParameterConstraints接口查询参数取值,无需在模板中额外增加字段去查询。

说明

模板内容中必须包含参数信息,即模板结构中包含Parameters模块。

参数约束查询功能支持查询的参数如下表所示。

资源类型

参数

说明

ALIYUN::ADB::DBCluster

  • ZoneId;

ALIYUN::ALB::LoadBalancer

  • ZoneMappings中的ZoneId;

ALIYUN::AMQP::Instance

  • PeriodUnit;

  • Period;

ALIYUN::ApiGateway::Instance

  • PricingCycle;

  • Duration;

ALIYUN::CDDC::DedicatedHost

  • Period;

  • UsedTime;

ALIYUN::CEN::CenBandwidthPackage

  • PricingCycle;

  • Period;

ALIYUN::ClickHouse::DBCluster

  • Period;

  • ZoneId

  • UsedTime;

ALIYUN::CloudPhone::InstanceGroup

  • PeriodUnit;

  • Period;

ALIYUN::CS::AnyCluster

  • PeriodUnit;

  • Period;

  • MasterInstanceTypes;

  • WorkerZoneIds;

  • PodVswitchIds;

  • WorkerSystemDiskCategory;

  • MasterZoneIds;

  • WorkerVSwitchIds;

  • KubernetesVersion;

  • WorkerInstanceTypes;

  • NodePools中的ScalingGroup.SystemDiskCategory;

  • NodePools中的ScalingGroup.ZoneIds;

  • NodePools中的ScalingGroup.InstanceTypes;

  • MasterSystemDiskCategory;

  • WorkerDataDisks中的Category;

  • MasterDataDisks中的Category;

  • NodePools中的ScalingGroup.DataDisks中的Category;

ALIYUN::CS::ClusterNodePool

  • ScalingGroup中的PeriodUnit;

  • ScalingGroup中的Period;

  • ScalingGroup中的InstanceTypes;

  • ScalingGroup中的ZoneIds;

  • ScalingGroup.DataDisks中的Category;

  • ScalingGroup中的SystemDiskCategory;

ALIYUN::CS::KubernetesCluster

  • MasterInstanceTypes;

  • MasterSystemDiskCategory;

  • WorkerInstanceTypes;

  • WorkerSystemDiskCategory;

  • WorkerVSwitchIds;

  • PodVswitchIds;

  • KubernetesVersion;

  • PeriodUnit;

  • WorkerZoneIds;

  • Period;

  • MasterZoneIds;

  • NodePools中的ScalingGroup.InstanceTypes;

  • NodePools中的ScalingGroup.DataDisks中的Category;

  • NodePools中的ScalingGroup.ZoneIds;

  • NodePools中的ScalingGroup.SystemDiskCategory;

  • MasterDataDisks中的Category;

  • WorkerDataDisks中的Category;

ALIYUN::CS::ManagedEdgeKubernetesCluster

  • WorkerInstanceTypes;

  • PeriodUnit;

  • Period;

  • ZoneIds;

  • VSwitchIds;

  • WorkerSystemDiskCategory;

  • WorkerDataDiskCategory;

ALIYUN::CS::ManagedKubernetesCluster

  • WorkerInstanceTypes;

  • WorkerSystemDiskCategory;

  • VSwitchIds;

  • PodVswitchIds;

  • KubernetesVersion;

  • PeriodUnit;

  • Period;

  • ZoneIds;

  • NodePools中的ScalingGroup.ZoneIds;

  • NodePools中的ScalingGroup.InstanceTypes;

  • NodePools中的ScalingGroup.DataDisks中的Category;

  • WorkerDataDisks中的Category;

  • NodePools中的ScalingGroup.SystemDiskCategory;

ALIYUN::CS::ServerlessKubernetesCluster

  • PeriodUnit;

  • Period;

  • KubernetesVersion;

ALIYUN::DRDS::DrdsInstance

  • PricingCycle;

  • Duration;

ALIYUN::DTS::SubscriptionInstance

  • Period;

  • UsedTime;

ALIYUN::DTS::SynchronizationJob

  • Period;

  • UsedTime;

ALIYUN::ECD::Desktops

  • PeriodUnit;

  • Period;

ALIYUN::ECS::DedicatedHost

  • PeriodUnit;

  • Period;

ALIYUN::ECS::Disk

  • DiskCategory;

  • ZoneId;

ALIYUN::ECS::Instance

  • ZoneId;

  • PeriodUnit;

  • InstanceType;

  • Period;

  • SystemDiskCategory;

  • DiskMappings中的Category;

ALIYUN::ECS::InstanceGroup

  • ZoneId;

  • PeriodUnit;

  • InstanceType;

  • Period;

  • SystemDiskCategory;

  • DiskMappings中的Category;

ALIYUN::ECS::InstanceGroupClone

  • PeriodUnit;

  • Period;

  • SystemDiskCategory;

  • DiskMappings中的Category;

  • PeriodUnit;

  • Period;

  • InstanceType;

  • ZoneId;

ALIYUN::ECS::PrepayInstance

  • PeriodUnit;

  • Period;

  • SystemDiskCategory;

  • DiskMappings中的Category;

  • PeriodUnit;

  • Period;

  • InstanceType;

  • ZoneId;

ALIYUN::ECS::PrepayInstanceGroupClone

  • PeriodUnit;

  • Period;

  • SystemDiskCategory;

  • DiskMappings中的Category;

  • PeriodUnit;

  • Period;

  • InstanceType;

  • ZoneId;

ALIYUN::ECS::VSwitch

  • ZoneId;

  • Period;

  • PeriodType;

ALIYUN::EHPC::Cluster

  • PeriodUnit;

  • Period;

  • EcsOrderManagerInstanceType;

  • EcsOrderComputeInstanceType;

  • EcsOrderLoginInstanceType;

  • SystemDiskType;

  • ZoneId;

ALIYUN::ElasticSearch::Instance

  • PeriodUnit;

  • ZoneId;

  • Period;

  • DataNode中的Spec;

  • MasterNode中的Spec;

  • KibanaNode中的Spec;

目前仅支持通过可用区去查规格。

ALIYUN::EMR::Cluster

  • HostGroup中的DiskType;

  • NetType;

  • HostGroup中的SysDiskType;

  • HostGroup中的InstanceType;

  • ZoneId;

ALIYUN::Flink::Instance

  • PricingCycle;

  • Duration;

  • ZoneId;

ALIYUN::GA::Accelerator

  • PricingCycle;

  • Duration;

ALIYUN::GA::BandwidthPackage

  • PricingCycle;

  • Duration;

ALIYUN::GPDB::DBInstance

  • ZoneId;

  • PeriodUnit;

  • Period;

ALIYUN::GPDB::ElasticDBInstance

  • ZoneId;

  • EngineVersion;

  • InstanceSpec;

  • DBInstanceCategory;

  • SegStorageType

ALIYUN::GWS::Instance

  • PeriodUnit;

  • Period;

ALIYUN::MONGODB::Instance

  • StorageType;

  • DBInstanceClass;

  • EngineVersion;

  • ZoneId;

ALIYUN::MONGODB::PrepayInstance

  • StorageType;

  • DBInstanceClass;

  • EngineVersion;

  • ZoneId

ALIYUN::MONGODB::ServerlessInstance

  • StorageType;

  • DBInstanceClass;

  • EngineVersion;

  • ZoneId;

ALIYUN::MONGODB::ShardingInstance

  • StorageType;

  • DBInstanceClass;

  • EngineVersion;

  • ZoneId;

ALIYUN::NAS::FileSystem

  • ProtocolType;

  • StorageType;

  • ZoneId;

ALIYUN::POLARDB::DBCluster

  • ZoneId;

  • Duration;

  • PricingCycle;

  • DBNodeClass;

ALIYUN::PrivateLink::VpcEndpointService

  • Resource中的ZoneId;

ALIYUN::RDS::DBInstance

  • ZoneId;

  • Period;

  • PeriodType;

  • EngineVersion;

  • Category;

  • DBInstanceStorageType;

  • DBInstanceClass;

说明
  • ZoneId,DBInstanceStorageType,Category建议必填,否则会导致校验不完全。

  • MultiAZ 建议设置为false,否则会导致校验不完全。

  • 通过Metadata设置参数顺序试,建议将Engine对应的参数放在其他RDS属性对应的参数前方,否则会导致校验不完全。

ALIYUN::RDS::DBInstanceClone

  • PeriodType;

  • Period;

  • Category;

  • EngineVersion;

  • PeriodType;

  • DBInstanceClass;

  • DBInstanceStorageType;

  • Period;

  • ZoneId;

    说明

    ZoneId,DBInstanceStorageType,Category建议必填,否则会导致校验不完全。

    MultiAZ建议设置为false,否则会导致校验不完全。

    通过Metadata设置参数顺序试,建议将Engine对应的参数放在其他RDS属性对应的参数前方,否则会导致校验不完全。

ALIYUN::RDS::PrepayDBInstance

  • ZoneId;

  • EngineVersion;

  • Category;

  • DBInstanceStorageType;

  • DBInstanceClass;

  • Period;

  • PeriodType;

    说明

    ZoneId,DBInstanceStorageType,Category建议必填,否则会导致校验不完全。

    MultiAZ建议设置为false,否则会导致校验不完全。

    通过Metadata设置参数顺序试,建议将Engine对应的参数放在其他RDS属性对应的参数前方,否则会导致校验不完全。

ALIYUN::RDS::ReadOnlyDBInstance

  • PeriodType;

  • Period;

  • Category;

  • DBInstanceClass;

  • EngineVersion;

  • DBInstanceStorageType;

  • ZoneId;

    说明

    ZoneId,DBInstanceStorageType,Category建议必填,否则会导致校验不完全。

    MultiAZ建议设置为false,否则会导致校验不完全。

    通过Metadata设置参数顺序试,建议将Engine对应的参数放在其他RDS属性对应的参数前方,否则会导致校验不完全。

ALIYUN::REDIS::Instance

  • ZoneId;

  • EngineVersion;

  • InstanceClass;

  • PeriodUnit;

  • Period;

ALIYUN::REDIS::PrepayInstance

  • ZoneId;

  • Period;

  • PeriodUnit;

  • EngineVersion;

  • InstanceClass;

ALIYUN::SLB::AnyTunnel

  • PricingCycle;

  • Duration;

  • MasterZoneId;

  • SlaveZoneId;

ALIYUN::SLB::LoadBalancer

  • MasterZoneId;

  • SlaveZoneId;

  • Duration;

  • PricingCycle;

ALIYUN::TSDB::HiTSDBInstance

  • InstanceClass;

  • ZoneId;

  • Duration;

  • PricingCycle;

ALIYUN::VPC::EIP

  • PricingCycle;

  • Period;

ALIYUN::VPC::EIPPro

  • PricingCycle;

  • Period;

ALIYUN::VPC::NatGateway

  • ZoneId;

  • Duration;

  • PricingCycle;

ALIYUN::VPC::RouterInterface

  • PricingCycle;

  • Period;

参数之间的依赖关系

使用模板在ROS创建ECS资源时,需要填写ZoneInfoInstanceType等参数。

由于各个可用区支持的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已隐藏)。