Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.
Dividi un modello in pezzi riutilizzabili usando pile annidate
Man mano che la tua infrastruttura cresce, potresti ritrovarti a creare ripetutamente configurazioni di risorse identiche su più modelli. Per evitare questa ridondanza, puoi separare queste configurazioni comuni in modelli dedicati. Quindi, puoi utilizzare la AWS::CloudFormation::Stackrisorsa in altri modelli per fare riferimento a questi modelli dedicati, creando pile annidate.
Ad esempio, supponete di avere una configurazione di bilanciamento del carico che utilizzate per la maggior parte degli stack. Invece di copiare e incollare le stesse configurazioni nei modelli, puoi creare un modello dedicato per il sistema di load balancer. Quindi, puoi fare riferimento a questo modello all'interno di altri modelli che richiedono la stessa configurazione del load balancer.
Gli stack annidati possono a loro volta contenere altri stack nidificati, dando luogo a una gerarchia di pile, come illustrato nel diagramma seguente. Lo stack principale è lo stack di primo livello a cui appartengono in ultima analisi tutti gli stack nidificati. Ogni stack nidificato ha uno stack principale immediato. Per il primo livello di stack nidificati, lo stack principale è anche lo stack principale.
-
Lo stack A è lo stack padre per tutti gli altri stack nidificati della gerarchia.
-
Per lo stack B, lo stack A è sia lo stack padre che lo stack radice.
-
Per lo stack D, lo stack C è lo stack padre; mentre per lo stack C, lo stack padre è lo stack B.

Argomenti
Esempio prima e dopo di suddivisione di un modello
Questo esempio dimostra come è possibile prendere un unico CloudFormation modello di grandi dimensioni e riorganizzarlo in un design più strutturato e riutilizzabile utilizzando modelli annidati. Inizialmente, il modello «Before nesting stacks» mostra tutte le risorse definite in un unico file. Questo può diventare complicato e difficile da gestire man mano che il numero di risorse aumenta. Il modello «After nesting stacks» suddivide le risorse in modelli più piccoli e separati. Ogni stack annidato gestisce un insieme specifico di risorse correlate, rendendo la struttura generale più organizzata e facile da gestire.
Prima di nidificare le pile |
Dopo aver annidato le pile |
---|---|
|
|
Esempio di architettura di stack annidati
Questa sezione illustra un'architettura di stack nidificata costituita da uno stack di primo livello che fa riferimento a uno stack nidificato. Lo stack annidato implementa una funzione Lambda Node.js, riceve un valore di parametro dallo stack di primo livello e restituisce un output esposto attraverso lo stack di primo livello.
Argomenti
Passaggio 1: creare un modello per lo stack annidato sul sistema locale
L'esempio seguente mostra il formato del modello di stack annidato.
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
Fase 2: Creare un modello per lo stack di primo livello sul sistema locale
L'esempio seguente mostra il formato del modello di stack di primo livello e la AWS::CloudFormation::Stackrisorsa che fa riferimento allo stack creato nel passaggio precedente.
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
Fase 3: Package e distribuzione dei modelli
Nota
Quando si lavora con i modelli a livello locale, il AWS CLI package comando può aiutarti a preparare i modelli per la distribuzione. Gestisce automaticamente il caricamento di elementi locali su Amazon S3 (TemplateURL
incluso) e genera un nuovo file modello con riferimenti aggiornati a queste posizioni S3. Per ulteriori informazioni, consulta Carica gli artefatti locali in un bucket S3 con AWS CLI.
Successivamente, puoi utilizzare il packagecomando per caricare il modello annidato in un bucket Amazon S3.
aws cloudformation package \ --s3-bucket
amzn-s3-demo-bucket
\ --template/path_to_template/top-level-template.yaml
\ --output-template-filepackaged-template.yaml
\ --output json
Il comando genera un nuovo modello nel percorso specificato da. --output-template-file
Sostituisce il TemplateURL
riferimento con la posizione Amazon S3, come illustrato di seguito.
Modello risultante
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
Dopo aver eseguito il package comando, puoi distribuire il modello elaborato utilizzando il comando. deploy Per gli stack annidati che contengono risorse IAM, è necessario riconoscere le funzionalità IAM includendo l'opzione. --capabilities
aws cloudformation deploy \ --template-file
packaged-template.yaml
\ --stack-namestack-name
\ --capabilities CAPABILITY_NAMED_IAM
Esecuzione di operazioni di stack su stack annidati
Quando si lavora con pile annidate, è necessario gestirle con attenzione durante le operazioni. Alcune operazioni relative agli stack, come gli aggiornamenti degli stack, devono essere avviate dallo stack principale anziché eseguite direttamente sugli stack nidificati. Quando aggiorni uno stack principale, verranno aggiornati solo gli stack nidificati con modifiche al modello.
Inoltre, la presenza degli stack annidati può influire sulle operazioni sullo stack principale. Ad esempio, se uno stack nidificato rimane bloccato nello UPDATE_ROLLBACK_IN_PROGRESS
stato, lo stack principale aspetterà che lo stack nidificato completi il suo rollback prima di continuare. Prima di procedere con le operazioni di aggiornamento, assicurati di disporre delle autorizzazioni IAM per annullare un aggiornamento dello stack nel caso in cui venga ripristinato. Per ulteriori informazioni, consulta Controlla CloudFormation l'accesso con AWS Identity and Access Management.
Utilizza le seguenti procedure per trovare lo stack principale e gli stack annidati.
Per visualizzare lo stack radice di uno stack nidificato
-
Nella pagina Stacks, scegli il nome dello stack annidato di cui vuoi visualizzare lo stack principale.
Gli stack nidificati mostrano NESTED sopra il nome dello stack.
-
Nella scheda Informazioni sullo stack, nella sezione Panoramica, scegliete il nome dello stack elencato come Root stack.
Per visualizzare gli stack nidificati che appartengono a uno stack radice
-
Dalla pila principale di cui desideri visualizzare gli stack annidati, scegli la scheda Risorse.
-
Nella colonna Tipo, cerca risorse di tipo. AWS::CloudFormation::Stack