Como adicionar um modelo como tipo composto

Esta página descreve como criar um tipo composto com o Deployment Manager. Após criar um tipo composto, você pode chamá-lo na configuração e criar implantações.

Um tipo composto é formado por um ou mais modelos configurados para trabalhar em conjunto e que foram adicionados permanentemente ao Deployment Manager. Uma vez adicionado, você pode usar o tipo composto da mesma forma como usaria um tipo pertencente ao Google. Para saber mais sobre tipos, leia Visão geral de tipos.

Por exemplo, suponha que você criou um conjunto de modelos que implantam um grupo de instâncias de rede gerenciadas com balanceamento de carga. Você pode adicionar esses modelos ao Deployment Manager como um tipo e, depois, usá-lo em configurações futuras da mesma forma como usaria outros tipos.

Talvez também seja do seu interesse o Compartilhamento de tipos entre projetos.

Antes de começar

Componentes do tipo composto

Para criar um tipo composto, é necessário ter um modelo de nível superior em linguagem Jinja ou Python. É possível optar por ter um grupo de arquivos de suporte que, em algum momento, serão convertidos em tipos básicos. Os tipos compostos podem ser constituídos de recursos que também são outros tipos compostos. O Deployment Manager expandirá esses tipos recursivamente durante a implantação.

Um tipo composto é constituído de:

  • um modelo de nível superior: o modelo Jinja ou Python de nível superior executado durante a expansão, quando o tipo é chamado.
  • um esquema: o arquivo de esquema JSON com as informações sobre o modelo de nível superior e quaisquer subimportações definidas.
  • arquivos importados: todos os arquivos extras necessários para a execução, como arquivos auxiliares, sub-templates e esquemas relevantes para os submodelos, se aplicável. Isso é opcional. O tipo composto também pode conter somente um único modelo de nível superior.

Como criar um tipo composto

Para criar um tipo composto, registre o modelo de nível superior de uma configuração, bem como as importações e esquema associados. Crie um tipo composto usando gcloud ou a API.

Talvez você também tenha interesse no exemplo que descreve como criar e chamar um tipo composto.

gcloud

Para executar o comando, é necessário estar no diretório em que estão armazenados o modelo de nível superior e os submodelos que fazem parte do tipo composto.

Usando a CLI gcloud, faça uma solicitação types create e especifique o modelo de nível superior e o nome do tipo desejado para chamar esse tipo composto. Execute o comando abaixo no diretório local em que estão os arquivos do modelo.

$ gcloud beta deployment-manager types create [TYPE_NAME] --template=[TOP_LEVEL_TEMPLATE]

onde:

  • [TYPE_NAME] é como você pretende nomear o tipo;
  • [TOP_LEVEL_TEMPLATE] é o caminho relativo para o modelo de nível superior que descreve o tipo.

API

Na API, faça uma solicitação POST contendo os campos composite e name. No campo composite, defina:

  • o esquema de nível superior
  • os conteúdos dos modelos importados
  • os conteúdos do modelo de nível superior

O corpo da solicitação da API tem a estrutura a seguir:

POST https://www.googleapis.com/deploymentmanager/v2beta/projects/[PROJECT_ID]/global/compositeTypes

{
 "composite": {
  "files": {
   "schema": "[CONTENTS_OF_SCHEMA]",
   "imports": [
    {
     "name": "[TEMPLATE_FILE]",
     "content": "[CONTENTS_OF_TEMPLATE_FILE]"
    },
    {
     "name": "[ANOTHER_TEMPLATE_IF_NECESSARY]",
     "content": "[CONTENTS_OF_TEMPLATES]"
    }
   ],
   "template": "[TOP-LEVEL_TEMPLATE_CONTENTS]",
   "templateFileType": "[FILE_TYPE]"
  }
 },
 "name": "[TYPE_NAME]"
}

Para ver um exemplo de como criar essas solicitações, consulte Como criar um tipo composto de grupo de instâncias gerenciadas com escalonamento automático. Para mais informações, consulte a documentação do método insert.

Como implantar um tipo composto

Os tipos são recursos por projeto. Eles podem ser acessados de acordo com as permissões descritas no documento Controle de acesso. Ou seja:

  • Os editores e visualizadores de um projeto, bem como os editores de tipos podem criar e usar os tipos disponíveis nesse projeto.
  • Os visualizadores de tipos podem conseguir uma lista dos tipos e usar aqueles disponíveis para o projeto.

Também é possível adicionar outro projeto como visualizador de tipos, a fim de que ele possa acessar os tipos. Leia Compartilhamento de tipos entre projetos.

Após registrar o tipo composto, você pode implantá-lo do mesmo modo como chamaria os tipos gerenciados pelo Google:

types: [PROJECT_ID]/composite:[TYPE_NAME]

Exemplo:

resources:
- name: my example-resource
  type: example-project/composite:autoscaled-igm
  properties:
  ...

Como implantar um tipo composto diretamente com a ferramenta de linha de comando

