Todos os produtos
Search
Central de documentação

Resource Orchestration Service:Usar um módulo

Última atualização: Jul 02, 2026

Use um módulo em outro módulo ou em um modelo. Saiba como configurar versões, propriedades, condições e dependências de módulos.

Pré-requisitos

Especificar configurações para um módulo

Para usar um módulo, trate-o como um recurso e execute as seguintes operações:

  • Inclua o módulo na seção Resources do modelo ou módulo.

  • Especifique uma versão para o módulo.

  • Defina as configurações necessárias para o módulo.

Especificar uma versão para um módulo

Use Version para definir a versão de um módulo. Valores válidos para Version:

  • Valor personalizado: versão personalizada do módulo no formato v+Número. Exemplos: v1 e v10.

    Ao usar um módulo público, recomendamos especificar um valor personalizado para Version.

  • default: versão padrão do módulo.

    A versão padrão permanece disponível enquanto o módulo não for excluído.

    Defina a versão padrão de um módulo personalizado chamando uma operação da API do ROS ou usando o console do ROS. Para mais informações, consulte SetResourceType e Alterar a versão padrão de um módulo.

    Ao usar um módulo personalizado, recomendamos definir Version como default.

  • latest: versão mais recente do módulo.

    A versão mais recente permanece disponível enquanto o módulo não for excluído.

    A versão mais recente do módulo muda sempre que você cria uma nova versão ou exclui a versão atual mais recente.

    Durante o desenvolvimento ou a depuração de um módulo, recomendamos definir Version como latest.

Especificar uma propriedade para um módulo

Os parâmetros do módulo passam valores personalizados para ele a partir do modelo ou módulo que o contém. O módulo usa esses valores para configurar propriedades de seus recursos ou módulos filhos. Se nenhum parâmetro do módulo for especificado, o valor definido por Default será usado.

Especificar uma propriedade de módulo usando um parâmetro de modelo

Defina valores personalizados para parâmetros de modelo e use-os para configurar propriedades de um módulo. Para mais informações sobre como definir parâmetros de modelo, consulte Parâmetros.

O exemplo a seguir usa um modelo que contém o recurso MODULE::My::VPC::SampleVpc e o parâmetro de modelo VpcName. O parâmetro de modelo VpcName especifica a propriedade VpcName no módulo.

ROSTemplateFormatVersion: '2015-09-01'
Parameters:
  VpcName:
    Description: Name for your sample vpc
    Type: String
Resources:
  MyVpc:
    Type: MODULE::My::VPC::SampleVpc
    Version: default
    Properties:
      VpcName:
        Ref: VpcName

Especificar propriedades de um módulo filho a partir do módulo pai

Se um módulo pai e seu módulo filho tiverem o mesmo parâmetro, especifique o valor desse parâmetro para o módulo filho diretamente do módulo pai.

Neste exemplo, MODULE::My::VPC::SampleVpcPrivate é usado como módulo filho. Nele, os parâmetros VpcName e CidrBlock são especificados para configurar as propriedades VpcName e CidrBlock do recurso ALIYUN::ECS::VPC. O código de exemplo a seguir ilustra o módulo filho:

ROSTemplateFormatVersion: '2015-09-01'
Description: A sample vpc.
Parameters:
  VpcName:
    Description: Name for the vpc
    Type: String
  CidrBlock:
    Description: Cidr block for the vpc
    Type: String
Resources:
  Vpc:
    Type: ALIYUN::ECS::VPC
    Properties:
      VpcName:
        Ref: VpcName
      CidrBlock:
        Ref: CidrBlock

O módulo MODULE::My::VPC::SampleVpcPrivate está aninhado no módulo MODULE::My::VPC::SampleVpc. As configurações a seguir definem os parâmetros do módulo filho dentro do módulo pai. O código de exemplo subsequente mostra o módulo pai.

  • O parâmetro CidrBlock do módulo filho MODULE::My::VPC::SampleVpcPrivate está definido como 192.168.0.0/16.

  • Um parâmetro de módulo foi definido para o parâmetro VpcName. Isso permite especificar o nome da VPC em um modelo ou módulo que contenha o módulo MODULE::My::VPC::SampleVpc.

