Tous les produits
Search
Centre de documentation

Resource Orchestration Service:Resources

Dernière mise à jour :Aug 10, 2026

La section Resources décrit les propriétés de chaque ressource d'une pile ainsi que les dépendances entre elles. Vous pouvez référencer une ressource depuis d'autres ressources ou dans la section Outputs.

Types d'entités de ressource

Les entités de ressource se divisent en ressources standard et ressources de source de données. Les ressources standard se subdivisent en ressources Alibaba Cloud et ressources personnalisées, comme l'indique le tableau suivant.

Type d'entité de ressource

Description

Ressource standard (Resource)

  • Ressource Alibaba Cloud : crée, met à jour et supprime des ressources Alibaba Cloud. Le type de ressource commence par ALIYUN::.

  • Ressource personnalisée : crée une ressource avec une logique personnalisée et définit les modalités de mise à jour et de suppression. Le type de ressource commence par Custom:: ou correspond à ALIYUN::ROS::CustomResource.

    Pour plus d'informations, consultez Vue d'ensemble.

Ressource de source de données (DataSource)

Interroge les données de ressource d'un service Alibaba Cloud.

Pour plus d'informations, consultez Ressources de source de données.

Syntaxe

La section Resources comprend un ID de ressource et une description de ressource. La description de ressource est entourée d'accolades ({}). Si vous déclarez plusieurs ressources, séparez-les par des virgules (,). L'extrait de code suivant illustre la structure syntaxique de la section 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

Les paramètres sont décrits ci-après :

  • Le nom de la ressource doit être unique au sein du modèle. Utilisez ce nom pour référencer la ressource dans d'autres parties du modèle.

  • Le type de ressource (Type) indique la catégorie de ressource que vous déclarez. Par exemple, ALIYUN::ECS::Instance représente une instance ECS Alibaba Cloud. Pour obtenir la liste complète des types de ressources pris en charge par ROS, consultez Index des types de ressources.

  • Les propriétés de ressource (Properties) correspondent aux options supplémentaires que vous spécifiez pour une ressource. Par exemple, vous devez spécifier un ID d'image pour chaque instance ECS Alibaba Cloud.

Exemple

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

Si une ressource ne nécessite aucune propriété, omettez la section Properties pour cette ressource.

Une valeur de propriété peut être une chaîne de texte, une liste de chaînes, une valeur booléenne, un paramètre référencé ou une valeur de retour de fonction. Lorsque vous rédigez un modèle JSON, respectez les règles suivantes.

  • Si la valeur de propriété est une chaîne de texte, encadrez-la de guillemets doubles (" ").

  • Si la valeur de propriété est une liste de chaînes, encadrez la liste de crochets ([]).

  • Si la valeur de propriété est une fonction intrinsèque ou un paramètre référencé, encadrez-la d'accolades ({}).

Ces règles s'appliquent également lorsque vous combinez du texte, des listes, des paramètres référencés et des valeurs de retour de fonction. L'exemple suivant montre comment déclarer différents types de valeurs de propriété :

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

DeletionPolicy

Lorsque vous supprimez une ressource, deux scénarios sont possibles :

  • Si vous définissez DeletionPolicy sur Delete, la ressource elle-même est supprimée lorsqu'elle est retirée de la pile.

  • Si vous définissez DeletionPolicy sur Retain, la ressource est conservée lorsqu'elle est retirée de la pile.

Par exemple, pour conserver une instance ECS lors de la suppression de la pile, déclarez la politique comme indiqué dans l'extrait de code suivant :

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

Dans cet exemple, si la pile correspondant à ce modèle est supprimée, la ressource ECSInstance est conservée.

Important

Si une ressource dispose d'une configuration DeletionPolicy et que vous appelez l'opération DeleteStack en incluant la ressource dans le paramètre RetainResources, les principes suivants s'appliquent :

  • Si la ressource A possède DeletionPolicy=Delete dans le modèle, sa conservation dépend de son inclusion ou non dans RetainResources lors de la suppression de la pile.

  • Si la ressource A possède DeletionPolicy=Retain dans le modèle, elle est toujours conservée lors de la suppression de la pile, qu'elle soit incluse ou non dans RetainResources.

DependsOn

Dans un modèle, utilisez l'attribut DependsOn pour garantir qu'une ressource n'est créée qu'après la création d'une autre ressource spécifiée. Lorsque vous appliquez l'attribut DependsOn à une ressource, celle-ci n'est créée qu'une fois la ressource référencée par DependsOn entièrement provisionnée.

Important

La ressource dont dépend DependsOn peut voir son Condition évalué à False. Une valeur False n'affecte pas la création de la ressource dépendante.

Les exemples suivants présentent deux façons d'utiliser cet attribut :

  • Dépendance envers une seule ressource :

    DependsOn: ResourceName
  • Dépendance envers plusieurs ressources :

    DependsOn:
      - ResourceName1
      - ResourceName2

Comme l'illustre l'extrait de code suivant, WebServer est créé uniquement après la création réussie de DatabaseServer :

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

