

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à.

# Riferimento alla sintassi dello schema per CloudFormation Hooks
<a name="hooks-schema"></a>

Questa sezione descrive la sintassi dello schema utilizzato per sviluppare CloudFormation Hooks.

Un Hook include una specifica Hook rappresentata da uno schema JSON e da gestori Hook. Il primo passaggio per creare un Hook personalizzato consiste nella modellazione di uno schema che definisca l'Hook, le sue proprietà e i relativi attributi. Quando inizializzi un progetto Hook personalizzato utilizzando il comando CloudFormation [https://docs.aws.amazon.com/cloudformation-cli/latest/userguide/resource-type-cli-init.html](https://docs.aws.amazon.com/cloudformation-cli/latest/userguide/resource-type-cli-init.html)CLI, viene creato automaticamente un file di schema Hook. Utilizzate questo file di schema come punto di partenza per definire la forma e la semantica del vostro Hook personalizzato.

## Sintassi dello schema
<a name="schema-syntax"></a>

Lo schema seguente è la struttura di un Hook.

```
{
"typeName": "string",
    "description": "string",
    "sourceUrl": "string",
    "documentationUrl": "string",
    "definitions": {
        "definitionName": {
          . . .
        }
    },
    "typeConfiguration": {
        "properties": {
             "propertyName": {
                "description": "string",
                "type": "string",
                 . . .
            },
        },
    "required": [
        "propertyName"
         . . .
            ],
    "additionalProperties": false
    },
    "handlers": {
        "preCreate": {
            "targetNames": [
            ],
            "permissions": [
            ]
        },
        "preUpdate": {
            "targetNames": [
            ],
            "permissions": [
            ]
        },
        "preDelete": {
            "targetNames": [
            ],
            "permissions": [
            ]
        }
   },
   "additionalProperties": false
}
```

`typeName`  <a name="hooks-properties-typeName"></a>
Il nome univoco del tuo Hook. Specifica uno spazio dei nomi in tre parti per il tuo Hook, con uno schema consigliato di. `Organization::Service::Hook`  
I seguenti namespace dell'organizzazione sono riservati e non possono essere utilizzati nei nomi dei tipi di Hook:  
+ `Alexa`
+ `AMZN`
+ `Amazon`
+ `ASK`
+ `AWS`
+ `Custom`
+ `Dev`
*Obbligatorio:* sì  
 *Pattern*: `^[a-zA-Z0-9]{2,64}::[a-zA-Z0-9]{2,64}::[a-zA-Z0-9]{2,64}$`  
*Minimum*: `10`  
*Maximum*: `196`

`description`  <a name="hooks-properties-description"></a>
Una breve descrizione dell'Hook visualizzato nella console. CloudFormation   
*Obbligatorio:* sì

`sourceUrl`  <a name="hooks-properties-sourceUrl"></a>
L'URL del codice sorgente dell'Hook, se pubblico.  
*Obbligatorio:* no  
*Maximum*: `4096`

`documentationUrl`  <a name="hooks-properties-documentationurl"></a>
L'URL di una pagina che fornisce la documentazione dettagliata per l'Hook.  
*Obbligatorio:* sì  
*Pattern*: `^https\:\/\/[0-9a-zA-Z]([-.\w]*[0-9a-zA-Z])(\:[0-9]*)*([\?/#].*)?$`  
*Maximum*: `4096`  
Sebbene lo schema Hook debba includere descrizioni delle proprietà complete e accurate, è possibile utilizzare la `documentationURL` proprietà per fornire agli utenti maggiori dettagli, inclusi esempi, casi d'uso e altre informazioni dettagliate.

`definitions`  <a name="hooks-properties-definitions"></a>
Utilizzate il `definitions` blocco per fornire schemi di proprietà Hook condivisi.  
È consigliabile utilizzare la `definitions` sezione per definire gli elementi dello schema che possono essere utilizzati in più punti dello schema di tipo Hook. È quindi possibile utilizzare un puntatore JSON per fare riferimento a quell'elemento nei punti appropriati dello schema di tipo Hook.  
*Obbligatorio:* no

`typeConfiguration`  <a name="hooks-properties-typeconfiguration"></a>
La definizione dei dati di configurazione di un Hook.  
*Obbligatorio:* sì

`properties`  <a name="hooks-properties-properties"></a>
Le proprietà dell'Hook. Tutte le proprietà di un Hook devono essere espresse nello schema. Allinea le proprietà dello schema Hook con le proprietà di configurazione del tipo Hook.  
Le proprietà annidate non sono consentite. Definite invece tutte le proprietà annidate nell'`definitions`elemento e utilizzate un `$ref` puntatore per farvi riferimento nella proprietà desiderata.
Attualmente sono supportate le seguenti proprietà:  
+ `default`— Il valore predefinito della proprietà.
+ `description`— Una descrizione della proprietà.
+ `pattern`— Un modello regex utilizzato per convalidare l'input.
+ `type`— Il tipo di proprietà accettato.

`additionalProperties`  <a name="hooks-properties-additionalproperties"></a>
`additionalProperties` deve essere impostato su `false`. Tutte le proprietà di un Hook devono essere espresse nello schema: non sono consentiti input arbitrari.  
*Obbligatorio:* sì  
*Valori validi*: `false`