ROSTemplateFormatVersion: '2015-09-01'
Description: A sample vpc.
Parameters:
  VpcName:
    Description: Name for the vpc
    Type: String
Resources:
  MyVpc:
    Type: MODULE::My::VPC::SampleVpcPrivate
    Version: default
    Properties:
      VpcName:
        Ref: VpcName
      CidrBlock: 192.168.0.0/16

Especificar restrições para um parâmetro de módulo

Parâmetros de módulo não suportam imposição direta de restrições. Para aplicar restrições a um parâmetro de módulo, crie um parâmetro de modelo com as restrições desejadas e faça referência a ele no parâmetro do seu módulo.

Especificar uma condição para um módulo

As condições de módulo seguem a mesma sintaxe das condições de recurso. As condições de um módulo são passadas para todos os recursos e módulos filhos contidos nele. Para mais informações sobre como definir condições, consulte Condições.

Especificar uma dependência para um módulo

As dependências de módulo seguem a mesma sintaxe das dependências de recurso. As dependências de um módulo são passadas para todos os recursos e módulos filhos contidos nele. Para mais informações sobre como definir dependências, consulte DependsOn.

Especificar uma política de exclusão para um módulo

As políticas de exclusão de módulo seguem a mesma sintaxe das políticas de exclusão de recurso. A política de exclusão de um módulo é herdada por todos os recursos e módulos filhos que não possuam suas próprias políticas de exclusão. Para mais informações sobre como definir políticas de exclusão, consulte DeletionPolicy.

Referenciar configurações de um módulo

Referenciar recursos em um módulo

Use nomes lógicos totalmente qualificados para referenciar recursos em um módulo. Um nome lógico totalmente qualificado consiste nos seguintes elementos:

  • Elemento 1: o nome lógico especificado para o módulo no modelo ou módulo que o contém.

  • Elemento 2: o nome lógico especificado para o recurso dentro do módulo.

Separe os elementos de um nome lógico totalmente qualificado por pontos (.). Exemplos: ModuleLogicalName.ResourceLogicalName e ParentModuleLogicalName.ChildModuleLogicalName.ResourceLogicalName.

Em seguida, use as funções integradas Fn::GetAtt, Ref e Fn::Sub para acessar recursos na seção Resources de um módulo ou valores de propriedade de um recurso do módulo. Para mais informações, consulte Recursos.

// Fn::GetAtt example
GetAtt Example1:
  Fn::GetAtt:
    - ModuleLogicalName.ResourceLogicalName
    - AttributeName
GetAtt Example2:
  Fn::GetAtt:
    - ModuleLogicalName.ChildModuleLogicalName.ResourceLogicalName
    - AttributeName

// Ref example
Ref Example1:
  Ref: ModuleLogicalName.ResourceLogicalName
Ref Example2:
  Ref: ModuleLogicalName.ChildModuleLogicalName.ResourceLogicalName

// Fn::Sub example
Sub Example1:
  Fn::Sub: "${ModuleLogicalName.ResourceLogicalName}"
Sub Example2:
  Fn::Sub: "${ModuleLogicalName.ResourceLogicalName.AttributeName}"
Sub Example3:
  Fn::Sub: "${ModuleLogicalName.ChildModuleLogicalName.ResourceLogicalName}"
Sub Example4:
  Fn::Sub: "${ModuleLogicalName.ChildModuleLogicalName.ResourceLogicalName.AttributeName}"

Neste exemplo, as seguintes configurações foram adicionadas:

  • Um modelo referencia uma propriedade de um recurso do módulo como uma propriedade de um recurso no próprio modelo.

  • Um modelo referencia uma saída de um recurso do módulo como uma saída no próprio modelo.

