除了 Cloud Assembly 中的简单条件列表之外,还可以使用高级编辑器汇编更复杂的条件表达式,以控制操作何时可用。

创建新的资源操作时,请选择需要条件使用高级编辑器。然后,输入所需的条件表达式。

自定义操作条件高级编辑器

表达式是一个子句或子句列表,每个子句均采用键-运算符-值格式。上图显示了目标必须打开电源和存在的条件。

子句

子句 说明 示例
所有子子句都需要为 true,表达式结果才为 true。

仅当 properties.powerState 为 ON 且 syncStatus 不为 MISSING 时,才会评估为 true。

matchExpression:
  - and:
      - key: properties.powerState
        operator: eq
        value: ON
      - key: syncStatus
        operator: notEq
        value: MISSING
一个或多个子子句需要为 true,表达式结果才为 true。

无论 properties.powerState 为 ON 还是 OFF,都评估为 true。

matchExpression:
  - or:
      - key: properties.powerState
        operator: eq
        value: ON
      - key: properties.powerState
        operator: eq
        value: OFF

运算符

运算符 说明 示例
eq 等于。查找完全匹配项。

当 properties.powerState 为 ON 时,评估为 true。

matchExpression:
  - and:
      - key: properties.powerState
        operator: eq
        value: ON
notEq 不等于。避免完全匹配项。

当 properties.powerState 为 OFF 时,评估为 true。

matchExpression:
  - and:
      - key: properties.powerState
        operator: notEq
        value: OFF
hasAny 在对象集合中查找匹配项。

当 storage.disks 数组包含 100 IOPS EBS 对象时,评估为 true。

matchExpression:
  - key: storage.disks
    operator: hasAny
    value:
      matchExpression: 
        - and:
            - key: iops
              operator: eq
              value: 100
            - key: service
              operator: eq
              value: ebs
in 在一组值中查找匹配项。

当 properties.powerState 为 OFF 或 SUSPEND 时,评估为 true。

matchExpression:
  - and:
      - key: properties.powerState
        operator: in
        value: OFF, SUSPEND
notIn 避免匹配一组值。

当 properties.powerState 既不为 OFF 也不为 SUSPEND 时,评估为 true。

matchExpression:
  - and:
      - key: properties.powerState
        operator: notIn
        value: OFF, SUSPEND
greaterThan 查找大于给定阈值的匹配项。仅适用于数字值。

当 storage.disks 数组中的第一个对象的 IOPS 大于 50 时,评估为 true。

matchExpression:
  - and:
      - key: storage.disks[0].iops
        operator: greaterThan
        value: 50
lessThan 查找小于给定阈值的匹配项。仅适用于数字值。

当 storage.disks 数组中的第一个对象的 IOPS 小于 200 时,评估为 true。

matchExpression:
  - and:
      - key: storage.disks[0].iops
        operator: lessThan
        value: 200
greaterThanEquals 查找等于或大于给定阈值的匹配项。仅适用于数字值。

当 storage.disks 数组中的第一个对象的 IOPS 等于或大于 100 时,评估为 true。

matchExpression:
  - and:
      - key: storage.disks[0].iops
        operator: greaterThanEquals
        value: 100
lessThanEquals 查找等于或小于给定阈值的匹配项。仅适用于数字值。

当 storage.disks 数组中的第一个对象的 IOPS 等于或小于 100 时,评估为 true。

matchExpression:
  - and:
      - key: storage.disks[0].iops
        operator: lessThanEquals
        value: 100
matchesRegex 使用正则表达式查找匹配项。

当 properties.zone 为 us-east-1a 或 us-east-1c 时,评估为 true。

matchExpression:
  - and:
      - key: properties.zone
        operator: matchesRegex
        value: (us-east-1)+(a|c){1,2}

示例

当 properties.tags 包括键为 key1 且值为 value1 的标记时,以下条件表达式评估为 true。

外部表达式使用 hasAny,因为 properties.tags 是一个数组,且您希望只要 key1=value1 出现在数组中的任何键-值对中,就评估为 true。

在内部表达式中,有两个子句,一个用于键字段,另一个用于值字段。properties.tags 数组包含键-值标记对,您需要同时匹配键字段和值字段。

matchExpression:
  - key: properties.tags
    operator: hasAny
    value:
      matchExpression:
        - and:
            - key: key
              operator: eq
              value: key1
            - key: value
              operator: eq
              value: value1

以下条件表达式与前一个示例类似,但现在,只要 properties.tags 包括 key1=value1 或 key2=value2 的标记,就评估为 true。

matchExpression:
  - or:
      - key: properties.tags
        operator: hasAny
        value:
          matchExpression:
            - and:
                - key: key
                  operator: eq
                  value: key1
                - key: value
                  operator: eq
                  value: value1
      - key: properties.tags
        operator: hasAny
        value:
          matchExpression:
            - and:
                - key: key
                  operator: eq
                  value: key2
                - key: value
                  operator: eq
                  value: value2