Todos os produtos
Search
Central de documentação

Resource Orchestration Service:Resources

Última atualização: Jun 27, 2026

A seção Resources descreve as propriedades de cada recurso em uma pilha e as dependências entre eles. Você pode referenciar um recurso a partir de outros recursos ou na seção Outputs.

Tipos de entidade de recurso

As entidades de recurso classificam-se como recursos regulares e recursos de fonte de dados. Os recursos regulares dividem-se em recursos da Alibaba Cloud e recursos personalizados, conforme mostra a tabela a seguir.

Tipo de entidade de recurso

Descrição

Recurso regular (Resource)

  • Recurso da Alibaba Cloud: cria, atualiza e exclui recursos da Alibaba Cloud. O tipo de recurso começa com ALIYUN::.

  • Recurso personalizado: crie um recurso com lógica personalizada e defina como atualizá-lo e excluí-lo. O tipo de recurso começa com Custom:: ou é ALIYUN::ROS::CustomResource.

    Para mais informações, consulte Visão geral.

Recurso de fonte de dados (DataSource)

Consulta os dados de recurso de um serviço da Alibaba Cloud.

Para mais informações, consulte Recursos de fonte de dados.

Sintaxe

A seção Resources consiste em um ID de recurso e uma descrição do recurso. A descrição do recurso fica entre chaves ({}). Ao declarar vários recursos, separe-os por vírgulas (,). O trecho de código a seguir apresenta a estrutura sintática da seção Resources:

Resources:
  Resource1 Name:
    Type: Resource type
    Condition: Condition for creating this resource
    Properties: Resource property description
  Resource2 Name:
    Type: Resource type
    Condition: Condition for creating this resource
    Properties: Resource property description

Os parâmetros têm a seguinte descrição:

  • O nome do recurso deve ser exclusivo no modelo. Use esse nome para referenciar o recurso em outras partes do modelo.

  • O tipo de recurso (Type) indica qual tipo você declara. Por exemplo, ALIYUN::ECS::Instance representa uma instância ECS da Alibaba Cloud. Para obter a lista completa de tipos de recurso compatíveis com o ROS, consulte Índice de tipos de recurso.

  • As propriedades do recurso (Properties) são opções adicionais que você especifica para ele. Por exemplo, defina um Image ID para cada instância ECS da Alibaba Cloud.

Exemplo

Resources:
  ECSInstance:
    Type: ALIYUN::ECS::Instance
    Properties:
      ImageId: m-25l0r****

Se um recurso não exigir propriedades, omita a seção Properties correspondente.

Um valor de propriedade pode ser uma string de texto, uma lista de strings, um valor booleano, um parâmetro referenciado ou o retorno de uma função. Ao escrever um modelo JSON, siga estas regras:

  • Se o valor da propriedade for uma string de texto, coloque-o entre aspas duplas (" ").

  • Para valores que representam uma lista de strings, use colchetes ([]).

  • Quando o valor for uma função intrínseca ou um parâmetro referenciado, envolva-o em chaves ({}).

Essas regras também se aplicam ao combinar texto, listas, parâmetros referenciados e retornos de funções. O exemplo abaixo ilustra como declarar diferentes tipos de valores de propriedade:

{
  "Properties": {
    "String": "string",
    "LiteralList": [
      "value1",
      "value2"
    ],
    "Boolean": true,
    "ReferenceForOneValue": {
      "Ref": "ResourceID"
    },
    "FunctionResultWithFunctionParams": {
      "Fn::Join": [
        "%",
        [
          "Key=",
          {
            "Ref": "SomeParameter"
          }
        ]
      ]
    }
  }
}

DeletionPolicy

Ao remover um recurso, dois cenários são possíveis:

  • Se DeletionPolicy estiver definido como Delete, o próprio recurso será excluído quando removido da pilha.

  • Caso DeletionPolicy esteja configurado como Retain, o recurso permanecerá mesmo após a remoção da pilha.

Por exemplo, para preservar uma instância ECS quando a pilha for excluída, declare a política conforme o trecho de código a seguir:

Resources:
  ECSInstance:
    Type: ALIYUN::ECS::Instance
    Properties:
      ImageId: m-25l0r****
    DeletionPolicy: Retain

Neste exemplo, se a pilha associada a este modelo for excluída, o recurso ECSInstance permanecerá preservado.

Importante

Se um recurso tiver DeletionPolicy configurado e você chamar a operação DeleteStack incluindo esse recurso no parâmetro RetainResources, aplicam-se os seguintes princípios:

  • Quando o Recurso A possui DeletionPolicy=Delete no modelo, sua retenção depende da inclusão dele em RetainResources durante a exclusão da pilha.

  • Se o Recurso A tiver DeletionPolicy=Retain no modelo, ele sempre permanecerá na exclusão da pilha, independentemente de estar listado em RetainResources.