O recurso ALIYUN::ECS::VPC, cujo nome lógico é Vpc, está contido no módulo MODULE::My::VPC::SampleVpc. Para usar a função integrada Ref para referenciar o ID do recurso e a função integrada Fn::GetAtt para referenciar a saída do recurso, combine o nome lógico do módulo no modelo com o nome lógico do recurso no módulo para obter o nome lógico totalmente qualificado do recurso. Neste exemplo, MyVpc é combinado com Vpc para resultar em MyVpc.Vpc.

Nota

Para obter o nome lógico de um recurso em um módulo, visualize o módulo no console do ROS. Para mais informações, consulte Visualizar um módulo personalizado e Visualizar um módulo público.

Parameters:
  VpcName:
    Description: Name for your sample vpc
    Type: String
Resources:
  MyVpc:
    Type: MODULE::My::VPC::SampleVpc
    Version: default
    Properties:
      VpcName:
        Ref: VpcName
  MyVsw:
    Type: ALIYUN::ECS::VSwitch
    Properties:
      VpcId:
        Ref: MyVpc.Vpc
      CidrBlock: 192.168.1.0/24
      ZoneId:
        Fn::Select:
          - '0'
          - Fn::GetAZs:
              Ref: ALIYUN::Region
      VSwitchName: sample_vsw
Outputs:
  VpcId:
    Value:
      Fn::GetAtt:
        - MyVpc.Vpc
        - VpcId

Referenciar saídas em um módulo

Trate o módulo como um recurso e suas saídas como propriedades desse recurso. Use as funções integradas Fn::GetAtt e Fn::Sub para acessar as saídas do módulo. Para mais informações, consulte Saídas.

// Fn::GetAtt example
GetAtt Example1:
  Fn::GetAtt:
    - ModuleLogicalName
    - OutputName
GetAtt Example2:
  Fn::GetAtt:
    - ModuleLogicalName.ChildModuleLogicalName
    - OutputName

// Fn::Sub example
Sub Example1:
  Fn::Sub: "${ModuleLogicalName.OutputName}"
Sub Example2:
  Fn::Sub: "${ModuleLogicalName.ChildModuleLogicalName.OutputName}"

Referenciar condições em um módulo

Trate o módulo como um namespace para obter seu nome totalmente qualificado e use as funções integradas Fn::If, Fn::Or, Fn::And e Fn::Not para acessar as condições no módulo. Para mais informações, consulte Condições.

// Fn::If example
If Example1:
  Fn::If:
    - ModuleLogicalName.ConditionName
    - Value for true
    - Value for false
If Example2:
  Fn::If:
    - ModuleLogicalName.ChildModuleLogicalName.ConditionName
    - Value for true
    - Value for false

// Fn::Or example
Or Example:
  Fn::Or:
    - ModuleLogicalName.ConditionName
    - ModuleLogicalName.ChildModuleLogicalName.ConditionName

// Fn::And example
And Example:
  Fn::And:
    - ModuleLogicalName.ConditionName
    - ModuleLogicalName.ChildModuleLogicalName.ConditionName

// Fn::Not example
Not Example1:
  Fn::Not: ModuleLogicalName.ConditionName
Not Example2:
  Fn::Not: ModuleLogicalName.ChildModuleLogicalName.ConditionName

Referenciar mapeamentos em um módulo

Trate o módulo como um namespace para obter seu nome totalmente qualificado e use a função integrada Fn::FindInMap para acessar os mapeamentos no módulo. Para mais informações, consulte Mapeamentos.

// Fn::FindInMap example
FindInMap Example1:
  Fn::FindInMap:
    - ModuleLogicalName.MappingName
    - Key
    - SubKey
FindInMap Example2:
  Fn::FindInMap:
    - ModuleLogicalName.ChildModuleLogicalName.MappingName
    - Key
    - SubKey

Depender de recursos em um módulo

Para estabelecer dependência de recursos em um módulo, use seus nomes lógicos totalmente qualificados.

Resource1:
  DependsOn: ModuleLogicalName.ResourceLogicalName