Dans un modèle, utilisez l'attribut Condition pour spécifier si une ressource doit être créée. La ressource est créée uniquement si la valeur de condition spécifiée par Condition est True.

Comme l'illustre l'extrait de code suivant, la création de WebServer dépend de la valeur 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

Dans un modèle, après avoir spécifié Count pour une ressource, ROS prétraite le modèle et développe la ressource en plusieurs instances. Le modèle traité est ensuite utilisé lors des opérations sur la pile.

  • Par exemple, si une ressource est nommée A et que sa valeur Count est 3, le modèle traité ne contiendra pas la ressource A. Il contiendra plutôt trois ressources : A[0], A[1] et A[2].

    Resources:
      A:
        Count: 3
        ...

    Après traitement :

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

    Si le nom d'une ressource développée, tel que A[1], existe déjà dans le modèle original, le prétraitement échoue et le modèle ne passe pas la validation.

    Évitez d'ajouter l'attribut Count à des ressources existantes. Cela modifie le nom de la ressource et déclenche une opération de suppression.

  • Le résultat final de Count doit être un nombre naturel. Seules les fonctions suivantes sont prises en charge :

  • Le nombre total de ressources dans le modèle traité ne doit pas dépasser la limite, qui est actuellement de 300.

  • Dans les Properties d'une ressource avec Count spécifié, vous pouvez utiliser le pseudo-paramètre ALIYUN::Index. Lors du prétraitement, ce paramètre est remplacé par le numéro correspondant. Par exemple, le ALIYUN::Index utilisé par A[0] est remplacé par 0, et le ALIYUN::Index utilisé par A[1] est remplacé par 1. Vous ne pouvez pas utiliser ALIYUN::Index ailleurs dans le modèle.

  • Si une ressource avec Count spécifié apparaît dans DependsOn, elle est développée.

    DependsOn: A

    Après traitement :

    DependsOn:
      - A[0]
      - A[1]
      - A[2]
  • Si une ressource avec Count spécifié apparaît dans la fonction Ref ou Fn::GetAtt, elle est développée.

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

    Après traitement :

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

    Si plusieurs ressources utilisent Count et ont des relations de référence, vous pouvez les utiliser avec Fn::Select et ALIYUN::Index.

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

    Prenons A comme exemple. B référence A, et le Count pour B est 2. Après transformation, certaines parties des expressions dans B[0] et B[1] sont les suivantes :

    - Ref: A[0]
    - Ref: A[1]
  • Si une ressource possède l'attribut Count, l'attribut DependsOn prend également en charge les expressions. Les fonctions utilisables dans l'expression DependsOn sont les mêmes que celles de l'attribut Count, et vous pouvez utiliser le pseudo-paramètre ALIYUN::Index. Le tableau suivant décrit le format de l'expression et les résultats de calcul autorisés.

    Format

    Exemple

    Résultat de calcul autorisé

    Dictionnaire

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

    null

    Si la valeur est null, l'attribut DependsOn est supprimé.

    Chaîne

    • Si la valeur est une chaîne vide, l'attribut DependsOn est supprimé.

    • Si la valeur est une chaîne non vide, elle doit correspondre à un nom de ressource valide.

    Liste

    • Si un élément de liste est null ou une chaîne vide, l'élément est ignoré.

    • Si la liste est vide, l'attribut DependsOn est supprimé.

    • Si la liste n'est pas vide, chaque élément doit être une chaîne et un nom de ressource valide.

    Liste

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

    Un élément de liste peut être un dictionnaire ou une chaîne. Les résultats de calcul autorisés varient selon le type d'élément :

    • Si l'élément de liste est un dictionnaire, l'expression est calculée. Les résultats de calcul autorisés sont les suivants :

      • Si la valeur est null ou une chaîne vide, l'élément est ignoré.

      • Sinon, elle doit être une chaîne et un nom de ressource valide.

    • Si l'élément de liste est une chaîne, il doit s'agir d'un nom de ressource valide.

    Remarque

    Si la liste est vide, l'attribut DependsOn est supprimé.

    Chaîne

    Server0

    Chaîne

    Aucun traitement supplémentaire n'est effectué.

    Le modèle d'exemple suivant contrôle la concurrence pour les ressources créées avec Count. Le paramètre Count spécifie le nombre de ressources à créer, et le paramètre ParallelCount spécifie le nombre maximal de créations simultanées.

    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]

    Le modèle traité varie selon les valeurs de Count et ParallelCount :

    • Si vous définissez Count sur 3 et ParallelCount sur 1, le modèle traité est le suivant :

      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
    • Si vous définissez Count sur 5 et ParallelCount sur 2, le modèle traité est le suivant :

      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
    • Si vous définissez Count sur 5 et ParallelCount sur 3, le modèle traité est le suivant :

      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

Voici un exemple de modèle pour Count. Le modèle crée un groupe d'EIP et un nombre égal d'instances ECS, puis associe chaque EIP à une instance 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

Après traitement :

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

Exemple de déclaration de ressource

Voici un exemple typique de déclaration de ressource :

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