

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

# Referência de sintaxe de esquema para Hooks CloudFormation
<a name="hooks-schema"></a>

Esta seção descreve a sintaxe do esquema que você usa para desenvolver CloudFormation Hooks.

Um Hook inclui uma especificação Hook representada por um esquema JSON e manipuladores Hook. A primeira etapa na criação de um Hook personalizado é modelar um esquema que define o Hook, suas propriedades e seus atributos. Quando você inicializa um projeto Hook personalizado usando o 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, um arquivo de esquema Hook é criado para você. Use esse arquivo de esquema como ponto de partida para definir a forma e a semântica do seu Hook personalizado.

## Sintaxe do esquema
<a name="schema-syntax"></a>

O esquema a seguir é a estrutura de um 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>
O nome exclusivo do seu Hook. Especifica um namespace de três partes para seu Hook, com um padrão recomendado de. `Organization::Service::Hook`  
Os seguintes namespaces da organização são reservados e não podem ser usados nos nomes do tipo Hook:  
+ `Alexa`
+ `AMZN`
+ `Amazon`
+ `ASK`
+ `AWS`
+ `Custom`
+ `Dev`
*Obrigatório*: sim  
 *Pattern*: `^[a-zA-Z0-9]{2,64}::[a-zA-Z0-9]{2,64}::[a-zA-Z0-9]{2,64}$`  
*Mínimo*: `10`  
*Maximum*: `196`

`description`  <a name="hooks-properties-description"></a>
Uma breve descrição do Hook exibido no CloudFormation console.  
*Obrigatório*: sim

`sourceUrl`  <a name="hooks-properties-sourceUrl"></a>
O URL do código-fonte do Hook, se público.  
*Obrigatório*: não  
*Maximum*: `4096`

`documentationUrl`  <a name="hooks-properties-documentationurl"></a>
O URL de uma página que fornece documentação detalhada para o Hook.  
*Obrigatório*: sim  
*Pattern*: `^https\:\/\/[0-9a-zA-Z]([-.\w]*[0-9a-zA-Z])(\:[0-9]*)*([\?/#].*)?$`  
*Maximum*: `4096`  
Embora o esquema Hook deva incluir descrições de propriedades completas e precisas, você pode usar a `documentationURL` propriedade para fornecer aos usuários mais detalhes, incluindo exemplos, casos de uso e outras informações detalhadas.

`definitions`  <a name="hooks-properties-definitions"></a>
Use o `definitions` bloco para fornecer esquemas de propriedades Hook compartilhados.  
É considerado uma prática recomendada usar a `definitions` seção para definir elementos do esquema que podem ser usados em vários pontos do esquema do tipo Hook. Em seguida, você pode usar um ponteiro JSON para referenciar esse elemento nos locais apropriados em seu esquema do tipo Hook.  
*Obrigatório*: não

`typeConfiguration`  <a name="hooks-properties-typeconfiguration"></a>
A definição dos dados de configuração de um Hook.  
*Obrigatório*: sim

`properties`  <a name="hooks-properties-properties"></a>
As propriedades do gancho. Todas as propriedades de um Hook devem ser expressas no esquema. Alinhe as propriedades do esquema Hook com as propriedades de configuração do tipo Hook.  
Propriedades aninhadas não são permitidas. Em vez disso, defina todas as propriedades aninhadas no `definitions` elemento e use um `$ref` ponteiro para referenciá-las na propriedade desejada.
Atualmente, as seguintes propriedades são suportadas:  
+ `default`— O valor padrão da propriedade.
+ `description`— Uma descrição da propriedade.
+ `pattern`— Um padrão regex usado para validar a entrada.
+ `type`— O tipo aceito da propriedade.

`additionalProperties`  <a name="hooks-properties-additionalproperties"></a>
`additionalProperties` deve ser definido como `false`. Todas as propriedades de um Hook devem ser expressas no esquema: entradas arbitrárias não são permitidas.  
*Obrigatório*: sim  
*Valores válidos*: `false`

`handlers`  <a name="hooks-properties-handlers"></a>
Os manipuladores especificam as operações que podem iniciar o Hook definido no esquema, como os pontos de invocação do Hook. Por exemplo, um `preUpdate` manipulador é chamado antes das operações de atualização para todos os destinos especificados no manipulador.  
*Valores válidos*: `preCreate` \$1 `preUpdate` \$1 `preDelete`  
Pelo menos um valor deve ser especificado para o manipulador.
Operações de empilhamento que resultam no status de `UpdateCleanup` não invocam um Hook. Por exemplo, durante os dois cenários a seguir, o `preDelete` manipulador do Hook não é invocado:  
+ a pilha é atualizada após a remoção de um recurso do modelo.
+ um recurso com o tipo de atualização de [substituição](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-updating-stacks-update-behaviors.html#update-replacement) é excluído.

`targetNames`  <a name="hooks-properties-targetNames"></a>
Uma matriz de seqüências de nomes de tipos que Hook tem como alvo. Por exemplo, se um `preCreate` manipulador tem um `AWS::S3::Bucket` destino, o Hook é executado para buckets do Amazon S3 durante a fase de pré-provisionamento.  
+ `TargetName`

  Especifique pelo menos um nome de destino para cada manipulador implementado.

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

  *Mínimo*: `1`

  *Obrigatório*: sim
**Atenção**  
As referências dinâmicas do SSM SecureString e do Secrets Manager não são resolvidas antes de serem passadas para Hooks.

`permissions`  <a name="hooks-properties-permissions"></a>
Uma matriz de strings que especifica as AWS permissões necessárias para invocar o manipulador.  
*Obrigatório*: sim

`additionalProperties`  <a name="hooks-additional-properties"></a>
`additionalProperties` deve ser definido como `false`. Todas as propriedades de um Hook devem ser expressas no esquema: entradas arbitrárias não são permitidas.  
*Obrigatório*: sim  
*Valores válidos*: `false`

## Exemplos de esquemas de Hooks
<a name="example-hooks"></a>

 **Exemplo 1** 

As apresentações passo a passo de Java e Python usam o exemplo de código a seguir. A seguir está um exemplo de estrutura para um Hook chamado`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
}
```

 **Exemplo 2** 

O exemplo a seguir é um esquema que usa o `STACK` e `CHANGE_SET` for para `targetNames` direcionar um modelo de pilha e uma operação de conjunto de alterações.

```
{
    "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
}
```