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
Para usar um módulo personalizado, verifique se ele está registrado na conta desejada. Para mais informações, consulte Criar um módulo personalizado e Visualizar um módulo personalizado.
Use diretamente os módulos públicos prontos para uso fornecidos pelo Resource Orchestration Service (ROS). Para mais informações, consulte Visualizar um módulo público.
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
Resourcesdo 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:v1ev10.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
CidrBlockdo módulo filhoMODULE::My::VPC::SampleVpcPrivateestá definido como192.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óduloMODULE::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.
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
TransformeWorkspaceao modelo.Não adicione as seções
MetadataeCountao 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
MetadataeRulesdo 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.
NotaSe 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.