O Deployment Manager oferece a capacidade de implantar um tipo composto diretamente com a Google Cloud CLI. Em vez de criar um arquivo de configuração de nível superior, a CLI gcloud vai gerar automaticamente uma configuração de nível superior.

Por exemplo, o comando a seguir implanta um tipo composto chamado autoscaled-igm:

gcloud deployment-manager deployments create my-igm \
    --composite-type example-project/composite:autoscaled-igm

A definição de propriedades do seu tipo composto também pode ser feita por meio da sinalização --properties:

gcloud deployment-manager deployments create my-igm \
    --composite-type example-project/composite:autoscaled-igm \
    --properties zone:us-central1-a

Lembre-se:

  • Todos os valores são analisados como valores de YAML. Por exemplo, version: 3 é transmitido como um número inteiro. Se você quiser especificá-lo como uma string, coloque aspas simples com escape em volta do valor, version: \'3\'.

  • Os valores booleanos não diferenciam maiúsculas de minúsculas, por isso, TRUE, true e True são tratados da mesma maneira.

  • É necessário transmitir todas as propriedades obrigatórias definidas pelo tipo composto. Não é possível fornecer apenas um subconjunto de propriedades. Se algumas propriedades tiverem valores padrão, será possível omiti-las da linha de comando.

Para especificar várias propriedades, forneça pares de chave-valor separados por vírgulas. A ordem na qual os pares são especificados não é importante. Exemplo:

gcloud deployment-manager deployments create my-igm \
    --composite-type example-project/composite:autoscaled-igm \
    --properties zone:us-central1-a,machineType:n1-standard-1,image:debian-8

Após executar esse comando, o Deployment Manager cria uma implantação usando o tipo composto que você forneceu. É possível confirmar se a implantação foi criada usando o console do Google Cloud ou a CLI gcloud. Para mais informações sobre como visualizar a implantação, leia Como ver um manifesto.

Exemplo: criação de um tipo composto

O Deployment Manager oferece muitos exemplos de configuração no repositório do GitHub do Deployment Manager. Você pode usá-los como tipos compostos. Neste exemplo, você adicionará um tipo composto que implantará um serviço de balanceamento de carga de alta disponibilidade em várias zonas de uma única região. Para mais informações, veja o exemplo completo.

Neste exemplo, o arquivo de configuração de nível superior é o arquivo ha-service.py. Todos os submodelos são importados nos arquivos de esquema.

  1. Faça o download dos arquivos Python e de esquema do diretório do GitHub. Omita todos os arquivos em subdiretórios e arquivos de diagrama.
  2. No diretório local em que você fez download de todos os arquivos, execute o seguinte comando para criar um novo tipo composto chamado ha-service-example:

    gcloud beta deployment-manager types create ha-service-example --template=ha-service.py
    
  3. Consiga uma lista de tipos para confirmar que o tipo foi realmente criado:

    gcloud beta deployment-manager types list --provider composite
    
  4. Descreva o tipo novo:

    gcloud beta deployment-manager types describe ha-service-example --provider composite
    
  5. Crie uma configuração que implante o tipo. Substitua [PROJECT_ID] pelo ID do projeto.

    resources:
    - name: ha-service-example
      type: [PROJECT_ID]/composite:ha-service-example
      properties:
        dockerImage: gcr.io/deployment-manager-examples/nodejsservicestatic
        zones:
        - us-central1-b
        - us-central1-a
    

    Salve a configuração como example-config.yaml. Observe que não foi necessário importar qualquer modelo na configuração.

  6. Implante o tipo composto novo:

    gcloud deployment-manager deployments create ha-service-deployment --config example-config.yaml
    

    A API retorna uma lista de recursos criados a partir do tipo:

    Waiting for create [operation-1488254932422-5498f5a950d71-2bd3b8c8-b13ddab5]...done.
    Create operation operation-1488254932422-5498f5a950d71-2bd3b8c8-b13ddab5 completed successfully.
    NAME                                            TYPE                             STATE      ERRORS  INTENT
    ha-service-deployment-lb-fr                      compute.v1.forwardingRule        COMPLETED  []
    ha-service-deployment-lb-hc                      compute.v1.httpHealthCheck       COMPLETED  []
    ha-service-deployment-lb-tp                      compute.v1.targetPool            COMPLETED  []
    ha-service-deployment-service-us-central1-a-as   compute.v1.autoscaler            COMPLETED  []
    ha-service-deployment-service-us-central1-a-igm  compute.v1.instanceGroupManager  COMPLETED  []
    ha-service-deployment-service-us-central1-a-it   compute.v1.instanceTemplate      COMPLETED  []
    ha-service-deployment-service-us-central1-b-as   compute.v1.autoscaler            COMPLETED  []
    ha-service-deployment-service-us-central1-b-igm  compute.v1.instanceGroupManager  COMPLETED  []
    ha-service-deployment-service-us-central1-b-it   compute.v1.instanceTemplate      COMPLETED  []

Parabéns, você criou seu primeiro tipo composto!

A seguir