Creare una logica di provisioning personalizzata con risorse personalizzate - 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à.

Creare una logica di provisioning personalizzata con risorse personalizzate

Le risorse personalizzate consentono di scrivere una logica di provisioning personalizzata nei CloudFormation modelli e di CloudFormation eseguirla ogni volta che si crea, si aggiorna (se si modifica la risorsa personalizzata) o si elimina uno stack. Ciò può essere utile quando i requisiti di provisioning coinvolgono logiche o flussi di lavoro complessi che non possono essere espressi con CloudFormation i tipi di risorse integrati.

Ad esempio, potresti voler includere risorse che non sono disponibili come tipi di CloudFormation risorse. Puoi includere tali risorse utilizzando le risorse personalizzate. In questo modo, puoi comunque gestire tutte le risorse correlate in un singolo stack.

Per definire una risorsa personalizzata nel CloudFormation modello, si utilizza il tipo di Custom::MyCustomResourceTypeNamerisorsa AWS::CloudFormation::CustomResourceor. Le risorse personalizzate richiedono una proprietà, il token di servizio, che specifica a dove vengono CloudFormation inviate le richieste, ad esempio un argomento Amazon SNS o una funzione Lambda.

I seguenti argomenti forniscono informazioni su come utilizzare le risorse personalizzate.

Nota

Il CloudFormation registro e le risorse personalizzate offrono ciascuno i propri vantaggi. Le risorse personalizzate offrono i seguenti vantaggi:

  • Non devi registrare la risorsa.

  • Puoi includere un’intera risorsa come parte di un modello senza registrazione.

  • Supportano le operazioni Create, Update e Delete.

Di seguito sono elencati alcuni vantaggi delle risorse basate sul registro:

  • Supporta la modellazione, il provisioning e la gestione di risorse applicative di terze parti

  • Supporta le operazioni CreateReadUpdate, Delete e List (CRUDL)

  • Supporta il rilevamento della deriva su tipi di risorse private e di terze parti

A differenza delle risorse personalizzate, le risorse basate sul Registro di sistema non dovranno associare un argomento Amazon SNS o una funzione Lambda per eseguire operazioni CRUDL. Per ulteriori informazioni, consulta Gestione delle estensioni con il registro di sistema di CloudFormation.

Funzionamento delle risorse personalizzate

Il processo generale di configurazione di una nuova risorsa prevede i passaggi descritti di seguito. In questi passaggi sono coinvolti due ruoli: il provider di risorse personalizzate, proprietario della risorsa personalizzata, e lo sviluppatore del modello, che crea un modello contenente un tipo di risorsa personalizzata. Questi ruoli possono essere svolti dalla stessa persona; in caso contrario, il provider di risorse personalizzate deve lavorare con lo sviluppatore del modello.

  1. Il provider di risorse personalizzate scrive la logica che determina come gestire le richieste CloudFormation e come eseguire azioni sulla risorsa personalizzata.

  2. Il provider di risorse personalizzato crea l'argomento Amazon SNS o la funzione Lambda a cui CloudFormation inviare richieste. L’argomento Amazon SNS o la funzione Lambda devono trovarsi nella stessa Regione in cui sarà creato lo stack.

  3. Il provider di risorse personalizzate comunica l’ARN dell’argomento Amazon SNS o della funzione Lambda allo sviluppatore del modello.

  4. Lo sviluppatore del modello definisce la risorsa personalizzata nel proprio CloudFormation modello. tramite un token di servizio ed eventuali parametri dei dati di input. Il token di servizio e la struttura dei dati di input sono definiti dal provider di risorse personalizzate. Il token di servizio specifica l’ARN dell’argomento Amazon SNS o della funzione Lambda ed è sempre obbligatorio, ma i dati di input sono facoltativi e dipendono dalla risorsa personalizzata.

Ora, ogni volta che qualcuno utilizza il modello per creare, aggiornare o eliminare la risorsa personalizzata, CloudFormation invia una richiesta al token di servizio specificato e quindi attende una risposta prima di procedere con l'operazione stack.

