

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

# Créez des configurations de ressources réutilisables qui peuvent être incluses dans les modèles à l'aide de CloudFormation modules
<a name="modules"></a>

Les *modules* vous permettent d’empaqueter des configurations de ressources pour les inclure dans les modèles de pile, de manière transparente, gérable et reproductible. Les modules peuvent encapsuler les configurations de service courantes et les bonnes pratiques en tant que blocs de création modulaires et personnalisables à inclure dans vos modèles de pile. Les modules vous permettent d'inclure des configurations de ressources qui intègrent les bonnes pratiques, les connaissances des experts du secteur et les directives acceptées (pour des domaines tels que la sécurité, la conformité, la gouvernance et les réglementations sectorielles) dans vos modèles, sans avoir à acquérir une connaissance approfondie des subtilités de l'implémentation des ressources.

Par exemple, un expert du domaine des réseaux pourrait créer un module contenant des groupes de sécurité intégrés et des ingress/egress règles conformes aux directives de sécurité. Vous pouvez ensuite inclure ce module dans votre modèle pour mettre en place une infrastructure réseau sécurisée dans votre pile, sans avoir à perdre du temps à comprendre le fonctionnement des sous-réseaux VPCs, des groupes de sécurité et des passerelles. Et comme les modules sont versionnés, si les directives de sécurité changent au fil du temps, l'auteur du module peut créer une nouvelle version du module intégrant ces modifications.

Les caractéristiques de l'utilisation des modules dans vos modèles sont les suivantes :
+ **Prévisibilité** — Un module doit respecter le schéma qu'il enregistre dans le CloudFormation registre, afin que vous sachiez quelles ressources il peut utiliser une fois que vous l'avez inclus dans votre modèle.
+ **Réutilisabilité** : vous pouvez utiliser le même module sur plusieurs modèles et comptes.
+ **Traçabilité** : CloudFormation conserve la connaissance des ressources d'une pile qui ont été provisionnées à partir d'un module, ce qui vous permet de comprendre facilement la source des modifications apportées aux ressources.
+ **Facilité de gestion — Une fois que vous avez enregistré un module, vous pouvez le gérer via le CloudFormation registre, y compris le contrôle des versions et la disponibilité** des comptes et des régions.

Un module peut contenir :
+ une ou plusieurs ressources à provisionner à partir du module, ainsi que toutes les données associées, telles que les sorties ou les conditions ;
+ tous les paramètres du module, qui vous permettent de spécifier des valeurs personnalisées chaque fois que le module est utilisé.

Pour plus d'informations sur le développement de modules, consultez la section [Développement de modules](https://docs.aws.amazon.com/cloudformation-cli/latest/userguide/modules.html) dans le *guide de l'utilisateur de la CloudFormation CLI*.

