Теги, добавленные в проекты и облачные шаблоны, работают как теги ограничений, если они используются для сопоставления тегов возможностей в ресурсах инфраструктуры, профилях и облачных зонах. В случае облачных шаблонов служба Cloud Assembly использует функцию сопоставления для выделения ресурсов развертываниям.

Cloud Assembly позволяет использовать теги ограничений двумя основными способами. Во-первых, при настройке проектов и образов. Теги можно использовать в качестве ограничений, чтобы связать ресурсы с проектом или образом. Во-вторых, при работе с облачными шаблонами, где теги, указанные в качестве ограничений, используются для выбора ресурсов для развертываний. Ограничения, применяемые в обоих случаях, объединяются в облачных шаблонах в набор требований к развертыванию, которые определяют ресурсы, доступные в нем.

Использование тегов ограничений в проектах

При настройке ресурсов Cloud Assembly администраторы облачных систем могут применять теги ограничений для проектов. Это позволяет им внедрять управляющие ограничения непосредственно на уровне проекта. Все ограничения, добавленные на этом уровне, применяются ко всем облачным шаблонам, запрошенным для заданного проекта, а эти теги ограничений имеют более высокий приоритет, чем другие теги.

Если теги ограничений в проекте конфликтуют с тегами ограничений в облачном шаблоне, теги проекта получают более высокий приоритет, благодаря чему администратор облачных систем может принудительно внедрять управляющие правила. Например, если администраторы облачных систем создают в проекте тег location:london, а разработчик помещает в облачный шаблон тег location:boston, то первый тег получает более высокий приоритет, и развертывание ресурса выполняется в инфраструктуре, содержащей тег location:london.

Существуют три типа тегов ограничений, которые пользователи могут применять в проектах: «сеть», «хранилище» и «расширяемость». Для каждого типа тега можно применить любое нужное количество экземпляров. Ограничения проекта могут быть жесткими или мягкими. По умолчанию все ограничения являются жесткими. Жесткие ограничения позволяют внедрять строгие ограничения при развертывании. Если одно или несколько жестких ограничений не выполняются, развертывание завершается ошибкой. Мягкие ограничения позволяют зафиксировать предпочтения, которые будут реализованы при наличии такой возможности, но если такой возможности не будет, это не приведет к неудачному завершению развертывания.

Использование тегов ограничений в облачных шаблонах

В облачных шаблонах теги ограничений, соответствующие тегам возможностей, которые были определены администратором облака в ресурсах, облачных зонах и профилях сетей, добавляются к ресурсам в виде кода YAML. Существуют и другие, более сложные варианты внедрения тегов ограничений. Например, можно использовать переменную для заполнения одного или нескольких тегов по запросу. Таким образом можно задать один или несколько тегов при отправке запроса.

В коде YAML облачных шаблонов теги ограничений создаются с помощью метки tag в заголовке ограничения. К тегам ограничений, созданным в облачных шаблонах, добавляются теги ограничений из проектов.

Служба Cloud Assembly поддерживает простой строковый формат, что позволяет упростить использование ограничений в файлах YAML:

[!]tag_key[:tag_value][:hard|:soft]

По умолчанию в службе Cloud Assembly создается положительное ограничение с жестким применением. Хотя значение тега не является обязательным, его рекомендуется указывать, как и в других частях приложения.

В следующем примере использования WordPress с MySQL показаны теги ограничений YAML, задающие сведения о расположении вычислительных ресурсов.

name: "wordPressWithMySql"
components:
  mysql:
    type: "Compute"
    data:
      name: "mysql"
      # ... skipped lines ...
  wordpress:
    type: "Compute"
    data:
      name: "wordpress"
      instanceType: small
      imageType: "ubuntu-server-1604"
      constraints:
        - tag: "!location:eu:hard"
        - tag: "location:us:soft"
        - tag: "!pci"
      # ... skipped lines ...

Дополнительные сведения о работе с облачными шаблонами см. в разделе Часть 3. Проектирование и развертывание примера шаблона Cloud Assembly.

Использование жестких и мягких ограничений в проектах и облачных шаблонах

Ограничения, используемые в проектах и облачных шаблонах, могут быть жесткими или мягкими. В приведенном выше фрагменте кода можно увидеть примеры как жестких, так и мягких ограничений. По умолчанию все ограничения являются жесткими. Жесткие ограничения позволяют внедрять строгие ограничения при развертывании. Если одно или несколько жестких ограничений не выполняются, развертывание завершается ошибкой. Мягкие ограничения позволяют зафиксировать предпочтения, которые будут реализованы при наличии такой возможности, но, если такой возможности не будет, это не приведет к сбою развертывания.

Если определенному типу ресурсов назначен набор из жестких и мягких ограничений, мягкие ограничения могут играть роль определяющих. Это значит, что если несколько ресурсов соответствуют определенному жесткому ограничению, то окончательный выбор ресурса, используемого в развертывании, определяется мягкими ограничениями.

Предположим, например, что создается жесткое ограничение для хранилища с тегом location:boston. Если в проекте нет хранилища, соответствующего этому ограничению, любое связанное с ним развертывание будет завершаться ошибкой.