`handlers`  <a name="hooks-properties-handlers"></a>
I gestori specificano le operazioni che possono avviare l'Hook definito nello schema, come i punti di invocazione Hook. Ad esempio, un `preUpdate` gestore viene richiamato prima delle operazioni di aggiornamento per tutte le destinazioni specificate nel gestore.  
*Valori validi*: `preCreate` \$1 `preUpdate` \$1 `preDelete`  
È necessario specificare almeno un valore per il gestore.
Le operazioni di stack che determinano lo stato di `UpdateCleanup` non richiamano un Hook. Ad esempio, durante i due scenari seguenti, il `preDelete` gestore di Hook non viene richiamato:  
+ lo stack viene aggiornato dopo aver rimosso una risorsa dal modello.
+ viene eliminata una risorsa con il tipo di aggiornamento [sostitutivo](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-updating-stacks-update-behaviors.html#update-replacement).

`targetNames`  <a name="hooks-properties-targetNames"></a>
Una matrice di stringhe di nomi di tipo a cui Hook si rivolge. Ad esempio, se un `preCreate` gestore ha una `AWS::S3::Bucket` destinazione, l'Hook viene eseguito per i bucket Amazon S3 durante la fase di preprovisioning.  
+ `TargetName`

  Specificare almeno un nome di destinazione per ogni gestore implementato.

  *Pattern*: `^[a-zA-Z0-9]{2,64}::[a-zA-Z0-9]{2,64}::[a-zA-Z0-9]{2,64}$`

  *Minimum*: `1`

  *Obbligatorio:* sì
**avvertimento**  
I riferimenti dinamici a SSM SecureString e Secrets Manager non vengono risolti prima di essere passati a Hooks.

`permissions`  <a name="hooks-properties-permissions"></a>
Un array di stringhe che specifica le AWS autorizzazioni necessarie per richiamare il gestore.  
*Obbligatorio:* sì

`additionalProperties`  <a name="hooks-additional-properties"></a>
`additionalProperties` deve essere impostato su `false`. Tutte le proprietà di un Hook devono essere espresse nello schema: non sono consentiti input arbitrari.  
*Obbligatorio:* sì  
*Valori validi*: `false`

## Esempi di schemi Hooks
<a name="example-hooks"></a>

 **Esempio 1** 

Le procedure dettagliate per Java e Python utilizzano il seguente esempio di codice. Di seguito è riportato un esempio di struttura per un Hook chiamato. `mycompany-testing-mytesthook.json`

```
{
    "typeName":"MyCompany::Testing::MyTestHook",
    "description":"Verifies S3 bucket and SQS queues properties before create and update",
    "sourceUrl":"https://mycorp.com/my-repo.git",
    "documentationUrl":"https://mycorp.com/documentation",
    "typeConfiguration":{
        "properties":{
            "minBuckets":{
                "description":"Minimum number of compliant buckets",
                "type":"string"
            },
            "minQueues":{
                "description":"Minimum number of compliant queues",
                "type":"string"
            },
            "encryptionAlgorithm":{
                "description":"Encryption algorithm for SSE",
                "default":"AES256",
                "type":"string",
                "pattern": "[a-zA-Z]*[1-9]"
            }
        },
        "required":[
            
        ],
        "additionalProperties":false
    },
    "handlers":{
        "preCreate":{
            "targetNames":[
                "AWS::S3::Bucket",
                "AWS::SQS::Queue"
            ],
            "permissions":[
                
            ]
        },
        "preUpdate":{
            "targetNames":[
                "AWS::S3::Bucket",
                "AWS::SQS::Queue"
            ],
            "permissions":[
                
            ]
        },
        "preDelete":{
            "targetNames":[
                "AWS::S3::Bucket",
                "AWS::SQS::Queue"
            ],
            "permissions":[
                "s3:ListBucket",
                "s3:ListAllMyBuckets",
                "s3:GetEncryptionConfiguration",
                "sqs:ListQueues",
                "sqs:GetQueueAttributes",
                "sqs:GetQueueUrl"
            ]
        }
    },
    "additionalProperties":false
}
```

 **Esempio 2** 

L'esempio seguente è uno schema che utilizza `STACK` and `CHANGE_SET` for per `targetNames` indirizzare un modello di stack e un'operazione di set di modifiche.

```
{
    "typeName":"MyCompany::Testing::MyTestHook",
    "description":"Verifies Stack and Change Set properties before create and update",
    "sourceUrl":"https://mycorp.com/my-repo.git",
    "documentationUrl":"https://mycorp.com/documentation",
    "typeConfiguration":{
        "properties":{
            "minBuckets":{
                "description":"Minimum number of compliant buckets",
                "type":"string"
            },
            "minQueues":{
                "description":"Minimum number of compliant queues",
                "type":"string"
            },
            "encryptionAlgorithm":{
                "description":"Encryption algorithm for SSE",
                "default":"AES256",
                "type":"string",
                "pattern": "[a-zA-Z]*[1-9]"
            }
        },
        "required":[
        ],
        "additionalProperties":false
    },
    "handlers":{
        "preCreate":{
            "targetNames":[
                "STACK",
                "CHANGE_SET"
            ],
            "permissions":[  
            ]
        },
        "preUpdate":{
            "targetNames":[
                "STACK"
            ],
            "permissions":[
            ]
        },
        "preDelete":{
            "targetNames":[
                "STACK"
            ],
            "permissions":[
                
            ]
        }
    },
    "additionalProperties":false
}
```