

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

# Ganci di pubblicazione per uso pubblico
<a name="hooks-publishing"></a>

Per sviluppare un Hook pubblico di terze parti, sviluppa il tuo Hook come estensione privata. Quindi, in ognuna delle aree Regione AWS in cui desideri rendere l'estensione disponibile al pubblico: 

1. Registra il tuo Hook come estensione privata nel CloudFormation registro.

1. Testa il tuo Hook per assicurarti che soddisfi tutti i requisiti necessari per essere pubblicato nel CloudFormation registro.

1. Pubblica il tuo Hook nel CloudFormation registro.
**Nota**  
Prima di pubblicare qualsiasi estensione in una determinata regione, devi prima registrarti come editore di estensioni in quella regione. Per eseguire questa operazione in più regioni contemporaneamente, consulta [Pubblicazione di estensioni in più regioni utilizzando StackSets](https://docs.aws.amazon.com/cloudformation-cli/latest/userguide/publish-extension-stacksets.html) nella Guida per l'*utente della CloudFormation CLI*.

Dopo aver sviluppato e registrato il tuo Hook, puoi renderlo disponibile pubblicamente CloudFormation agli utenti generici *pubblicandolo* nel CloudFormation registro, come estensione pubblica di terze parti.

Gli Hook pubblici di terze parti consentono di offrire agli CloudFormation utenti la possibilità di ispezionare in modo proattivo la configurazione delle AWS risorse prima del provisioning. Come per gli Hook privati, gli Hook pubblici vengono trattati allo stesso modo di qualsiasi Hook pubblicato da within. AWS CloudFormation

Gli hook pubblicati nel registro sono visibili da tutti CloudFormation gli utenti nella cartella Regioni AWS in cui sono pubblicati. Gli utenti possono quindi *attivare* l'estensione nel proprio account, il che la rende disponibile per l'uso nei propri modelli. Per ulteriori informazioni, consulta [Utilizzare estensioni pubbliche di terze parti dal CloudFormation registro](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/registry-public.html) nella *Guida per l'CloudFormation utente*.

# Test di un Hook personalizzato per uso pubblico
<a name="hooks-testing-registered-hooks"></a>

Per pubblicare il tuo Hook personalizzato registrato, deve superare tutti i requisiti di test definiti per esso. Di seguito è riportato un elenco di requisiti necessari prima di pubblicare l'Hook personalizzato come estensione di terze parti.

Ogni gestore e target viene testato due volte. Una volta per `SUCCESS` e una volta per`FAILED`.
+ Per caso di `SUCCESS` risposta:
  + Lo stato deve essere`SUCCESS`.
  + Non deve restituire un codice di errore.
  + Il ritardo di callback deve essere impostato su `0` secondi, se specificato.
+ Per il caso `FAILED` di risposta:
  + Lo stato deve essere`FAILED`.
  + Deve restituire un codice di errore.
  + Deve avere un messaggio in risposta.
  + Il ritardo di callback deve essere impostato su `0` secondi, se specificato.
+ Per il caso `IN_PROGRESS` di risposta:
  + Non deve restituire un codice di errore.
  + `Result`il campo non deve essere impostato in risposta.

# Specificazione dei dati di input da utilizzare nei test contrattuali
<a name="hooks-input-data-contract-test"></a>

Per impostazione predefinita, CloudFormation esegue i test contrattuali utilizzando le proprietà di input generate dai modelli definiti nello schema Hook. Tuttavia, la maggior parte degli Hook è sufficientemente complessa che le proprietà di input per la precreazione o il preaggiornamento degli stack di provisioning richiedono una comprensione della risorsa da fornire. Per risolvere questo problema, è possibile specificare l'input che CloudFormation utilizza durante l'esecuzione dei test contrattuali.

CloudFormation offre due modi per specificare i dati di input da utilizzare durante l'esecuzione dei test contrattuali:
+ Sostituisce il file

  L'utilizzo di un `overrides` file fornisce un modo semplice per specificare i dati di input per determinate proprietà specifiche CloudFormation da utilizzare durante `preCreate` i test operativi. `preUpdate` `preDelete`
+ File di input

  Puoi anche utilizzare più `input` file per specificare i dati di input del test contrattuale se:
  + Volete o dovete specificare dati di input diversi per le operazioni di creazione, aggiornamento ed eliminazione oppure dati non validi con cui eseguire il test.
  + Desiderate specificare più set di dati di input diversi.

## Specificare i dati di input utilizzando un file di override
<a name="hook-override-inputs"></a>

Di seguito è riportato un esempio di dati di input di Amazon S3 Hook che utilizzano il `overrides` file.

```
{
    "CREATE_PRE_PROVISION": {
        "AWS::S3::Bucket": {
            "resourceProperties": {
                "/BucketName": "encryptedbucket-us-west-2-contractor",
                "/BucketEncryption/ServerSideEncryptionConfiguration": [
                    {
                        "BucketKeyEnabled": true,
                        "ServerSideEncryptionByDefault": {
                            "KMSMasterKeyID": "KMS-KEY-ARN",
                            "SSEAlgorithm": "aws:kms"
                        }
                    }
                ]
            }
        },
        "AWS::SQS::Queue": {
            "resourceProperties": {
                "/QueueName": "MyQueueContract",
                "/KmsMasterKeyId": "hellocontract"
            }
        }
    },
    "UPDATE_PRE_PROVISION": {
        "AWS::S3::Bucket": {
            "resourceProperties": {
                "/BucketName": "encryptedbucket-us-west-2-contractor",
                "/BucketEncryption/ServerSideEncryptionConfiguration": [
                    {
                        "BucketKeyEnabled": true,
                        "ServerSideEncryptionByDefault": {
                            "KMSMasterKeyID": "KMS-KEY-ARN",
                            "SSEAlgorithm": "aws:kms"
                        }
                    }
                ]
            },
            "previousResourceProperties": {
                "/BucketName": "encryptedbucket-us-west-2-contractor",
                "/BucketEncryption/ServerSideEncryptionConfiguration": [
                    {
                        "BucketKeyEnabled": true,
                        "ServerSideEncryptionByDefault": {
                            "KMSMasterKeyID": "KMS-KEY-ARN",
                            "SSEAlgorithm": "aws:kms"
                        }
                    }
                ]
            }
        }
    },
    "INVALID_UPDATE_PRE_PROVISION": {
        "AWS::S3::Bucket": {
            "resourceProperties": {
                "/BucketName": "encryptedbucket-us-west-2-contractor",
                "/BucketEncryption/ServerSideEncryptionConfiguration": [
                    {
                        "BucketKeyEnabled": true,
                        "ServerSideEncryptionByDefault": {
                            "KMSMasterKeyID": "KMS-KEY-ARN",
                            "SSEAlgorithm": "AES256"
                        }
                    }
                ]
            },
            "previousResourceProperties": {
                "/BucketName": "encryptedbucket-us-west-2-contractor",
                "/BucketEncryption/ServerSideEncryptionConfiguration": [
                    {
                        "BucketKeyEnabled": true,
                        "ServerSideEncryptionByDefault": {
                            "KMSMasterKeyID": "KMS-KEY-ARN",
                            "SSEAlgorithm": "aws:kms"
                        }
                    }
                ]
            }
        }
    },
    "INVALID": {
        "AWS::SQS::Queue": {
            "resourceProperties": {
                "/QueueName": "MyQueueContract",
                "/KmsMasterKeyId": "KMS-KEY-ARN"
            }
        }
    }
}
```

## Specificazione dei dati di input utilizzando i file di input
<a name="hook-test-inputs"></a>

Utilizzate `input` i file per specificare diversi tipi di dati di input CloudFormation da utilizzare: `preCreate` input, `preUpdate` input e input non valido. Ogni tipo di dati è specificato in un file separato. È inoltre possibile specificare più set di dati di input per i test contrattuali.

Per specificare `input` i file CloudFormation da utilizzare nei test contrattuali, aggiungi una `inputs` cartella alla directory principale del tuo progetto Hooks. Quindi aggiungi i tuoi file di input.

Specificate il tipo di dati di input contenuti in un file utilizzando le seguenti convenzioni di denominazione, dove **n**è un numero intero:
+ `inputs_n_pre_create.json`: utilizza file con `preCreate` gestori per specificare gli input per la creazione della risorsa.
+ `inputs_n_pre_update.json`: Utilizza file con `preUpdate` gestori per specificare gli input per l'aggiornamento della risorsa.
+ `inputs_n_pre_delete.json`: Usa file con `preDelete` gestori per specificare gli input per l'eliminazione della risorsa.
+ `inputs_n_invalid.json`: Per specificare input non validi da testare.

Per specificare più set di dati di input per i test contrattuali, incrementa il numero intero nei nomi dei file per ordinare i set di dati di input. Ad esempio, il primo set di file di input dovrebbe essere denominato `inputs_1_pre_create.json``inputs_1_pre_update.json`, e. `inputs_1_pre_invalid.json` Il set successivo si chiamerebbe `inputs_2_pre_create.json``inputs_2_pre_update.json`,`inputs_2_pre_invalid.json`, e così via.

Ogni file di input è un file JSON contenente solo le proprietà delle risorse da utilizzare nei test.

Di seguito è riportata una directory di esempio `inputs` per Amazon S3 specificare i dati di input utilizzando i file di input.

`inputs_1_pre_create.json`  <a name="inputs_1_pre_create.json"></a>
Di seguito è riportato un esempio di test del `inputs_1_pre_create.json` contratto.  

```
{
    "AWS::S3::Bucket": {
        "resourceProperties": {
            "AccessControl": "BucketOwnerFullControl",
            "AnalyticsConfigurations": [],
            "BucketEncryption": {
                "ServerSideEncryptionConfiguration": [
                    {
                        "BucketKeyEnabled": true,
                        "ServerSideEncryptionByDefault": {
                            "KMSMasterKeyID": "KMS-KEY-ARN",
                            "SSEAlgorithm": "aws:kms"
                        }
                    }
                ]
            },
            "BucketName": "encryptedbucket-us-west-2"
        }
    },
    "AWS::SQS::Queue": {
        "resourceProperties": {
            "QueueName": "MyQueue",
            "KmsMasterKeyId": "KMS-KEY-ARN"
        }
    }
}
```

`inputs_1_pre_update.json`  <a name="inputs_1_pre_update.json"></a>
Quello che segue è un esempio di test del `inputs_1_pre_update.json` contratto.  

```
{
    "AWS::S3::Bucket": {
        "resourceProperties": {
            "BucketEncryption": {
                "ServerSideEncryptionConfiguration": [
                    {
                        "BucketKeyEnabled": true,
                        "ServerSideEncryptionByDefault": {
                            "KMSMasterKeyID": "KMS-KEY-ARN",
                            "SSEAlgorithm": "aws:kms"
                        }
                    }
                ]
            },
            "BucketName": "encryptedbucket-us-west-2"
        },
        "previousResourceProperties": {
            "BucketEncryption": {
                "ServerSideEncryptionConfiguration": [
                    {
                        "BucketKeyEnabled": true,
                        "ServerSideEncryptionByDefault": {
                            "KMSMasterKeyID": "KMS-KEY-ARN",
                            "SSEAlgorithm": "aws:kms"
                        }
                    }
                ]
            },
            "BucketName": "encryptedbucket-us-west-2"
        }
    }
}
```

`inputs_1_invalid.json`  <a name="inputs_1_invalid.json"></a>
Quello che segue è un esempio di test del `inputs_1_invalid.json` contratto.  

```
{
    "AWS::S3::Bucket": {
        "resourceProperties": {
            "AccessControl": "BucketOwnerFullControl",
            "AnalyticsConfigurations": [],
            "BucketEncryption": {
                "ServerSideEncryptionConfiguration": [
                    {
                        "ServerSideEncryptionByDefault": {
                            "SSEAlgorithm": "AES256"
                        }
                    }
                ]
            },
            "BucketName": "encryptedbucket-us-west-2"
        }
    },
    "AWS::SQS::Queue": {
        "resourceProperties": {
            "NotValid": "The property of this resource is not valid."
        }
    }
}
```

`inputs_1_invalid_pre_update.json`  <a name="inputs_1_invalid_pre_update.json"></a>
Quello che segue è un esempio di test del `inputs_1_invalid_pre_update.json` contratto.  

```
{
    "AWS::S3::Bucket": {
        "resourceProperties": {
            "BucketEncryption": {
                "ServerSideEncryptionConfiguration": [
                    {
                        "BucketKeyEnabled": true,
                        "ServerSideEncryptionByDefault": {
                            "KMSMasterKeyID": "KMS-KEY-ARN",
                            "SSEAlgorithm": "AES256"
                        }
                    }
                ]
            },
            "BucketName": "encryptedbucket-us-west-2"
        },
        "previousResourceProperties": {
            "BucketEncryption": {
                "ServerSideEncryptionConfiguration": [
                    {
                        "BucketKeyEnabled": true,
                        "ServerSideEncryptionByDefault": {
                            "KMSMasterKeyID": "KMS-KEY-ARN",
                            "SSEAlgorithm": "aws:kms"
                        }
                    }
                ]
            },
            "BucketName": "encryptedbucket-us-west-2"
        }
    }
}
```

Per ulteriori informazioni, consulta [Publishing extensions to make them available for public use](https://docs.aws.amazon.com/cloudformation-cli/latest/userguide/publish-extension.html) (Pubblicazione di estensioni per renderle disponibili per l'uso pubblico) nella *Guida per l'utente dell'interfaccia a riga di comando di CloudFormation *.