全部產品
Search
文件中心

Resource Orchestration Service:參數約束查詢

更新時間:Jun 19, 2024

您可以通過參數約束查詢功能來查詢範本中定義參數的取值。

背景資訊

通過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已隱藏)。