

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 condizioni di attesa in un CloudFormation modello
<a name="using-cfn-waitcondition"></a>

Questo argomento spiega come creare una condizione di attesa in un modello per coordinare la creazione delle risorse dello stack o per monitorare l’avanzamento di un processo di configurazione. Ad esempio, puoi iniziare la creazione di un'altra risorsa al parziale completamento della configurazione di un'applicazione oppure puoi inviare segnali durante un processo di installazione e configurazione per monitorarne l'avanzamento. 

Quando CloudFormation crea uno stack che include una condizione di attesa:
+ Crea una condizione di attesa proprio come qualsiasi altra risorsa e imposta il relativo stato su `CREATE_IN_PROGRESS`.
+ CloudFormation attende che riceva il numero richiesto di segnali di successo o che il periodo di timeout della condizione di attesa sia scaduto. 
+ Se riceve il numero richiesto di segnali di operazione riuscita prima della scadenza del periodo di timeout:
  + Lo stato della condizione di attesa viene modificato in `CREATE_COMPLETE`.
  + La creazione dello stack continua.
+ Se il timeout scade o viene ricevuto un segnale di errore:
  + Lo stato della condizione di attesa viene modificato in `CREATE_FAILED`.
  + Viene eseguito il rollback dello stack.

**Importante**  
Per le risorse Amazon EC2 e Auto Scaling, consigliamo di utilizzare CreationPolicy un attributo anziché condizioni di attesa. Aggiungi un CreationPolicy attributo a tali risorse e utilizza lo script di supporto cfn-signal per segnalare quando il processo di creazione di un'istanza è stato completato con successo.  
Per ulteriori informazioni, consulta [Attributo CreationPolicy](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-attribute-creationpolicy.html).