Resource2:
  DependsOn: ModuleLogicalName.ChildModuleLogicalName.ResourceLogicalName

Depender de um módulo

Quando um recurso ou módulo depende de outro módulo, todos os recursos e módulos filhos contidos no módulo dependente tornam-se dependências. Para depender de um módulo, use seu nome lógico totalmente qualificado.

Resource1:
  DependsOn: ModuleLogicalName
Resource2:
  DependsOn: ModuleLogicalName.ChildModuleLogicalName

Considerações

Leve em conta os seguintes pontos ao usar módulos:

  • O uso de módulos é gratuito. A cobrança ocorre apenas pelos recursos resolvidos do módulo para a pilha.

  • Se um modelo contiver um módulo, os seguintes limites serão aplicados ao modelo:

    • O nome de um parâmetro não pode conter a combinação de ponto e dois-pontos (.:).

    • O nome lógico de um recurso não pode conter pontos (.).

    • O nome de uma saída não pode conter pontos (.).

    • O nome de uma condição não pode conter "e" comercial (&).

    • Não adicione as seções Transform e Workspace ao modelo.

    • Não adicione as seções Metadata e Count ao módulo.

    • Os nomes lógicos totalmente qualificados de recursos e módulos, bem como os nomes totalmente qualificados de condições e mapeamentos, devem ser únicos.

  • As cotas do ROS, como o número máximo de recursos permitidos em uma pilha e o tamanho máximo de um arquivo de modelo, aplicam-se ao modelo processado, independentemente de os recursos no modelo serem criados a partir de módulos. Para mais informações, consulte Limites.

  • As tags e os grupos de recursos configurados para uma pilha são propagados para cada recurso da pilha criado a partir do módulo.

  • Durante o processamento do modelo, os dados nas seções Metadata e Rules do módulo são ignorados.

  • Referências dinâmicas não são resolvidas durante o processamento do módulo. Elas são resolvidas apenas quando um recurso individual é criado ou atualizado durante uma operação de pilha. Para mais informações sobre referências dinâmicas, consulte Etapa 2: Criar um modelo do ROS.

  • As saídas do módulo não são propagadas para as saídas do modelo. Crie uma saída de modelo e referencie-a na saída do módulo. Para mais informações, consulte Referenciar saídas de um módulo.

  • Os parâmetros do módulo não são propagados para os parâmetros do modelo. Crie um parâmetro de modelo e referencie-o no parâmetro do módulo. Para mais informações, consulte Especificar uma propriedade de módulo usando um parâmetro de modelo.

  • Se você alterar a versão padrão do módulo cuja Version está definida como default, nenhuma operação de atualização de pilha será iniciada.

    No entanto, na próxima vez que você usar um modelo contendo esse módulo para executar uma operação de pilha, como uma atualização, o ROS usará a nova versão padrão durante a operação.

  • Se você criar uma nova versão para o módulo ou excluir a versão mais recente do módulo cuja Version está definida como latest, nenhuma operação de atualização de pilha será iniciada.

    Contudo, na próxima vez que você usar um modelo contendo esse módulo para executar uma operação de pilha, como uma atualização, o ROS usará a nova versão mais recente durante a operação.

  • Durante as operações de pilha, o ROS usa módulos registrados na conta atual, incluindo módulos aninhados em outros módulos.

    Se você usar um módulo com múltiplas versões implantadas em diferentes contas, resultados distintos serão retornados para cada conta, mesmo que o mesmo modelo seja usado.

  • Para garantir consistência, caso deseje incluir um módulo em um modelo de pilha para uso em um grupo de pilhas, use o mesmo módulo em todas as contas onde pretende implantar instâncias de pilha. Isso inclui módulos aninhados em outros módulos. Para mais informações, consulte Grupos de pilhas.

    Nota

    Se desejar expandir módulos na conta à qual o grupo de pilhas pertence, selecione Whether to Expand Modules in Current Account no console do ROS ao criar ou atualizar o grupo de pilhas.