As tags adicionadas aos projetos e modelos de nuvem funcionam como tags de restrição quando são usadas para corresponder a tags de capacidade em recursos de infraestrutura, perfis e zonas de nuvem. No caso dos modelos de nuvem, o Cloud Assembly usa essa funcionalidade correspondente para alocar recursos para implantações.

O Cloud Assembly permite que você use as tags de restrição de duas maneiras principais. A primeira forma é ao configurar projetos e imagens. Você pode usar tags como restrições para associar recursos ao projeto ou imagem. A segunda está em modelos de nuvem em que as tags especificadas como restrições são usadas para selecionar recursos para implantações. As restrições aplicadas em ambas as formas são mescladas em modelos de nuvem para formar um conjunto de requisitos de implantação que definem os recursos disponíveis para uma implantação.

Como as tags de restrição funcionam em projetos

Ao configurar os recursos do Cloud Assembly, os administradores de nuvem podem aplicar tags de restrição em projetos. Dessa forma, os administradores podem aplicar restrições de governança diretamente no nível do projeto. Todas as restrições adicionadas neste nível são aplicadas a todos os modelos de nuvem solicitados para o projeto aplicável, e essas tags de restrição têm precedência sobre outras tags.

Se as tags de restrição estiverem em conflito com as tags de restrição no modelo de nuvem, as tags de projeto terão precedência, permitindo assim que o administrador de nuvem aplique regras de governança. Por exemplo, se os administradores de nuvem criarem uma tag location:london no projeto, mas um desenvolvedor colocar uma tag location:boston no modelo de nuvem, a primeira terá precedência e o recurso será implantado na infraestrutura que contém a tag location:london.

Existem três tipos de tags de restrições que os usuários podem aplicar em projetos: rede, armazenamento e extensibilidade. Você pode aplicar quantas instâncias de cada tipo de tag forem necessárias. As restrições do projeto podem ser rígidas ou flexíveis. Por padrão, elas são rígidas. As restrições rígidas permitem que você aplique restrições de implantação de forma rígida. Se uma ou mais restrições rígidas não forem atendidas, a implantação falhará. As restrições flexíveis oferecem uma maneira de expressar as preferências que serão selecionadas, se disponíveis, mas a implantação não falhará caso as restrições flexíveis não sejam atendidas.

Como tags de restrição funcionam em modelos de nuvem

Em modelos de nuvem, você adiciona tags de restrição a recursos como código do YAML para corresponder às tags de recurso apropriadas que seu administrador de nuvem criou nos recursos, nas zonas de nuvem e nos perfis de rede e armazenamento. Além disso, há outras opções mais complexas para implantar tags de restrição. Por exemplo, é possível usar uma variável para preencher uma ou mais tags em uma solicitação. Isso permite que especificar uma ou mais tags no momento da solicitação.

Crie tags de restrição usando o rótulo tag sob um título de restrição no código YAML do modelo de nuvem. As tags de restrição de projetos são adicionadas às tags de restrição criadas em modelos de nuvem.

O Cloud Assembly suporta uma formatação de cadeia de caracteres simples para facilitar o uso de restrições nos arquivos YAML:

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

Por padrão, o Cloud Assembly cria uma restrição positiva com aplicação rígida. O valor da tag é opcional, embora recomendado, como no restante do aplicativo.

O exemplo a seguir do WordPress com MySQL mostra tags de restrição do YAML com informações de localização específicas para recursos de processamento.

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 ...

Para obter mais informações sobre como trabalhar com modelos de nuvem, consulte Parte 3: Projetar e implantar o exemplo de modelo do Cloud Assembly.

Como restrições rígidas e flexíveis funcionam em projetos e modelos de nuvem

As restrições em projetos e modelos de nuvem podem ser rígidas ou flexíveis. O trecho de código anterior mostra exemplos de restrições rígidas e flexíveis. Por padrão, todas as restrições são rígidas. As restrições rígidas permitem que você aplique restrições de implantação de forma rígida. Se uma ou mais restrições rígidas não forem atendidas, a implantação falhará. Restrições flexíveis expressam preferências aplicáveis, se disponíveis, mas não implicam em falha da implantação se não forem atendidas.

Se houver uma série de restrições rígidas e flexíveis em relação a um tipo de recurso específico, as restrições flexíveis também poderão servir como fator de decisão. Ou seja, se vários recursos atenderem a uma restrição rígida, as restrições flexíveis serão usadas para selecionar o recurso real usado na implantação.

Por exemplo, digamos que você crie uma restrição de armazenamento rígida com uma tag de location:boston. Se nenhum armazenamento no projeto corresponder a essa restrição, qualquer implantação relacionada falhará.