**Nota**  
Se lo utilizzi AWS PrivateLink, le risorse nel VPC che rispondono alle condizioni di attesa devono avere accesso a bucket Amazon Simple Storage Service (Amazon S3) S3) CloudFormation specifici. Le risorse devono inviare le risposte della condizione di attesa a un URL Amazon S3 prefirmato. Se non sono in grado di inviare risposte per Amazon S3, CloudFormation non riceverà una risposta e il funzionamento dello stack ha esito negativo. Per ulteriori informazioni, consulta le pagine [Accesso CloudFormation tramite un endpoint di interfaccia ()AWS PrivateLink](vpc-interface-endpoints.md) e [Controlling access from VPC endpoints with bucket policies](https://docs.aws.amazon.com/AmazonS3/latest/userguide/example-bucket-policies-vpc-endpoint.html).

**Topics**
+ [Creare una condizione di attesa nel modello](#creating-wait-condition)
+ [Sintassi del segnale di condizione di attesa](#wait-condition-signal-syntax)
+ [Accedere ai dati del segnale](#wait-condition-access-signal-data)

## Creare una condizione di attesa nel modello
<a name="creating-wait-condition"></a>

**1. Handle della condizione di attesa**  
Inizia definendo una risorsa [https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-cloudformation-waitconditionhandle.html](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-cloudformation-waitconditionhandle.html) nel modello dello stack. Questa risorsa genera l’URL prefirmato necessario per l’invio dei segnali, che permette di inviare un segnale senza dover specificare le credenziali AWS . Esempio: 

```
Resources:
  MyWaitHandle:
    Type: AWS::CloudFormation::WaitConditionHandle
```

**2. Condizione di attesa**  
Poi, devi dichiarare una risorsa [https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-cloudformation-waitcondition.html](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-cloudformation-waitcondition.html) nel modello dello stack. La struttura di base di `AWS::CloudFormation::WaitCondition` è come la seguente: 

```
  MyWaitCondition:
    Type: AWS::CloudFormation::WaitCondition
    Properties:
      Handle: String
      Timeout: String
      Count: Integer
```

La risorsa `AWS::CloudFormation::WaitCondition` dispone di due proprietà obbligatorie e una facoltativa.
+ `Handle` (obbligatoria): un riferimento a `WaitConditionHandle` dichiarato nel modello.
+ `Timeout`(obbligatorio): il numero di secondi di attesa CloudFormation per la ricezione del numero richiesto di segnali. `Timeout`è una proprietà con limite minimo, il che significa che il timeout non si verifica prima del tempo specificato, ma può verificarsi poco dopo. Il tempo massimo che puoi specificare è 43200 secondi (12 ore).
+ `Count`(opzionale) — Il numero di segnali di successo che CloudFormation devono essere ricevuti prima di impostare lo stato di quella condizione di attesa su `CREATE_COMPLETE` e riprendere la creazione dello stack. Se non viene specificato, il valore predefinito è 1.

In genere, la condizione di attesa deve iniziare subito dopo la creazione di una risorsa specifica. A tale scopo, aggiungi l'`DependsOn`attributo a una condizione di attesa. Quando aggiungi un `DependsOn` attributo a una condizione di attesa, CloudFormation crea prima la risorsa nell'`DependsOn`attributo, quindi crea la condizione di attesa. Per ulteriori informazioni, consulta [Attributo DependsOn](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-attribute-dependson.html).

Il seguente esempio illustra una condizione di attesa che: 
+ Inizia dopo la corretta creazione della risorsa `MyEC2Instance`.
+ Usa la risorsa `MyWaitHandle` come `WaitConditionHandle`.
+ Ha un timeout di 4.500 secondi.
+ Ha un valore predefinito di `Count` pari a 1 (dato che non è specificata alcuna proprietà `Count`)

```
  MyWaitCondition:
    Type: AWS::CloudFormation::WaitCondition
    DependsOn: MyEC2Instance
    Properties:
      Handle: !Ref MyWaitHandle
      Timeout: '4500'
```

**3. Inviare un segnale**  
Per segnalare l'esito positivo o negativo CloudFormation, in genere si esegue un codice o uno script. Ad esempio, un'applicazione in esecuzione su un'istanza EC2 potrebbe eseguire alcune attività di configurazione aggiuntive e quindi inviare un segnale CloudFormation a per indicare il completamento.

Il segnale deve essere inviato all’URL prefirmato generato dall’handle della condizione di attesa. Devi utilizzare l’URL prefirmato per segnalare le operazioni riuscite o non riuscite.

**Per inviare un segnale**

1. Per recuperare l’URL prefirmato all’interno del modello, usa la funzione intrinseca `Ref` con il nome logico dell’handle della condizione di attesa. 

   Come mostrato nell’esempio seguente, il modello può dichiarare un’istanza Amazon EC2 e trasmettere l’URL prefirmato alle istanze EC2 utilizzando la proprietà Amazon EC2 `UserData`. Ciò consente agli script o alle applicazioni in esecuzione su tali istanze di segnalare l'esito positivo o negativo. CloudFormation

   ```
     MyEC2Instance:
       Type: AWS::EC2::Instance
       Properties:
       InstanceType: t2.micro  # Example instance type
       ImageId: ami-055e3d4f0bbeb5878  # Change this as needed (Amazon Linux 2023 in us-west-2)
       UserData:
         Fn::Base64: 
           Fn::Join: 
             - ""
             - - "SignalURL="
               - { "Ref": "MyWaitHandle" }
   ```

   Viene restituito un output `UserData` simile al seguente:

   ```
   SignalURL=https://amzn-s3-demo-bucket.s3.amazonaws.com/....
   ```

   Nota: negli strumenti Console di gestione AWS e nella riga di comando, l'URL predefinito viene visualizzato come ID fisico della risorsa wait condition handle.

1. (Facoltativo) Per rilevare quando lo stack entra nella condizione di attesa, puoi utilizzare uno dei seguenti metodi:
   + Se crei lo stack con le notifiche abilitate, CloudFormation pubblica una notifica per ogni evento dello stack per l'argomento specificato. Se tu o l'applicazione effettua la sottoscrizione a tale argomento, puoi monitorare le notifiche relative all'evento di reazione degli handle delle condizioni di attesa e recuperare l'URL prefirmato dal messaggio di notifica.
   + Puoi anche monitorare gli eventi dello stack utilizzando la Console di gestione AWS, AWS CLI o un SDK.

1. Per inviare un segnale, invia un messaggio di richiesta HTTP utilizzando l'URL prefirmato. Il metodo della richiesta deve essere `PUT` e l'intestazione `Content-Type` deve essere una stringa vuota o deve essere omessa. Il messaggio di richiesta deve essere una struttura JSON con il formato specificato nel [Sintassi del segnale di condizione di attesa](#wait-condition-signal-syntax).

   È necessario inviare il numero di segnali di successo specificati dalla `Count` proprietà per CloudFormation continuare la creazione dello stack. Se il valore della proprietà `Count` è maggiore di 1, il valore `UniqueId` per ogni segnale deve essere univoco per tutti i segnali inviati a una determinata condizione di attesa. Il valore `UniqueId` è una stringa alfanumerica arbitraria.

   Un comando `curl` è un modo per inviare un segnale. L'esempio seguente mostra una riga di comando `curl` che segnala l'operazione riuscita a una condizione di attesa.

   ```
   $ curl -T /tmp/a \
     "https://amzn-s3-demo-bucket.s3.amazonaws.com/arn%3Aaws%3Acloudformation%3Aus-west-2%3A034017226601%3Astack%2Fstack-gosar-20110427004224-test-stack-with-WaitCondition--VEYW%2Fe498ce60-70a1-11e0-81a7-5081d0136786%2FmyWaitConditionHandle?Expires=1303976584&AWSAccessKeyId=AKIAIOSFODNN7EXAMPLE&Signature=ik1twT6hpS4cgNAw7wyOoRejVoo%3D"
   ```

   Il file *`/tmp/a`* contiene la seguente struttura JSON:

   ```
   {
      "Status" : "SUCCESS",
      "Reason" : "Configuration Complete",
      "UniqueId" : "ID1234",
      "Data" : "Application has completed configuration."
   }
   ```

   Questo esempio illustra una riga di comando `curl` che invia lo stesso segnale di operazione riuscita, ma che invia la struttura JSON come parametro alla riga di comando.

   ```
   $ curl -X PUT \
     -H 'Content-Type:' --data-binary '{"Status" : "SUCCESS","Reason" : "Configuration Complete","UniqueId" : "ID1234","Data" : "Application has completed configuration."}' \
     "https://amzn-s3-demo-bucket.s3.amazonaws.com/arn%3Aaws%3Acloudformation%3Aus-west-2%3A034017226601%3Astack%2Fstack-gosar-20110427004224-test-stack-with-WaitCondition--VEYW%2Fe498ce60-70a1-11e0-81a7-5081d0136786%2FmyWaitConditionHandle?Expires=1303976584&AWSAccessKeyId=AKIAIOSFODNN7EXAMPLE&Signature=ik1twT6hpS4cgNAw7wyOoRejVoo%3D"
   ```

## Sintassi del segnale di condizione di attesa
<a name="wait-condition-signal-syntax"></a>

Quando invii segnali all’URL generato dall’handle della condizione di attesa, devi utilizzare il seguente formato JSON:

```
{
  "Status" : "StatusValue",
  "UniqueId" : "Some UniqueId",
  "Data" : "Some Data",
  "Reason" : "Some Reason"
}
```

### Properties
<a name="wait-condition-signal-properties"></a>

Il campo `Status` deve essere uno dei seguenti valori:
+ `SUCCESS`
+ `FAILURE`

Il `UniqueId` campo identifica il segnale a. CloudFormation Se la `Count` proprietà della condizione di attesa è maggiore di 1, il `UniqueId` valore deve essere unico per tutti i segnali inviati per una particolare condizione di attesa; in caso contrario, CloudFormation considererà il segnale una ritrasmissione del segnale inviato in precedenza con lo stesso `UniqueId` e lo ignorerà.

Il campo `Data` può contenere qualsiasi informazione desideri inviare con il segnale. È possibile accedere al `Data` valore utilizzando la GetAtt funzione [Fn::](resources-section-structure.md#resource-properties-getatt) all'interno del modello.

Il campo `Reason` è una stringa senza altre restrizioni relative ai contenuti, oltre alla conformità JSON.

## Accedere ai dati del segnale
<a name="wait-condition-access-signal-data"></a>

Per accedere ai dati inviati da segnali validi, puoi creare un valore di output per la condizione di attesa nel tuo CloudFormation modello. Esempio:

```
Outputs:
  WaitConditionData:
    Description: The data passed back as part of signalling the WaitCondition
    Value: !GetAtt MyWaitCondition.Data
```

È quindi possibile visualizzare questi dati utilizzando il [https://docs.aws.amazon.com/cli/latest/reference/cloudformation/describe-stacks.html](https://docs.aws.amazon.com/cli/latest/reference/cloudformation/describe-stacks.html)comando o la scheda **Output** della CloudFormation console.

La `Fn::GetAtt` funzione restituisce `UniqueId` e `Data` come name/value coppia all'interno di una struttura JSON. Esempio:

```
{"Signal1":"Application has completed configuration."}
```