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.
Diviser un modèle en éléments réutilisables à l’aide de piles imbriquées
À mesure que votre infrastructure se développe, vous pouvez être amené à créer de manière répétée des configurations de ressources identiques dans plusieurs modèles. Pour éviter cette redondance, vous pouvez séparer ces configurations communes dans des modèles dédiés. Vous pouvez ensuite utiliser la ressource AWS::CloudFormation::Stack dans d’autres modèles pour référencer ces modèles dédiés, créant ainsi des piles imbriquées.
Par exemple, supposons que vous disposiez d’une configuration d’équilibreur de charge que vous utilisez pour la plupart de vos piles. Au lieu de copier et coller les mêmes configurations dans vos modèles, vous pouvez créer un modèle dédié pour l'équilibreur de charge. Vous pouvez alors référencer ce modèle à partir d’autres modèles qui nécessitent la même configuration d’équilibreur de charge.
Les piles imbriquées peuvent elles-mêmes contenir d’autres piles imbriquées, ce qui donne une hiérarchie de piles, comme le montre le schéma ci-dessous. La pile racine est la pile de niveau supérieur à laquelle toutes les piles imbriquées appartiennent en fin de compte. Chaque pile imbriquée a une pile parent immédiate. Pour le premier niveau de piles imbriquées, la pile racine est également la pile parent.
-
La pile A est la pile racine de toutes les autres piles, imbriquées, dans la hiérarchie.
-
Pour la pile B, la pile A est à la fois la pile parent et la pile racine.
-
Pour la pile D, la pile C est la pile parent, tandis que pour la pile C, la pile B est la pile parent.
Rubriques
Exemple avant et après la division d’un modèle
Cet exemple montre comment vous pouvez prendre un seul modèle CloudFormation de grande taille et le réorganiser en une conception plus structurée et réutilisable à l’aide de modèles imbriqués. Au départ, le modèle « Avant l’imbrication des piles » affiche toutes les ressources définies dans un seul fichier. Cela peut devenir confus et difficile à gérer à mesure que le nombre de ressources augmente. Le modèle « Après l’imbrication des piles » divise les ressources en modèles plus petits et distincts. Chaque pile imbriquée gère un ensemble spécifique de ressources connexes, ce qui rend la structure globale plus organisée et plus facile à maintenir.
Avant l’imbrication des piles |
Après l’imbrication des piles |
|---|---|
|
|
Exemple d’architecture de pile imbriquée
Cette section présente une architecture de pile imbriquée composée d’une pile de niveau supérieur qui fait référence à une pile imbriquée. La pile imbriquée déploie une fonction Lambda Node.js, reçoit une valeur de paramètre de la pile de niveau supérieur et renvoie une sortie qui est exposée via la pile de niveau supérieur.
Rubriques
Étape 1 : créez un modèle pour la pile imbriquée sur votre système local
L’exemple suivant montre le format du modèle de pile imbriquée.
YAML
AWSTemplateFormatVersion: 2010-09-09 Description: Nested stack template for Lambda function deployment Parameters: MemorySize: Type: Number Default: 128 MinValue: 128 MaxValue: 10240 Description: Lambda function memory allocation (128-10240 MB) Resources: LambdaFunction: Type: AWS::Lambda::Function Properties: FunctionName: !Sub "${AWS::StackName}-Function" Runtime: nodejs18.x Handler: index.handler Role: !GetAtt LambdaExecutionRole.Arn Code: ZipFile: | exports.handler = async (event) => { return { statusCode: 200, body: JSON.stringify('Hello from Lambda!') }; }; MemorySize: !Ref MemorySize LambdaExecutionRole: Type: AWS::IAM::Role Properties: AssumeRolePolicyDocument: Version: '2012-10-17' Statement: - Effect: Allow Principal: Service: lambda.amazonaws.com Action: sts:AssumeRole ManagedPolicyArns: - 'arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole' Outputs: LambdaArn: Description: ARN of the created Lambda function Value: !GetAtt LambdaFunction.Arn
Étape 2 : créez un modèle pour la pile de niveau supérieur sur votre système local
L’exemple suivant montre le format du modèle de pile de niveau supérieur et la ressource AWS::CloudFormation::Stack qui fait référence à la pile que vous avez créée à l’étape précédente.
YAML
AWSTemplateFormatVersion: 2010-09-09 Description: Top-level stack template that deploys a nested stack Resources: NestedStack: Type: AWS::CloudFormation::Stack Properties: TemplateURL: /path_to_template/nested-template.yaml Parameters: MemorySize: 256 Outputs: NestedStackLambdaArn: Description: ARN of the Lambda function from nested stack Value: !GetAtt NestedStack.Outputs.LambdaArn
Étape 3 : packagez et déployez les modèles
Note
Lorsque vous travaillez avec des modèles localement, la commande AWS CLI package peut vous aider à préparer les modèles pour le déploiement. Elle gère automatiquement le téléchargement des artefacts locaux vers Amazon S3 (y compris TemplateURL) et génère un nouveau fichier modèle avec des références mises à jour vers ces emplacements S3. Pour de plus amples informations, consultez Charger des artefacts locaux dans un compartiment S3 à l’aide de l’ AWS CLI.
Ensuite, vous pouvez utiliser la commande package pour charger le modèle imbriqué vers un compartiment Amazon S3.
aws cloudformation package \ --s3-bucketamzn-s3-demo-bucket\ --template/path_to_template/top-level-template.yaml\ --output-template-filepackaged-template.yaml\ --output json
La commande génère un nouveau modèle à l’emplacement spécifié par --output-template-file. Elle remplace la référence TemplateURL par l’emplacement Amazon S3, comme indiqué ci-dessous.
Modèle obtenu
AWSTemplateFormatVersion: 2010-09-09
Description: Top-level stack template that deploys a nested stack
Resources:
NestedStack:
Type: AWS::CloudFormation::Stack
Properties:
TemplateURL: https://s3.us-west-2.amazonaws.com/amzn-s3-demo-bucket/8b3bb7aa7abfc6e37e2d06b869484bed.template
Parameters:
MemorySize: 256
Outputs:
NestedStackLambdaArn:
Description: ARN of the Lambda function from nested stack
Value:
Fn::GetAtt:
- NestedStack
- Outputs.LambdaArn
Après avoir exécuté la commande package, vous pouvez déployer le modèle traité à l’aide de la commande deploy. Pour les piles imbriquées qui contiennent des ressources IAM, vous devez confirmer les capacités IAM en incluant l’option --capabilities.
aws cloudformation deploy \ --template-filepackaged-template.yaml\ --stack-namestack-name\ --capabilities CAPABILITY_NAMED_IAM
Exécution d’opérations sur des piles imbriquées
Lorsque vous travaillez avec des piles imbriquées, vous devez les manipuler avec précaution pendant les opérations. Certaines opérations sur les piles, telles que les mises à jour, doivent être lancées à partir de la pile racine plutôt que d’être effectuées directement sur les piles imbriquées. Lorsque vous mettez à jour une pile racine, seules les piles imbriquées dont le modèle a été modifié seront mises à jour.
De plus, la présence des piles imbriquées peut affecter les opérations sur la pile racine. Par exemple, si une pile imbriquée se bloque dans l’état UPDATE_ROLLBACK_IN_PROGRESS, la pile racine attendra que cette pile imbriquée restaure son état avant de continuer. Avant de procéder aux opérations de mise à jour, assurez-vous que vous disposez des autorisations IAM nécessaires pour annuler une mise à jour de pile en cas de restauration. Pour de plus amples informations, consultez Contrôlez CloudFormation l'accès avec AWS Identity and Access Management.
Suivez les procédures suivantes pour trouver la pile racine et les piles imbriquées.
Pour afficher la pile racine d'une pile imbriquée
-
Connectez-vous à la AWS Management Console et ouvrez la console CloudFormation à l’adresse https://console.aws.amazon.com/cloudformation
. -
Sur la page Piles, sélectionnez le nom de la pile imbriquée dont vous voulez afficher la pile racine.
Les piles imbriquées affichent NESTED au-dessus de leur nom.
-
Dans l’onglet Infos sur la pile, dans la section Présentation, sélectionnez le nom de la pile répertorié comme Pile racine.
Pour afficher les piles imbriquées qui appartiennent à une pile racine
-
Dans la pile racine dont vous voulez afficher les piles imbriquées, sélectionnez l’onglet Ressources.
-
Dans la colonne Type, recherchez les ressources de type AWS::CloudFormation::Stack.