I seguenti passaggi riassumono il flusso di creazione di uno stack dal modello:

  1. CloudFormation invia una richiesta al token di servizio specificato. La richiesta include informazioni come il tipo di richiesta e un URL del bucket Amazon S3 prefirmato, a cui la risorsa personalizzata invia le risposte. Per ulteriori informazioni sugli elementi inclusi nella richiesta, consulta CloudFormation riferimento personalizzato alla richiesta e alla risposta delle risorse.

    I seguenti dati di esempio mostrano cosa CloudFormation include una richiesta. Create In questo esempio, ResourceProperties consente di CloudFormation creare un payload personalizzato da inviare alla funzione Lambda.

    { "RequestType" : "Create", "ResponseURL" : "http://pre-signed-S3-url-for-response", "StackId" : "arn:aws:cloudformation:us-west-2:123456789012:stack/mystack/5b918d10-cd98-11ea-90d5-0a9cd3354c10", "RequestId" : "unique id for this create request", "ResourceType" : "Custom::TestResource", "LogicalResourceId" : "MyTestResource", "ResourceProperties" : { "Name" : "Value", "List" : [ "1", "2", "3" ] } }
  2. Il provider di risorse personalizzato elabora la CloudFormation richiesta e restituisce una risposta SUCCESS o FAILED all'URL prefirmato. custom resource provider fornisce la risposta in un file in formato JSON e lo carica sull'URL S3 prefirmato. Per ulteriori informazioni, consulta Uploading objects with presigned URLs nella Amazon Simple Storage Service User Guide.

    Nella risposta, custom resource provider può anche includere coppie nome-valore a cui template developer può accedere. Ad esempio, la risposta può includere i dati di output nel caso in cui la richiesta sia andata a buon fine o un messaggio di errore nel caso in cui la richiesta abbia avuto esito negativo. Per ulteriori informazioni sulle risposte, consulta CloudFormation riferimento personalizzato alla richiesta e alla risposta delle risorse.

    Importante

    Se le coppie nome-valore contengono informazioni riservate, è necessario utilizzare il campo NoEcho per mascherare l'output della risorsa personalizzata. Altrimenti, i valori sono visibili attraverso i valori delle proprietà di APIs quella superficie (ad esempioDescribeStackEvents).

    Per ulteriori informazioni sull’utilizzo di NoEcho per mascherare le informazioni sensibili, consulta la best practice Non incorporare le credenziali nei modelli.

    custom resource provider è responsabile dell'ascolto e della risposta alla richiesta. Ad esempio, per le notifiche di Amazon SNS, il provider di risorse personalizzate deve ascoltare e rispondere alle notifiche inviate a un argomento ARN specifico. CloudFormation attende e ascolta una risposta nella posizione URL prefirmata.

    I seguenti dati di esempio mostrano ciò che una risorsa personalizzata può includere in una risposta:

    { "Status" : "SUCCESS", "PhysicalResourceId" : "TestResource1", "StackId" : "arn:aws:cloudformation:us-west-2:123456789012:stack/mystack/5b918d10-cd98-11ea-90d5-0a9cd3354c10", "RequestId" : "unique id for this create request", "LogicalResourceId" : "MyTestResource", "Data" : { "OutputName1" : "Value1", "OutputName2" : "Value2", } }
  3. Dopo aver ricevuto una SUCCESS risposta, CloudFormation procede con l'operazione stack. Se viene restituita una risposta FAILED o nessuna risposta, l'operazione ha esito negativo. Qualsiasi dato di output dalla risorsa personalizzata viene memorizzato nella posizione dell'URL prefirmato. Lo sviluppatore del modello può recuperare tali dati utilizzando la funzione Fn::. GetAtt

Nota

Se lo utilizzi AWS PrivateLink, le risorse personalizzate nel VPC devono avere accesso a bucket S3 CloudFormation specifici. Le risorse personalizzate devono inviare le risposte a un Amazon S3 preregistrato. Se non possono inviare risposte ad Amazon S3, CloudFormation non riceveranno alcuna risposta e l'operazione di stack avrà esito negativo. Per ulteriori informazioni, consulta Accesso CloudFormation tramite un endpoint di interfaccia ()AWS PrivateLink.

Timeout di risposta

Il timeout predefinito per la risorsa personalizzata è pari a 3.600 secondi (1 ora). Se durante questo periodo non viene ricevuta alcuna risposta, l’operazione di stack ha esito negativo.

Puoi modificare il valore di timeout in base a quanto tempo prevedi sarà necessario per la risposta dalla risorsa personalizzata. Per esempio, quando esegui il provisioning di una risorsa personalizzata che invoca una funzione Lambda con un tempo di risposta previsto di cinque minuti, puoi impostare un timeout di cinque minuti nel modello di stack specificando la proprietà ServiceTimeout. Per ulteriori informazioni, consulta CloudFormation riferimento personalizzato alla richiesta e alla risposta delle risorse. In questo modo, se c'è un errore nella funzione Lambda che ne causa il blocco, l'operazione stack CloudFormation fallirà dopo cinque minuti invece di attendere l'intera ora.

Tuttavia, fai attenzione a non impostare un valore di timeout troppo basso. Per evitare timeout imprevisti, assicurati che la risorsa personalizzata disponga di tempo sufficiente per eseguire le operazioni necessarie e restituire una risposta.