**Topics**
+ [Considérations relatives à l'utilisation de modules](#module-considerations)
+ [Compréhension de la gestion des versions des modules](module-versioning.md)
+ [Utiliser les modules du registre CloudFormation privé](modules-using.md)
+ [Utilisez des paramètres pour spécifier les valeurs des modules](module-using-params.md)
+ [Ressources du module de référence dans les CloudFormation modèles](module-ref-resources.md)

## Considérations relatives à l'utilisation de modules
<a name="module-considerations"></a>
+ L'utilisation d'un module n'implique aucun coût supplémentaire. Vous ne payez que pour les ressources que ces modules résolvent dans vos piles.
+ CloudFormation les quotas, tels que le nombre maximum de ressources autorisées dans une pile ou la taille maximale du corps du modèle, s'appliquent au modèle traité, que les ressources incluses dans ce modèle proviennent de modules ou non. Pour de plus amples informations, veuillez consulter [Comprendre les CloudFormation quotas](cloudformation-limits.md).
+ Les balises que vous spécifiez au niveau de la pile sont affectées aux ressources individuelles dérivées du module.
+ Les scripts d'assistance spécifiés au niveau du module ne se propagent pas aux ressources individuelles contenues dans le module lors du traitement du CloudFormation modèle.
+ Les sorties spécifiées dans le module sont propagées aux sorties au niveau du modèle.

  Chaque sortie se voit attribuer un ID logique qui est une concaténation du nom logique du module et du nom de sortie tel que défini dans le module. Pour de plus amples informations, veuillez consulter [Obtenir des sorties exportées à partir d'une CloudFormation pile déployée](using-cfn-stack-exports.md).
+ Les paramètres spécifiés dans le module ne sont pas propagés aux paramètres au niveau du modèle.

  Toutefois, vous pouvez créer des paramètres au niveau du modèle qui font référence aux paramètres au niveau du module. Pour de plus amples informations, veuillez consulter [Utilisez des paramètres pour spécifier les valeurs des modules](module-using-params.md).

# Compréhension de la gestion des versions des modules
<a name="module-versioning"></a>

Le CloudFormation registre agit comme un référentiel dans lequel vous pouvez enregistrer et gérer des modules à utiliser au sein de votre région Compte AWS et de votre région. Vous pouvez enregistrer des modules provenant de différentes sources AWS, y compris des éditeurs tiers, et vos propres extensions personnalisées, dans votre compte et dans votre région. Pour de plus amples informations, veuillez consulter [Gestion des extensions avec le CloudFormation registre](registry.md).

Les modules peuvent avoir différentes versions, vous pouvez donc spécifier la version d’un module que vous souhaitez utiliser. Cette fonctionnalité de gestion des versions est particulièrement utile lorsque vous devez mettre à jour ou modifier un module sans perturber les piles existantes qui en dépendent.

Gardez les considérations suivantes à l’esprit lorsque vous utilisez plusieurs versions d’un module :
+ Pendant les opérations de pile, CloudFormation utilise la version du module actuellement enregistrée comme version par défaut dans la région Compte AWS et dans laquelle l'opération de pile est effectuée. Cela inclut les modules imbriqués dans d'autres modules.

  Par conséquent, sachez que si différentes versions du même module sont enregistrées comme version par défaut dans différents comptes ou régions, l’utilisation du même modèle peut entraîner des résultats différents.
+ Pendant les opérations de pile, CloudFormation utilise la version de la ressource actuellement enregistrée comme version par défaut dans la région Compte AWS et dans laquelle l'opération de pile est effectuée. Cela inclut les ressources générées par l'inclusion de modules.
+ La modification de la version par défaut d’un module ne lance aucune opération de mise à jour de la pile. Toutefois, la prochaine fois que vous effectuerez une opération de pile avec un modèle contenant ce module, comme une mise à jour de pile, la nouvelle version par défaut CloudFormation sera utilisée dans l'opération.

  La seule exception est d’effectuer une mise à jour de pile avec l’option spécifiée **Utiliser le modèle précédent**, comme décrit ci-dessous.
+ Pour les opérations de mise à jour de pile, si vous spécifiez l'option **Utiliser le CloudFormation modèle précédent**, utilisez le modèle traité précédent pour la mise à jour de pile et ne retraitez pas le module pour les modifications que vous pourriez y avoir apportées.
+ Pour garantir des résultats uniformes, si vous incluez des modules dans un modèle de pile à utiliser avec des ensembles de pile, vous devez vous assurer que la même version du module est configurée de la même manière que la version par défaut dans tous les comptes et régions dans lesquels vous prévoyez de déployer vos instances de pile. Cela inclut les modules imbriqués dans d'autres modules. Pour de plus amples informations, veuillez consulter [Gérez les piles entre les comptes et les régions avec StackSets](what-is-cfnstacksets.md).

## Conditions requises pour activer des modules publics tiers
<a name="requirements-for-modules"></a>

Pour activer avec succès un module public tiers dans votre compte et votre région, les conditions suivantes doivent être remplies pour chaque extension publique tierce (ressource ou module) incluse dans le module :
+ **Activation de l’extension** : l’extension doit être activée dans le compte et dans la région dans lesquels vous souhaitez l’utiliser. Pour de plus amples informations, veuillez consulter [Utiliser des extensions publiques tierces depuis le CloudFormation registre](registry-public.md).
+ **Enregistrement d’alias** : si l’extension du module utilise un alias de nom de type, l’extension doit être enregistrée dans votre compte et votre région en utilisant le même alias de nom de type. Pour de plus amples informations, veuillez consulter [Utilisez des alias pour faire référence aux extensions](registry-public.md#registry-public-enable-alias).
+ **Compatibilité des versions** : la version d’extension actuellement activée doit être l’une des versions majeures prises en charge de cette extension spécifiée dans le module.

Si les extensions et versions d'extension publiques tierces ne sont pas activées correctement, l'opération CloudFormation échouera et une erreur indiquera les extensions et les versions qui doivent être activées pour que le module puisse être activé avec succès.

# Utiliser les modules du registre CloudFormation privé
<a name="modules-using"></a>

Cette rubrique explique comment utiliser les modules dans les CloudFormation modèles. Considérez les modules comme des ensembles de ressources prédéfinis que vous pouvez ajouter à vos modèles.

Pour utiliser un module, procédez comme suit :
+ **Enregistrer le module** — Vous enregistrez les modules dans le CloudFormation registre en tant qu'extensions privées. Assurez-vous qu’il est enregistré dans la région Compte AWS et dans laquelle vous travaillez. Pour de plus amples informations, veuillez consulter [CloudFormation concepts de registre](registry-concepts.md).
+ **Incluez-le dans votre modèle** : ajoutez le module à la [Resources](resources-section-structure.md) section de votre CloudFormation modèle, comme vous le feriez avec d'autres ressources. Vous devrez également fournir toutes les propriétés requises pour le module.
+ **Création ou mise à jour de la pile** : lorsque vous lancez une opération de pile, CloudFormation génère un modèle traité qui transforme tous les modules inclus en ressources appropriées. 
+ **Aperçu des modifications** : avant d’apporter des modifications, vous pouvez utiliser un ensemble de modifications pour voir quelles ressources seront ajoutées ou modifiées. Pour de plus amples informations, veuillez consulter [Mettre à jour CloudFormation les piles à l'aide d'ensembles de modifications](using-cfn-updating-stacks-changesets.md).

Prenons l'exemple suivant : Vous disposez d'un modèle qui contient à la fois des ressources et des modules. Le modèle contient une ressource individuelle, `ResourceA`, ainsi qu’un module, `ModuleParent`. Ce module contient deux ressources, `ResourceB` et `ResourceC`, ainsi qu’un module imbriqué, `ModuleChild`. `ModuleChild` contient une seule ressource, `ResourceD`. Si vous créez une pile à partir de ce modèle, CloudFormation traitez le modèle et associez les modules aux ressources appropriées. La pile obtenue comporte quatre ressources : `ResourceA`, `ResourceB`, `ResourceC`, et `ResourceD`.

![\[Au cours d'une opération de pile, CloudFormation résout les deux modules inclus dans le modèle de pile en quatre ressources appropriées.\]](http://docs.aws.amazon.com/fr_fr/AWSCloudFormation/latest/UserGuide/images/modules-resource-inclusion.png)


CloudFormation permet de savoir quelles ressources d'une pile ont été créées à partir de modules. Vous pouvez afficher ces informations dans les onglets **Événements**, **Ressources** et** Écarts** pour une pile donnée. Elles sont également comprises dans les prévisualisations des ensembles de modifications.

Les modules se distinguent des ressources d'un modèle, car ils adhèrent à la convention de dénomination en quatre parties suivante, par opposition à la convention typique en trois parties utilisée par les ressources :

```
organization::service::use-case::MODULE
```

# Utilisez des paramètres pour spécifier les valeurs des modules
<a name="module-using-params"></a>

Dans CloudFormation, vous pouvez utiliser les paramètres du modèle pour personnaliser vos piles en fournissant des valeurs d'entrée lors de la création ou de la mise à jour des piles. Ces paramètres vous permettent de modifier certains aspects de la pile en fonction de vos besoins. Pour plus d’informations sur la définition des paramètres de modèle, consultez [CloudFormation Parameterssyntaxe du modèle](parameters-section-structure.md).

De même, les modules peuvent également avoir des paramètres. Ces paramètres de module vous permettent d’entrer des valeurs personnalisées dans le module à partir du modèle (ou d’un autre module) qui l’utilise. Le module peut ensuite utiliser ces valeurs personnalisées pour définir les valeurs de propriété des ressources qu’il contient.

Vous pouvez également définir des paramètres de modèle qui définissent les propriétés du module, afin de pouvoir saisir des valeurs qui seront transmises au module au moment de l’opération de pile. 

Si un module contient un module imbriqué qui possède ses propres paramètres de module, vous pouvez soit :
+ spécifier les valeurs des paramètres du module imbriqué directement dans le module parent ;
+ définir les paramètres correspondants du module dans le module parent qui permettent de configurer les paramètres du module imbriqué avec le modèle (ou le module) dans lequel le module parent est contenu.

## Utilisation des paramètres de modèle pour spécifier les valeurs des paramètres de module
<a name="module-using-params-example-1"></a>

L'exemple suivant montre comment définir des paramètres de modèle qui transmettent des valeurs à un module.

Ici, le modèle contenant `My::S3::SampleBucket::MODULE` définit un paramètre de modèle, `BucketName`, qui permet à l’utilisateur de spécifier un nom de compartiment S3 pendant l’opération de pile.

```
# Template containing My::S3::SampleBucket::MODULE
Parameters:
  BucketName:
    Description: Name for your sample bucket
    Type: String
Resources:
  MyBucket:
    Type: 'My::S3::SampleBucket::MODULE'
    Properties:
      BucketName: !Ref BucketName
```

## Spécification des propriétés sur les ressources d'un module enfant à partir du module parent
<a name="module-using-params-example-2"></a>

L'exemple suivant illustre comment spécifier des valeurs de paramètre dans un module imbriqué dans un autre module.

Ce premier module, `My::S3::SampleBucketPrivate::MODULE`, sera le module enfant. Il définit deux paramètres : `BucketName` et `AccessControl`. Les valeurs spécifiées pour ces paramètres permettent de spécifier les propriétés `BucketName` et `AccessControl` de la ressource `AWS::S3::Bucket` contenue par le module. Ci-dessous se trouve le fragment de modèle pour `My::S3::SampleBucketPrivate::MODULE`.

```
# My::S3::SampleBucketPrivate::MODULE
AWSTemplateFormatVersion: 2010-09-09
Description: A sample S3 Bucket with Versioning and DeletionPolicy.
Parameters:
  BucketName:
    Description: Name for the bucket
    Type: String
  AccessControl:
    Description: AccessControl for the bucket
    Type: String
Resources:
  S3Bucket:
    Type: AWS::S3::Bucket
    Properties:
      BucketName: !Ref BucketName
      AccessControl: !Ref AccessControl
      DeletionPolicy: Retain
      VersioningConfiguration:
        Status: Enabled
```

Ensuite, le module précédent est imbriqué dans un module parent, `My::S3::SampleBucket::MODULE`. Le module parent, `My::S3::SampleBucket::MODULE`, définit les paramètres du module enfant de la manière suivante :
+ Il définit le paramètre `AccessControl` de `My::S3::SampleBucketPrivate::MODULE` à `Private`.
+ Pour `BucketName`, il définit un paramètre de module qui permettra de spécifier le nom du compartiment dans le modèle (ou le module) qui contient `My::S3::SampleBucket::MODULE`.

```
# My::S3::SampleBucket::MODULE
AWSTemplateFormatVersion: 2010-09-09
Description: A sample S3 Bucket. With Private AccessControl.
Parameters:
  BucketName:
    Description: Name for your sample bucket
    Type: String
Resources:
  MyBucket:
    Type: 'My::S3::SampleBucketPrivate::MODULE'
    Properties:
      BucketName: !Ref BucketName
      AccessControl: Private
```

## Spécification des contraintes pour les paramètres de module
<a name="modules-using-parameters-constraints"></a>

Les paramètres du module ne prennent pas en charge l’application de Type ou Contrainte. Pour effectuer une vérification des contraintes sur un paramètre de module, créez un paramètre de modèle avec les contraintes souhaitées. Référencez ensuite ce paramètre de modèle dans le paramètre de votre module. Pour plus d’informations sur la définition des paramètres de modèle, consultez [CloudFormation Parameterssyntaxe du modèle](parameters-section-structure.md).

# Ressources du module de référence dans les CloudFormation modèles
<a name="module-ref-resources"></a>

Dans les CloudFormation modèles, vous devez souvent définir les propriétés d'une ressource en fonction du nom ou de la propriété d'une autre ressource. Pour de plus amples informations, veuillez consulter [Référencement des ressources](resources-section-structure.md#using-cross-resource-references).

Pour référencer une ressource contenue dans un module de votre CloudFormation modèle, vous devez combiner deux noms logiques :
+ Le nom logique que vous avez donné au module lui-même lorsque vous l’avez inclus dans votre modèle.
+ Le nom logique de la ressource spécifique de ce module.

Vous pouvez combiner ces deux noms logiques avec ou sans point (.) entre eux. Par exemple, si le nom logique du module est `MyModule` et que le nom logique de la ressource est `MyBucket`, vous pouvez faire référence à cette ressource sous le nom `MyModule.MyBucket` ou `MyModuleMyBucket`.

Pour trouver les noms logiques des ressources à l'intérieur d'un module, vous pouvez consulter le schéma du module, qui est disponible dans le CloudFormation registre ou en utilisant l'[https://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_DescribeType.html](https://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_DescribeType.html)opération. Le schéma répertorie toutes les ressources et leurs noms logiques qui font partie du module.

Une fois que vous avez le nom logique complet, vous pouvez utiliser des CloudFormation fonctions telles que `GetAtt` et `Ref` pour accéder aux valeurs des propriétés sur les ressources du module. 

Par exemple, vous avez un module `My::S3::SampleBucket::MODULE` qui contient une ressource `AWS::S3::Bucket` avec le nom logique `S3Bucket`. Pour faire référence au nom de ce compartiment à l’aide de la fonction `Ref`, vous combinez le nom du module dans votre modèle (`MyBucket`) avec le nom logique de la ressource dans le module (`S3Bucket`). Le nom logique complet est `MyBucket.S3Bucket` ou `MyBucketS3Bucket`.

**Exemple de modèle**  
Le modèle suivant crée un compartiment S3 à l’aide du module `My::S3::SampleBucket::MODULE`. Il crée également une file d’attente Amazon SQS et lui attribue le même nom que le nom du compartiment du module. De plus, le modèle génère l’Amazon Resource Name (ARN) du compartiment S3 créé.

```
# Template that uses My::S3::SampleBucket::MODULE
Parameters:
  BucketName:
    Description: Name for your sample bucket
    Type: String
Resources:
  MyBucket:
    Type: My::S3::SampleBucket::MODULE
    Properties:
      BucketName: !Ref BucketName
  exampleQueue:
    Type: AWS::SQS::Queue
    Properties:
      QueueName: !Ref MyBucket.S3Bucket
Outputs:
  BucketArn:
    Value: !GetAtt MyBucket.S3Bucket.Arn
```