DependsOn

Em um modelo, utilize o atributo DependsOn para garantir que um recurso seja criado somente após a criação de outro recurso específico. Ao aplicar o atributo DependsOn a um recurso, ele não será provisionado até que o recurso referenciado por DependsOn esteja totalmente pronto.

Importante

O recurso do qual DependsOn depende pode ter seu Condition avaliado como False. Um valor False não impede a criação do recurso dependente.

Os exemplos a seguir mostram duas formas de usar esse atributo:

  • Dependência de um único recurso:

    DependsOn: ResourceName
  • Dependência de vários recursos:

    DependsOn:
      - ResourceName1
      - ResourceName2

Conforme ilustrado no trecho de código abaixo, o WebServer é criado apenas depois que o DatabaseServer for criado com sucesso:

ROSTemplateFormatVersion: '2015-09-01'
Resources:
  WebServer:
    Type: ALIYUN::ECS::Instance
    DependsOn: DatabseServer
  DatabseServer:
    Type: ALIYUN::ECS::Instance
    Properties:
      ImageId: m-25l0r****
      InstanceType: ecs.t1.small

Condition

No modelo, use o atributo Condition para determinar se um recurso deve ser criado. A criação ocorre apenas se o valor da condição especificado por Condition for True.

No trecho de código a seguir, a criação do WebServer depende do valor de MaxAmount:

ROSTemplateFormatVersion: '2015-09-01'
Parameters:
  MaxAmount:
    Type: Number
    Default: 1
Conditions:
  CreateWebServer:
    Fn::Not:
      Fn::Equals:
        - 0
        - Ref: MaxAmount
Resources:
  WebServer:
    Type: ALIYUN::ECS::InstanceGroup
    Condition: CreateWebServer
    Properties:
      ImageId: m-25l0rc****
      InstanceType: ecs.t1.small
      MaxAmount:
        Ref: MaxAmount
  DatabseServer:
    Type: ALIYUN::ECS::Instance
    Properties:
      ImageId: m-25l0r****
      InstanceType: ecs.t1.small

Count

