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à.
Panoramica delle macro CloudFormation
L'elaborazione di modelli mediante macro comporta due fasi principali: la creazione della macro stessa e quindi l'utilizzo della macro per eseguire l'elaborazione sui modelli.
Per creare una definizione di macro, devi creare quanto segue:
-
Una funzione Lambda per eseguire l’elaborazione dei modelli. Questa funzione Lambda accetta un frammento di modello o un intero modello e qualsiasi parametro supplementare che definisci. Restituisce quindi l'intero modello o il frammento di modello elaborato come risposta.
-
Una risorsa di tipo AWS::CloudFormation::Macro che consente agli utenti di chiamare la funzione Lambda da modelli CloudFormation. Questa risorsa specifica l'ARN della funzione Lambda da richiamare per questa macro nonché ulteriori proprietà facoltative per facilitare il debug. Per creare questa risorsa in un account, crea un modello di stack che include la risorsa
AWS::CloudFormation::Macro, quindi crea uno stack o un set di stack con autorizzazioni gestite dal cliente a partire dal modello. CloudFormation StackSets non supporta attualmente la creazione o l'aggiornamento di set di stack con autorizzazioni gestite dal servizio a partire da modelli che fanno riferimento alle macro .
Per utilizzare una macro, fai riferimento alla macro nel modello:
-
Per elaborare una sezione o parte di un modello, fai riferimento alla macro in una funzione
Fn::Transformposizionata in relazione al contenuto del modello che intendi trasformare. Quando utilizziFn::Transform, puoi anche passare qualsiasi parametro specificato di cui necessita. -
Per elaborare un intero modello, fai riferimento alla macro nella sezione Transform del modello.
Quindi, crea in genere un set di modifiche ed eseguilo. (L’elaborazione di macro può aggiungere molteplici risorse di cui potresti non essere a conoscenza. Per assicurarti di essere a conoscenza di tutte le modifiche introdotte dalle macro, ti consigliamo di utilizzare set di modifiche). CloudFormation passa il contenuto di modello specificato, insieme a eventuali altri parametri definiti, alla funzione Lambda indicata nella risorsa di macro. La funzione Lambda restituisce il contenuto di modello elaborato, che si tratti di un frammento o di un intero modello.
Dopo che tutte le macro nel modello sono state chiamate, CloudFormation genera un set di modifiche che include il contenuto del modello elaborato. Dopo aver esaminato il set di modifiche, eseguilo per applicare le modifiche.
Come creare stack in modo diretto
Per creare o aggiornare uno stack utilizzando un modello che fa riferimento a macro, crea un set di modifiche e quindi eseguilo. Un set di modifiche descrive le operazioni eseguite da CloudFormation in base al modello elaborato. L'elaborazione di macro può aggiungere molteplici risorse di cui potresti non essere a conoscenza. Per assicurarti di essere a conoscenza di tutte le modifiche introdotte dalle macro, ti consigliamo di utilizzare set di modifiche. Dopo aver esaminato il set di modifiche, puoi eseguirlo per applicare le modifiche.
Una macro può aggiungere risorse IAM al modello. Per queste risorse, CloudFormation richiede l’accettazione delle funzionalità. Poiché CloudFormation non può stabilire quali risorse vengono aggiunte prima di elaborare il modello, è possibile che tu debba accettare le funzionalità IAM quando crei il set di modifiche, a seconda che le trasformazioni contengano o meno risorse IAM. In tal modo, quando esegui il set di modifiche, CloudFormation dispone delle funzionalità necessarie per creare risorse IAM.
Per creare o aggiornare uno stack direttamente da un modello elaborato senza prima rivedere le modifiche proposte in un set di modifiche, specifica la funzionalità CAPABILITY_AUTO_EXPAND durante una richiesta CreateStack o UpdateStack. È sufficiente creare stack direttamente da un modello di stack che contiene macro se si conosce l'elaborazione della macro. Non puoi utilizzare set di modifiche con macro di set di stack; è necessario aggiornare il set di stack direttamente.
Per ulteriori informazioni, vedi CreateStack o UpdateStack nella documentazione di riferimento dell’API AWS CloudFormation.
Importante
Se il modello di set di stack contiene riferimenti a una o più macro, devi creare il set di stack direttamente dal modello elaborato, senza prima esaminare le modifiche risultanti in un set di modifiche. L'elaborazione di macro può aggiungere molteplici risorse di cui potresti non essere a conoscenza. Prima di creare o aggiornare un set di stack da un modello che fa riferimento direttamente alle macro, assicurarsi di sapere che elaborazione eseguono le macro.
Per ridurre il numero di passaggi per l’avvio di stack da modelli che fanno riferimento a macro, puoi utilizzare i comandi package e deploy AWS CLI. Per ulteriori informazioni, consulta Carica artefatti locali in un bucket S3 con la AWS CLI e Crea uno stack che includa le trasformazioni.
Considerazioni
Quando lavori con le macro, tieni presente le seguenti note e limitazioni:
-
Le macro sono supportate solo nelle Regioni AWS in cui Lambda è disponibile. Per l'elenco delle Regioni in cui Lambda è disponibile, consulta l'argomento relativo a endpoint e quote di AWS Lambda.
-
Qualsiasi frammento di modello elaborato deve essere in formato JSON valido.
-
Qualsiasi frammento di modello elaborato deve superare controlli di convalida per un'operazione di creazione o aggiornamento di stack e creazione o aggiornamento di set di stack.
-
CloudFormation risolve dapprima le macro e quindi elabora il modello. Il modello risultante deve essere in formato JSON valido e non deve superare il limite di dimensioni stabilito.
-
A causa dell'ordine in cui CloudFormation elabora gli elementi di un modello, una macro non può includere moduli nel contenuto del modello elaborato che restituisce a CloudFormation. Per ulteriori informazioni, consulta Ordine di valutazione delle macro .
-
Quando utilizzi la funzionalità di rollback dell’aggiornamento, CloudFormation utilizza una copia del modello originale. Il rollback del modello originale viene eseguito anche se il frammento incluso è stato modificato.
-
L’inclusione di macro in altre macro non funziona in quanto non vengono elaborate in modo ripetuto.
-
La funzione intrinseca
Fn::ImportValuenon è attualmente supportata nelle macro. -
Le funzioni intrinseche incluse nel modello sono valutate dopo le macro. Pertanto, il contenuto di modello elaborato restituito dalla macro può includere chiamate alle funzioni intrinseche, che vengono valutate normalmente.
-
StackSet non supporta attualmente la creazione o l’aggiornamento di set di stack con autorizzazioni gestite dal servizio a partire da modelli che fanno riferimento alle macro CloudFormation.
Autorizzazioni e ambito dell’account di macro
Puoi utilizzare le macro solo nell'account in cui sono state create come risorsa. Il nome della macro deve essere univoco in un determinato account. Tuttavia, puoi rendere disponibile la stessa funzionalità in vari account abilitando l'accesso tra più account sulla funzione Lambda sottostante e quindi creando definizioni di macro che fanno riferimento a quella funzione in molteplici account. Nell'esempio seguente, tre account contengono definizioni di macro che puntano alla stessa funzione Lambda.
Per creare una definizione di macro, l'utente deve disporre delle autorizzazioni per creare uno stack o set di stack nell'account specificato.
Affinché CloudFormation esegua senza errori una macro inclusa in un modello, l’utente deve disporre delle autorizzazioni Invoke per la funzione Lambda sottostante. Per impedire una potenziale escalation dei permessi, CloudFormation impersona l’utente durante l’esecuzione della macro.
Per ulteriori informazioni, consulta Managing permissions in AWS Lambda nella Guida per sviluppatori di AWS Lambda e Actions, resources, and condition keys for AWS Lambda in Service Authorization Reference.