

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 personalizzate supportate da Amazon SNS
<a name="template-custom-resources-sns"></a>

L'argomento seguente mostra come configurare una risorsa personalizzata con un token di servizio che specifica l'argomento Amazon SNS a CloudFormation cui inviare le richieste. Troverai anche informazioni sulla sequenza di eventi e messaggi inviati e ricevuti come conseguenza della creazione, dell’aggiornamento e dell’eliminazione di uno stack di risorse personalizzato.

Con le risorse personalizzate e Amazon SNS, puoi abilitare scenari quali l'aggiunta di nuove risorse a uno stack e l'inserimento 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'istanza Amazon EC2. La notifica Amazon SNS abilita le attività di provisioning aggiuntive nell'applicazione, 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 CloudFormation procedere con l'operazione dello stack.

Quando specifichi un argomento Amazon SNS come destinazione di una risorsa personalizzata, CloudFormation invia messaggi all'argomento SNS specificato durante le operazioni di stack che coinvolgono la risorsa personalizzata. Per elaborare questi messaggi ed eseguire le operazioni necessarie, devi disporre di un endpoint supportato sottoscritto all’argomento SNS.

Per un’introduzione alle risorse personalizzate e al loro funzionamento, consulta [Funzionamento delle risorse personalizzate](template-custom-resources.md#how-custom-resources-work). Per ulteriori informazioni su Amazon SNS e su come funziona, consulta [Amazon Simple Notification Service Developer Guide](https://docs.aws.amazon.com/sns/latest/dg/).

## Utilizzo di Amazon SNS per creare risorse personalizzate
<a name="walkthrough-custom-resources-sns-adding-nonaws-resource"></a>

**Topics**
+ [Fase 1: creazione dello stack](#crpg-walkthrough-stack-creation)
+ [Fase 2: aggiornamenti degli stack](#crpg-walkthrough-stack-updates)
+ [Fase 3: eliminazione dello stack](#crpg-walkthrough-stack-deletion)

### Fase 1: creazione dello stack
<a name="crpg-walkthrough-stack-creation"></a>

1. <a name="crpg-walkthrough-stack-creation-customer-template"></a>Lo sviluppatore del modello crea uno CloudFormation stack che contiene una risorsa personalizzata. 

   Nell’esempio di modello riportato di seguito, viene utilizzato il nome `Custom::{{SeleniumTester}}` del tipo di risorsa personalizzato per la risorsa personalizzata con ID logico `{{MySeleniumTest}}`. I nomi dei tipi di risorse personalizzati devono essere alfanumerici e possono avere una lunghezza massima di 60 caratteri. 

   Il tipo di risorsa personalizzato viene dichiarato con un token di servizio, proprietà opzionali specifiche del provider e GetAtt attributi facoltativi [Fn::](resources-section-structure.md#resource-properties-getatt) 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 argomento di Amazon SNS 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 `Fn::GetAtt` 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.

1. <a name="crpg-walkthrough-stack-creation-provider-request"></a>CloudFormation invia una notifica Amazon SNS al provider di risorse con una `"RequestType" : "Create"` che contiene informazioni sullo stack, le proprietà personalizzate delle risorse dal modello di stack e un URL S3 per la risposta.

   L'argomento SNS che viene utilizzato per inviare la notifica è compreso 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 con `LogicalResourceId` di `MySeleniumTester`:

   ```
   {
      "RequestType" : "Create",
      "RequestId" : "unique-request-id",
      "StackId" : "arn:aws:cloudformation:us-west-2:123456789012:stack/mystack/5b918d10-cd98-11ea-90d5-0a9cd3354c10",
      "ResponseURL" : "http://pre-signed-S3-url-for-response",
      "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 di richiesta per le richieste `Create`, consulta l’argomento [Riferimento alla richiesta e alla risposta](crpg-ref.md).

1. <a name="crpg-walkthrough-stack-creation-provider-response"></a>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'URL S3 inviato da CloudFormation per inviare una risposta di o. `SUCCESS` `FAILED`

   A seconda del tipo di risposta, possono essere visualizzati diversi campi in CloudFormation. Per informazioni sui campi di risposta per un particolare tipo di richiesta, consulta la documentazione relativa a quel tipo di richiesta nella sezione [Riferimento alla richiesta e alla risposta](crpg-ref.md).

   In risposta a una richiesta di creazione o aggiornamento, il provider di risorse personalizzate può restituire elementi di dati nel campo `Data` della risposta. Queste sono coppie nome/valore e i *nomi* corrispondono agli attributi `Fn::GetAtt` utilizzati con la risorsa personalizzata nel modello di stack. I *valori* sono i dati che vengono restituiti quando il template developer chiama `Fn::GetAtt` nella risorsa con il nome attributo.

   Di seguito è riportato un esempio di risposta della risorsa personalizzata:

   ```
   {
      "Status" : "SUCCESS",
      "RequestId" : "unique-request-id",
      "StackId" : "arn:aws:cloudformation:us-west-2:123456789012:stack/mystack/5b918d10-cd98-11ea-90d5-0a9cd3354c10",
      "LogicalResourceId" : "MySeleniumTester",
      "PhysicalResourceId" : "Tester1",
      "Data" : {
         "resultsPage" : "http://www.myexampledomain/test-results/guid",
         "lastUpdate" : "2012-11-14T03:30Z"
      }
   }
   ```

   Per informazioni dettagliate sull’oggetto della risposta per le richieste `Create`, consulta l’argomento [Riferimento alla richiesta e alla risposta](crpg-ref.md).

   Nei campi `StackId`, `RequestId` e `LogicalResourceId` il testo della richiesta deve essere copiato parola per parola.

1. <a name="crpg-walkthrough-stack-creation-stack-status"></a> CloudFormation dichiara lo stato dello stack come o. `CREATE_COMPLETE` `CREATE_FAILED` Se lo stack è stato creato con successo, lo sviluppatore del modello può utilizzare i valori di output della risorsa personalizzata creata accedendovi con [Fn](resources-section-structure.md#resource-properties-getatt)::. GetAtt

   Ad esempio, il modello di risorsa personalizzata utilizzato per illustrazione usa `Fn::GetAtt` per copiare gli output delle risorse nell'output dello stack:

   ```
   "Outputs" : {
      "{{topItem}}" : {
         "Value" : { "Fn::GetAtt" : ["{{MySeleniumTest}}", "{{resultsPage}}"] }
      },
      "{{numRespondents}}" : {
         "Value" : { "Fn::GetAtt" : ["{{MySeleniumTest}}", "{{lastUpdate}}"] }
      }
   }
   ```

### Fase 2: aggiornamenti degli stack
<a name="crpg-walkthrough-stack-updates"></a>

Per aggiornare uno stack esistente, devi inviare un modello che specifichi gli aggiornamenti per le proprietà delle risorse dello stack, come illustrato nell'esempio seguente. CloudFormation aggiorna solo le risorse che hanno modifiche specificate nel modello. Per ulteriori informazioni, consulta [Comprendere l’aggiornamento dei comportamenti delle risorse stack](using-cfn-updating-stacks-update-behaviors.md).

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 il valore di `PhysicalResourceId` della vecchia e della nuova risorsa personalizzata. Se sono diversi, CloudFormation riconosce l'aggiornamento come sostitutivo e invia una richiesta di eliminazione alla vecchia risorsa, come mostrato in[Fase 3: eliminazione dello stack](#crpg-walkthrough-stack-deletion).

**Nota**  
Se non hai apportato modifiche alla risorsa personalizzata, CloudFormation non le invierà richieste durante un aggiornamento dello stack.

1. <a name="crpg-walkthrough-stack-updates-customer-template"></a>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"] }
         }
      }
   }
   ```

1. <a name="crpg-walkthrough-stack-updates-provider-request"></a>CloudFormation invia una notifica Amazon SNS al provider di risorse con una `"RequestType" : "Update"` che contiene informazioni simili alla `Create` chiamata, tranne per il fatto che il `OldResourceProperties` 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",
      "RequestId" : "unique-request-id",
      "StackId" : "arn:aws:cloudformation:us-west-2:123456789012:stack/mystack/5b918d10-cd98-11ea-90d5-0a9cd3354c10",
      "ResponseURL" : "http://pre-signed-S3-url-for-response",
      "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" ]
      },
      "OldResourceProperties" : {
         "seleniumTester" : "SeleniumTest()",
         "endpoints" : [ "http://mysite.com", "http://myecommercesite.com/", "http://search.mysite.com" ],
         "frequencyOfTestsPerHour" : [ "3", "2", "4" ]
      }
   }
   ```

   Per informazioni dettagliate sull’oggetto di richiesta per le richieste `Update`, consulta l’argomento [Riferimento alla richiesta e alla risposta](crpg-ref.md).

1. <a name="crpg-walkthrough-stack-updates-provider-response"></a>Il provider di risorse personalizzate elabora i dati inviati da CloudFormation. La risorsa personalizzata esegue l'aggiornamento e invia una risposta `SUCCESS` o `FAILED` all'URL S3. CloudFormation quindi confronta le `PhysicalResourceIDs` 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 richiesta `Update`.

   ```
   {
      "Status" : "SUCCESS",
      "RequestId" : "unique-request-id",
      "StackId" : "arn:aws:cloudformation:us-west-2:123456789012:stack/mystack/5b918d10-cd98-11ea-90d5-0a9cd3354c10",
      "LogicalResourceId" : "MySeleniumTester",
      "PhysicalResourceId" : "Tester2"
   }
   ```

   Per informazioni dettagliate sull’oggetto della risposta per le richieste `Update`, consulta l’argomento [Riferimento alla richiesta e alla risposta](crpg-ref.md).

   Nei campi `StackId`, `RequestId` e `LogicalResourceId` il testo della richiesta deve essere copiato parola per parola.

1. <a name="crpg-walkthrough-stack-updates-stack-status"></a>CloudFormation dichiara lo stato dello stack come o. `UPDATE_COMPLETE` `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
<a name="crpg-walkthrough-stack-deletion"></a>

1. <a name="crpg-walkthrough-stack-deletion-customer-template"></a>Il template developer elimina un aggiornamento dello stack contenente una risorsa personalizzata. CloudFormation ottiene le proprietà attuali specificate nel modello dello stack insieme all'argomento SNS e si prepara per effettuare una richiesta al provider di risorse personalizzate.

1. <a name="crpg-walkthrough-stack-deletion-provider-request"></a>CloudFormation invia una notifica Amazon SNS al provider di risorse con una `"RequestType" : "Delete"` che contiene informazioni correnti sullo stack, le proprietà personalizzate delle risorse dal modello di stack e un URL S3 per la risposta.

   Ogni volta che elimini uno stack o effettui un aggiornamento che rimuove o sostituisce la risorsa personalizzata, CloudFormation confronta le risorse personalizzate vecchie e nuove`PhysicalResourceId`. 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",
      "RequestId" : "unique-request-id",
      "StackId" : "arn:aws:cloudformation:us-west-2:123456789012:stack/mystack/5b918d10-cd98-11ea-90d5-0a9cd3354c10",
      "ResponseURL" : "http://pre-signed-S3-url-for-response",
      "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 di richiesta per le richieste `Delete`, consulta l’argomento [Riferimento alla richiesta e alla risposta](crpg-ref.md).

   `DescribeStackResource`, `DescribeStackResources`e `ListStackResources` mostrano il nome definito dall'utente se è stato specificato.

1. <a name="crpg-walkthrough-stack-deletion-provider-response"></a>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'URL S3 inviato da CloudFormation per inviare una risposta di uno `SUCCESS` o`FAILED`. 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",
      "RequestId" : "unique-request-id",
      "StackId" : "arn:aws:cloudformation:us-west-2:123456789012:stack/mystack/5b918d10-cd98-11ea-90d5-0a9cd3354c10",
      "LogicalResourceId" : "MySeleniumTester",
      "PhysicalResourceId" : "Tester1"
   }
   ```

   Per informazioni dettagliate sull’oggetto della risposta per le richieste `Delete`, consulta l’argomento [Riferimento alla richiesta e alla risposta](crpg-ref.md).

   Nei campi `StackId`, `RequestId` e `LogicalResourceId` il testo della richiesta deve essere copiato parola per parola.

1. <a name="crpg-walkthrough-stack-updates-stack-status-delete"></a>CloudFormation dichiara lo stato dello stack come o. `DELETE_COMPLETE` `DELETE_FAILED`