Ao especificar Count para um recurso no modelo, o ROS pré-processa o modelo e expande esse recurso em vários recursos. O modelo processado é então utilizado nas operações da pilha.

  • Por exemplo, se um recurso chamado A tiver o valor de Count igual a 3, o modelo processado não conterá o recurso A. Em vez disso, haverá três recursos: A[0], A[1] e A[2].

    Resources:
      A:
        Count: 3
        ...

    Após o processamento:

    Resources:
      A[0]:
        ...
      A[1]:
        ...
      A[2]:
        ...
    Importante

    Se o nome de um recurso expandido, como A[1], já existir no modelo original, o pré-processamento falhará e o modelo não passará na validação.

    Evite adicionar o atributo Count a recursos existentes. Isso altera o nome do recurso e aciona uma operação de exclusão.

  • O resultado final de Count deve ser um número natural. Apenas as seguintes funções são suportadas:

  • O número total de recursos no modelo processado não deve exceder o limite, que atualmente é de 300.

  • Nas Properties de um recurso com Count especificado, use o pseudoparâmetro ALIYUN::Index. Durante o pré-processamento, esse parâmetro é substituído pelo número correspondente. Por exemplo, o ALIYUN::Index usado por A[0] torna-se 0, e o ALIYUN::Index usado por A[1] torna-se 1. Não é possível usar ALIYUN::Index em outras partes do modelo.

  • Caso um recurso com Count especificado apareça em DependsOn, ele será expandido.

    DependsOn: A

    Após o processamento:

    DependsOn:
      - A[0]
      - A[1]
      - A[2]
  • Se um recurso com Count especificado aparecer na função Ref ou Fn::GetAtt, ele será expandido.

    Ref: A
    Fn::GetAtt:
      - A
      - PropertyName

    Após o processamento:

    - Ref: A[0]
    - Ref: A[1]
    - Ref: A[2]
    - Fn::GetAtt:
        - A[0]
        - PropertyName
    - Fn::GetAtt:
        - A[1]
        - PropertyName
    - Fn::GetAtt:
        - A[2]
        - PropertyName

    Quando vários recursos usam Count e possuem relações de referência, combine-os com Fn::Select e ALIYUN::Index.

    Fn::Select:
      - Ref: ALIYUN::Index
      - Ref: A

    Tome A como exemplo. B referencia A, e o Count de B é 2. Após a transformação, partes das expressões em B[0] e B[1] ficam assim:

    - Ref: A[0]
    - Ref: A[1]
  • Se um recurso possuir o atributo Count, o atributo DependsOn também aceitará expressões. As funções permitidas na expressão de DependsOn são as mesmas do atributo Count, sendo possível usar também o pseudoparâmetro ALIYUN::Index. A tabela a seguir descreve o formato da expressão e os resultados de cálculo permitidos.

    Formato

    Exemplo

    Resultado de cálculo permitido

    Dicionário

    Fn::Split:
      - ','
      - Server1,Server2

    null

    Se o valor for null, o atributo DependsOn será removido.

    String

    • Valores de string vazia resultam na remoção do atributo DependsOn.

    • Strings não vazias devem corresponder a um nome de recurso válido.

    Lista

    • Itens de lista nulos ou strings vazias são descartados.

    • Listas vazias causam a remoção do atributo DependsOn.

    • Em listas não vazias, cada item deve ser uma string e um nome de recurso válido.

    Lista

    - Server0
    - Fn::Split:
        - ','
        - Server1,Server2

    Um item da lista pode ser um dicionário ou uma string. Os resultados de cálculo permitidos variam conforme o tipo do item:

    • Para itens de lista do tipo dicionário, a expressão é calculada. Os resultados permitidos são:

      • Valores null ou strings vazias resultam no descarte do item.

      • Caso contrário, deve ser uma string e um nome de recurso válido.

    • Itens de lista do tipo string devem ser nomes de recursos válidos.

    Nota

    Se a lista estiver vazia, o atributo DependsOn será removido.

    String

    Server0

    String

    Nenhum processamento adicional é realizado.

    O modelo de exemplo a seguir controla a concorrência para recursos criados com Count. O parâmetro Count define a quantidade de recursos a serem criados, enquanto ParallelCount estabelece o número máximo de criações simultâneas.

    ROSTemplateFormatVersion: '2015-09-01'
    Parameters:
      Count:
        Type: Number
      ParallelCount:
        Type: Number
    Resources:
      WaitConditionHandle:
        Type: ALIYUN::ROS::WaitConditionHandle
        Count:
          Ref: Count
        DependsOn:
          Fn::Select:
            - Fn::Calculate:
                - 1-{0}//{1}
                - 0
                - - Fn::Min:
                      - Ref: ALIYUN::Index
                      - Ref: ParallelCount
                  - Ref: ParallelCount
            - - Fn::Replace:
                  - index:
                      Fn::Calculate:
                        - '{0}-{1}'
                        - 0
                        - - Ref: ALIYUN::Index
                          - Ref: ParallelCount
                  - WaitConditionHandle[index]

    O modelo processado varia conforme os valores de Count e ParallelCount:

    • Definindo Count como 3 e ParallelCount como 1, o modelo processado será:

      ROSTemplateFormatVersion: '2015-09-01'
      Resources:
        WaitConditionHandle[0]:
          Type: ALIYUN::ROS::WaitConditionHandle
        WaitConditionHandle[1]:
          Type: ALIYUN::ROS::WaitConditionHandle
          DependsOn: WaitConditionHandle[0]
        WaitConditionHandle[2]:
          Type: ALIYUN::ROS::WaitConditionHandle
          DependsOn: WaitConditionHandle[1]
      Parameters:
        Count:
          Type: Number
        ParallelCount:
          Type: Number
    • Com Count igual a 5 e ParallelCount igual a 2, o resultado do processamento é:

      ROSTemplateFormatVersion: '2015-09-01'
      Resources:
        WaitConditionHandle[0]:
          Type: ALIYUN::ROS::WaitConditionHandle
        WaitConditionHandle[1]:
          Type: ALIYUN::ROS::WaitConditionHandle
        WaitConditionHandle[2]:
          Type: ALIYUN::ROS::WaitConditionHandle
          DependsOn: WaitConditionHandle[0]
        WaitConditionHandle[3]:
          Type: ALIYUN::ROS::WaitConditionHandle
          DependsOn: WaitConditionHandle[1]
        WaitConditionHandle[4]:
          Type: ALIYUN::ROS::WaitConditionHandle
          DependsOn: WaitConditionHandle[2]
      Parameters:
        Count:
          Type: Number
        ParallelCount:
          Type: Number
    • Para Count definido como 5 e ParallelCount como 3, o modelo processado fica assim:

      ROSTemplateFormatVersion: '2015-09-01'
      Resources:
        WaitConditionHandle[0]:
          Type: ALIYUN::ROS::WaitConditionHandle
        WaitConditionHandle[1]:
          Type: ALIYUN::ROS::WaitConditionHandle
        WaitConditionHandle[2]:
          Type: ALIYUN::ROS::WaitConditionHandle
        WaitConditionHandle[3]:
          Type: ALIYUN::ROS::WaitConditionHandle
          DependsOn: WaitConditionHandle[0]
        WaitConditionHandle[4]:
          Type: ALIYUN::ROS::WaitConditionHandle
          DependsOn: WaitConditionHandle[1]
      Parameters:
        Count:
          Type: Number
        ParallelCount:
          Type: Number

