Panoramica delle CloudFormation macro - AWS CloudFormation

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 CloudFormation macro

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 dall'interno CloudFormation dei modelli. 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 all'interno di un account, crea un modello che includa la AWS::CloudFormation::Macro risorsa, quindi crea uno stack o un set di stack con le autorizzazioni gestite automaticamente dal modello. CloudFormation StackSetsattualmente non supporta la creazione o l'aggiornamento di set di stack con autorizzazioni gestite dai servizi 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::Transform posizionata in relazione al contenuto del modello che intendi trasformare. Quando utilizzi Fn::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 aver richiamato tutte le macro del modello, 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.

Utilizza la funzione intrinseca Fn::Transform o la sezione Transform del modello per passare il contenuto del modello e i parametri associati alla funzione Lambda sottostante della macro, che restituisce il contenuto di modello elaborato.

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é non è CloudFormation possibile sapere quali risorse vengono aggiunte prima di elaborare il modello, potrebbe essere necessario riconoscere le funzionalità IAM quando si crea il set di modifiche, a seconda che le macro a cui si fa riferimento contengano risorse IAM. In questo modo, quando si esegue 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 necessari per avviare stack da modelli che fanno riferimento a macro, puoi utilizzare i package comandi and. deploy AWS CLI Per ulteriori informazioni, consultare 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 Regioni AWS dove è disponibile Lambda. 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 prima le macro e poi 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 a cui ritorna. CloudFormation Per ulteriori informazioni, consulta Ordine di valutazione delle macro .

  • Quando si utilizza la funzione di ripristino 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::ImportValue non è 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.

  • StackSets attualmente non supporta la creazione o l'aggiornamento di set di stack con autorizzazioni gestite dal servizio 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.

Consentendo l'accesso tra account alla funzione Lambda AWS , consente di creare macro in più account che fanno riferimento a tale funzione.

Per creare una definizione di macro, l'utente deve disporre delle autorizzazioni per creare uno stack o set di stack nell'account specificato.

CloudFormation Per eseguire correttamente una macro inclusa in un modello, l'utente deve disporre delle Invoke autorizzazioni per la funzione Lambda sottostante. Per evitare un potenziale aumento delle autorizzazioni, 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.