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à.
Risorse SNS personalizzate supportate da Amazon
L'argomento seguente mostra come configurare una risorsa personalizzata con un token di servizio che specifica l'SNSargomento Amazon a cui CloudFormation invia le richieste. Imparerai anche la sequenza di eventi e messaggi inviati e ricevuti a seguito della creazione, degli aggiornamenti e dell'eliminazione di stack di risorse personalizzati.
Con risorse personalizzate e AmazonSNS, puoi abilitare scenari come l'aggiunta di nuove risorse a uno stack e l'iniezione di dati dinamici in uno stack. Ad esempio, quando crei uno stack, CloudFormation puoi inviare una Create
richiesta a un argomento monitorato da un'applicazione in esecuzione su un'EC2istanza Amazon. La SNS notifica Amazon attiva l'applicazione per eseguire attività di provisioning aggiuntive, come il recupero di un pool di indirizzi IP elastici consentiti. Al termine, l'applicazione invia una risposta (e tutti i dati di output) che notifica di procedere con l'operazione CloudFormation di stack.
Quando specifichi un SNS argomento Amazon come destinazione di una risorsa personalizzata, CloudFormation invia messaggi all'SNSargomento specificato durante le operazioni di stack che coinvolgono la risorsa personalizzata. Per elaborare questi messaggi ed eseguire le azioni necessarie, devi disporre di un endpoint supportato iscritto all'argomento. SNS
Per un'introduzione alle risorse personalizzate e al loro funzionamento, consulta. Crea una logica di provisioning personalizzata con risorse personalizzate Per informazioni su Amazon SNS e su come funziona, consulta la Amazon Simple Notification Service Developer Guide.
SNSUsare Amazon per creare risorse personalizzate
Argomenti
Fase 1: creazione dello stack
-
Lo sviluppatore del modello crea uno CloudFormation stack che contiene una risorsa personalizzata.
Nell'esempio di modello riportato di seguito, utilizziamo il nome del tipo di risorsa personalizzato
Custom::
per la risorsa personalizzata con IDSeleniumTester
logico. I nomi dei tipi di risorse personalizzati devono essere alfanumerici e possono avere una lunghezza massima di 60 caratteri.MySeleniumTest
Il tipo di risorsa personalizzato viene dichiarato con un token di servizio, proprietà opzionali specifiche del provider e Fn::GetAtt attributi opzionali definiti dal provider di risorse personalizzato. Queste proprietà e questi attributi possono essere utilizzati per trasmettere le informazioni da template developer a custom resource provider e viceversa. Il token di servizio specifica un SNS argomento Amazon configurato dal provider di risorse.
{ "AWSTemplateFormatVersion" : "2010-09-09", "Resources" : { "
MySeleniumTest
" : { "Type": "Custom::SeleniumTester
", "Version" : "1.0", "Properties" : { "ServiceToken": "arn:aws:sns:us-west-2
:123456789012
:CRTest
","seleniumTester" : "SeleniumTest()", "endpoints" : [ "http://mysite.com", "http://myecommercesite.com/", "http://search.mysite.com" ], "frequencyOfTestsPerHour" : [ "3", "2", "4" ]
} } }, "Outputs" : { "topItem
" : { "Value" : { "Fn::GetAtt" : ["MySeleniumTest
", "resultsPage
"] } }, "numRespondents
" : { "Value" : { "Fn::GetAtt" : ["MySeleniumTest"
, "lastUpdate
"] } } } }Nota
I nomi e i valori dei dati a cui si accede con
vengono restituiti dal provider di risorse personalizzate durante la risposta del provider a CloudFormation. Se custom resource provider è una terza parte, template developer deve ottenere i nomi dei valori restituiti da custom resource provider.Fn::GetAtt
-
CloudFormation invia una SNS notifica Amazon al fornitore di risorse con una
"RequestType" : "Create"
che contiene informazioni sullo stack, le proprietà personalizzate delle risorse dal modello di stack e un S3 URL per la risposta.L'SNSargomento utilizzato per inviare la notifica è incorporato nel modello della proprietà.
ServiceToken
Per evitare l'utilizzo di un valore hardcoded, un template developer può utilizzare un parametro del modello in modo che il valore venga inserito all'avvio dello stack.Nel seguente esempio viene mostrata una richiesta
Create
della risorsa personalizzata contenente un nome di tipo risorsa personalizzato,Custom::SeleniumTester
, creata conLogicalResourceId
diMySeleniumTester
:{ "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::SeleniumTester", "LogicalResourceId" : "MySeleniumTester", "ResourceProperties" : { "seleniumTester" : "SeleniumTest()", "endpoints" : [ "http://mysite.com", "http://myecommercesite.com/", "http://search.mysite.com" ], "frequencyOfTestsPerHour" : [ "3", "2", "4" ] } }
Per informazioni dettagliate sull'oggetto della richiesta per
Create
le richieste, consultate l'Crea una richiesta di risorse CloudFormation personalizzateargomento. -
Il custom resource provider elabora i dati inviati dallo template developer e determina se la richiesta
Create
è andata a buon fine. Il provider di risorse utilizza quindi l'S3 URL inviato da CloudFormation per inviare una risposta diSUCCESS
oFAILED
.A seconda del tipo di risposta, saranno previsti campi di risposta diversi entro CloudFormation. Per informazioni sui campi di risposta per un particolare tipo di richiesta, consulta la documentazione relativa a quel tipo di richiesta nella Tipi di richieste di risorse personalizzate sezione.
In risposta a una richiesta di creazione o aggiornamento, il custom resource provider può restituire elementi di dati nel campo Data della risposta. Queste sono coppie nome/valore e i nomi corrispondono agli attributi
utilizzati con la risorsa personalizzata nel modello di stack. I valori sono i dati che vengono restituiti quando il template developer chiamaFn::GetAtt
nella risorsa con il nome attributo.Fn::GetAtt
Di seguito è riportato un esempio di risposta della risorsa personalizzata:
{ "Status" : "SUCCESS", "PhysicalResourceId" : "Tester1", "StackId" : "arn:aws:cloudformation:us-west-2:123456789012:stack/mystack/5b918d10-cd98-11ea-90d5-0a9cd3354c10", "RequestId" : "unique id for this create request", "LogicalResourceId" : "MySeleniumTester", "Data" : { "resultsPage" : "http://www.myexampledomain/test-results/guid", "lastUpdate" : "2012-11-14T03:30Z" } }
Per informazioni dettagliate sull'oggetto di risposta per
Create
le richieste, consultate l'Crea una richiesta di risorse CloudFormation personalizzateargomento.Nei campi
StackId
,RequestId
eLogicalResourceId
il testo della richiesta deve essere copiato parola per parola. -
CloudFormation dichiara lo stato dello stack come
CREATE_COMPLETE
o.CREATE_FAILED
Se lo stack è stato creato senza errori, il template developer può utilizzare i valori di output delle risorse personalizzate create accedendovi con Fn::GetAtt.Ad esempio, il modello di risorsa personalizzata utilizzato per illustrazione usa
per copiare gli output delle risorse nell'output dello stack:Fn::GetAtt
"Outputs" : { "
topItem
" : { "Value" : { "Fn::GetAtt" : ["MySeleniumTest
", "resultsPage
"] } }, "numRespondents
" : { "Value" : { "Fn::GetAtt" : ["MySeleniumTest
", "lastUpdate
"] } } }
Fase 2: aggiornamenti degli stack
Per aggiornare uno stack esistente, è necessario inviare un modello che specifichi gli aggiornamenti per le proprietà delle risorse nello stack, come illustrato nell'esempio seguente. CloudFormationaggiorna solo le risorse con le modifiche specificate nel modello. Per ulteriori informazioni, consulta Comprendi i comportamenti di aggiornamento delle risorse dello stack.
Puoi aggiornare le risorse personalizzate che richiedono una sostituzione della risorsa fisica sottostante. Quando aggiorni una risorsa personalizzata in un CloudFormation modello, CloudFormation invia una richiesta di aggiornamento a quella risorsa personalizzata. Se una risorsa personalizzata richiede una sostituzione, la nuova risorsa personalizzata deve inviare una risposta con il nuovo ID fisico. Quando CloudFormation riceve la risposta, confronta le PhysicalResourceId
risorse personalizzate vecchie e nuove. Se sono diverse, CloudFormation riconosce l'aggiornamento come sostituto e invia una richiesta di eliminazione alla vecchia risorsa, come mostrato in. Fase 3: eliminazione dello stack
Nota
Se non hai apportato modifiche alla risorsa personalizzata, CloudFormation non le invierà richieste durante un aggiornamento dello stack.
-
Il template developer avvia un aggiornamento dello stack contenente una risorsa personalizzata. Durante l'esecuzione di un aggiornamento, lo template developer può specificare nuove proprietà nel modello di stack.
Di seguito è disponibile un esempio di
Update
del modello di stack tramite un tipo di risorsa personalizzata:{ "AWSTemplateFormatVersion" : "2010-09-09", "Resources" : { "MySeleniumTest" : { "Type": "Custom::SeleniumTester", "Version" : "1.0", "Properties" : { "ServiceToken": "arn:aws:sns:us-west-2:123456789012:CRTest", "seleniumTester" : "SeleniumTest()", "endpoints" : [ "http://mysite.com", "http://myecommercesite.com/", "http://search.mysite.com",
"http://mynewsite.com"
], "frequencyOfTestsPerHour" : [ "3", "2", "4","3"
] } } }, "Outputs" : { "topItem" : { "Value" : { "Fn::GetAtt" : ["MySeleniumTest", "resultsPage"] } }, "numRespondents" : { "Value" : { "Fn::GetAtt" : ["MySeleniumTest", "lastUpdate"] } } } } -
CloudFormation invia una SNS notifica Amazon al fornitore di risorse con una
"RequestType" : "Update"
che contiene informazioni simili allaCreate
chiamata, tranne per il fatto che ilOldResourceProperties
campo contiene le vecchie proprietà della risorsa e ResourceProperties contiene le proprietà delle risorse aggiornate (se presenti).Di seguito è riportato un esempio di richiesta
Update
:{ "RequestType" : "Update", "ResponseURL" : "http://pre-signed-S3-url-for-response", "StackId" : "arn:aws:cloudformation:us-west-2:123456789012:stack/mystack/5b918d10-cd98-11ea-90d5-0a9cd3354c10", "RequestId" : "uniqueid for this update request", "LogicalResourceId" : "MySeleniumTester", "ResourceType" : "Custom::SeleniumTester", "PhysicalResourceId" : "Tester1", "ResourceProperties" : { "seleniumTester" : "SeleniumTest()", "endpoints" : [ "http://mysite.com", "http://myecommercesite.com/", "http://search.mysite.com", "http://mynewsite.com" ], "frequencyOfTestsPerHour" : [ "3", "2", "4", "3" ] }, "OldResourceProperties" : { "seleniumTester" : "SeleniumTest()", "endpoints" : [ "http://mysite.com", "http://myecommercesite.com/", "http://search.mysite.com" ], "frequencyOfTestsPerHour" : [ "3", "2", "4" ] } }
Per informazioni dettagliate sull'oggetto della richiesta per
Update
le richieste, consulta l'Richiesta di aggiornamento per risorse CloudFormation personalizzateargomento. -
Il provider di risorse personalizzate elabora i dati inviati da CloudFormation. La risorsa personalizzata esegue l'aggiornamento e invia una risposta a uno
SUCCESS
oFAILED
all'S3URL. CloudFormation quindi confronta lePhysicalResourceIDs
vecchie e nuove risorse personalizzate. Se sono diverse, CloudFormation riconosce che l'aggiornamento richiede una sostituzione e invia una richiesta di eliminazione alla vecchia risorsa. L'esempio seguente mostra la risposta di un custom resource provider a una richiestaUpdate
.{ "Status" : "SUCCESS", "StackId" : "arn:aws:cloudformation:us-west-2:123456789012:stack/mystack/5b918d10-cd98-11ea-90d5-0a9cd3354c10", "RequestId" : "uniqueid for this update request", "LogicalResourceId" : "MySeleniumTester", "PhysicalResourceId" : "Tester2" }
Per informazioni dettagliate sull'oggetto di risposta per
Update
le richieste, consultate l'Richiesta di aggiornamento per risorse CloudFormation personalizzateargomento.Nei campi
StackId
,RequestId
eLogicalResourceId
il testo della richiesta deve essere copiato parola per parola. -
CloudFormation dichiara lo stato dello stack come
UPDATE_COMPLETE
o.UPDATE_FAILED
Se l'aggiornamento ha esito negativo, viene eseguito il rollback dello stack. Se lo stack è stato aggiornato senza errori, il template developer può accedere ai nuovi valori di output delle risorse personalizzate create con
.Fn::GetAtt
Fase 3: eliminazione dello stack
-
Lo sviluppatore del modello elimina uno stack che contiene una risorsa personalizzata. CloudFormationottiene le proprietà correnti specificate nel modello di stack insieme all'SNSargomento e si prepara a fare una richiesta al fornitore di risorse personalizzato.
-
CloudFormation invia una SNS notifica Amazon al fornitore di risorse con una
"RequestType" : "Delete"
che contiene informazioni correnti sullo stack, le proprietà personalizzate delle risorse dal modello di stack e un S3 URL per la risposta.Ogni volta che elimini uno stack o effettui un aggiornamento che rimuove o sostituisce la risorsa personalizzata, CloudFormation confronta le vecchie e le nuove risorse
PhysicalResourceId
personalizzate. Se sono diverse, CloudFormation riconosce l'aggiornamento come sostituto e invia una richiesta di eliminazione per la vecchia risorsa (OldPhysicalResource
), come illustrato nell'esempio seguente di richiesta.Delete
{ "RequestType" : "Delete", "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 delete request", "ResourceType" : "Custom::SeleniumTester", "LogicalResourceId" : "MySeleniumTester", "PhysicalResourceId" : "Tester1", "ResourceProperties" : { "seleniumTester" : "SeleniumTest()", "endpoints" : [ "http://mysite.com", "http://myecommercesite.com/", "http://search.mysite.com", "http://mynewsite.com" ], "frequencyOfTestsPerHour" : [ "3", "2", "4", "3" ] } }
Per informazioni dettagliate sull'oggetto della richiesta per
Delete
le richieste, consultate l'Eliminare la richiesta di risorse CloudFormation personalizzateargomento.DescribeStackResource
,DescribeStackResources
eListStackResources
mostrano il nome definito dall'utente se è stato specificato. -
Il provider di risorse personalizzate elabora i dati inviati da CloudFormation e determina se la
Delete
richiesta ha avuto esito positivo. Il provider di risorse utilizza quindi l'S3 URL inviato da CloudFormation per inviare una risposta di unoSUCCESS
oFAILED
. Per eliminare uno stack con una risorsa personalizzata, il custom resource provider deve rispondere a una richiesta di eliminazione.Nel seguente esempio viene mostrata la risposta di un custom resource provider a una richiesta
Delete
:{ "Status" : "SUCCESS", "StackId" : "arn:aws:cloudformation:us-west-2:123456789012:stack/mystack/5b918d10-cd98-11ea-90d5-0a9cd3354c10", "RequestId" : "unique id for this delete request", "LogicalResourceId" : "MySeleniumTester", "PhysicalResourceId" : "Tester1" }
Per informazioni dettagliate sull'oggetto di risposta per
Delete
le richieste, consultate l'Eliminare la richiesta di risorse CloudFormation personalizzateargomento.Nei campi
StackId
,RequestId
eLogicalResourceId
il testo della richiesta deve essere copiato parola per parola. -
CloudFormation dichiara lo stato dello stack come
DELETE_COMPLETE
o.DELETE_FAILED