Abaixo está um modelo de exemplo para Count. Ele cria um grupo de EIPs e uma quantidade equivalente de instâncias ECS, vinculando cada EIP a uma instância ECS.

ROSTemplateFormatVersion: '2015-09-01'
Parameters:
  Count:
    Type: Number
Resources:
  Eip:
    Type: ALIYUN::VPC::EIP
    Count:
      Ref: Count
    Properties:
      Bandwidth: 5
  Servers:
    Type: ALIYUN::ECS::InstanceGroup
    Properties:
      MinAmount:
        Ref: Count
      MaxAmount:
        Ref: Count
      AllocatePublicIP: false
      ...: Null
  EipBind:
    Type: ALIYUN::VPC::EIPAssociation
    Count:
      Ref: Count
    Properties:
      InstanceId:
        Fn::Select:
          - Ref: ALIYUN::Index
          - Fn::GetAtt:
              - Servers
              - InstanceIds
      AllocationId:
        Fn::Select:
          - Ref: ALIYUN::Index
          - Ref: Eip
Outputs:
  InstanceIds:
    Value:
      Fn::GetAtt:
        - Servers
        - InstanceIds
  AllocationIds:
    Value:
      Ref: Eip
  EipAddresses:
    Value:
      Fn::GetAtt:
        - Eip
        - EipAddress

Após o processamento:

ROSTemplateFormatVersion: '2015-09-01'
Parameters:
  Count:
    Type: Number
Resources:
  Eip[0]:
    Type: ALIYUN::VPC::EIP
    Properties:
      Bandwidth: 5
  Eip[1]:
    Type: ALIYUN::VPC::EIP
    Properties:
      Bandwidth: 5
  Servers:
    Type: ALIYUN::ECS::InstanceGroup
    Properties:
      MinAmount:
        Ref: Count
      MaxAmount:
        Ref: Count
      AllocatePublicIP: false
      ...: Null
  EipBind[0]:
    Type: ALIYUN::VPC::EIPAssociation
    Properties:
      InstanceId:
        Fn::Select:
          - 0
          - Fn::GetAtt:
              - Servers
              - InstanceIds
      AllocationId:
        Ref: Eip[0]
  EipBind[1]:
    Type: ALIYUN::VPC::EIPAssociation
    Properties:
      InstanceId:
        Fn::Select:
          - 1
          - Fn::GetAtt:
              - Servers
              - InstanceIds
      AllocationId:
        Ref: Eip[1]
Outputs:
  InstanceIds:
    Value:
      Fn::GetAtt:
        - Servers
        - InstanceIds
  AllocationIds:
    Value:
      - Ref: Eip[0]
      - Ref: Eip[1]
  EipAddresses:
    Value:
      - Fn::GetAtt:
          - Eip[0]
          - EipAddress
      - Fn::GetAtt:
          - Eip[1]
          - EipAddress

Exemplo de declaração de recurso

Veja a seguir um exemplo típico de declaração de recurso:

Resources:
  WebServer:
    Type: ALIYUN::ECS::Instance
    Properties:
      ImageId: m-25l0r****
      InstanceType: ecs.t1.small
      SecurityGroupId: sg-25zwc****
      ZoneId: cn-beijing-b
      Tags:
        - Key: Department1
          Value: HumanResource
        - Key: Department2
          Value: Finance
  ScalingConfiguration:
    Type: ALIYUN::ESS::ScalingConfiguration
    Properties:
      ImageId: ubuntu_14_04_64_20G_aliaegis_2015****.vhd
      InstanceType: ecs.t1.small
      InstanceId: i-25xhh****
      InternetChargeType: PayByTraffic
      InternetMaxBandwidthIn: 1
      InternetMaxBandwidthOut: 20
      SystemDisk_Category: cloud
      ScalingGroupId: bwhtvpcBcKYac9fe3vd0****
      SecurityGroupId: sg-25zwc****
      DiskMappings:
        - Size: 10
        - Category: cloud
          Size: 10