

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

# Registrando um gancho personalizado com CloudFormation
<a name="registering-hooks"></a>

Depois de criar um Hook personalizado, você precisa registrá-lo CloudFormation para poder usá-lo. Nesta seção, você aprenderá a empacotar e registrar seu Hook para uso em seu Conta da AWS.

## Package a Hook (Java)
<a name="registering-hooks-package"></a>

Se você desenvolveu seu Hook com Java, use o Maven para empacotá-lo.

No diretório do seu projeto Hook, execute o comando a seguir para criar seu Hook, executar testes de unidade e empacotar seu projeto como um `JAR` arquivo que você pode usar para enviar seu Hook ao CloudFormation registro.

```
mvn clean package
```

## Registre um gancho personalizado
<a name="registering-hooks-register"></a>

**Para registrar um Hook**

1. (Opcional) Configure seu Região da AWS nome padrão para`us-west-2`, enviando a [https://docs.aws.amazon.com/cli/latest/reference/configure/](https://docs.aws.amazon.com/cli/latest/reference/configure/)operação.

   ```
   $ aws configure
   AWS Access Key ID [None]: <Your Access Key ID>
   AWS Secret Access Key [None]: <Your Secret Key>
   Default region name [None]: us-west-2
   Default output format [None]: json
   ```

1. (Opcional) O comando a seguir cria e empacota seu projeto Hook sem registrá-lo.

   ```
   $ cfn submit --dry-run
   ```

1. Registre seu Hook usando a CloudFormation operação CLI [https://docs.aws.amazon.com/cloudformation-cli/latest/userguide/resource-type-cli-submit.html](https://docs.aws.amazon.com/cloudformation-cli/latest/userguide/resource-type-cli-submit.html).

   ```
   $ cfn submit --set-default
   ```

   O comando retorna o seguinte comando.

   ```
   {‘ProgressStatus’: ‘COMPLETE’}
   ```

   *Resultados*: Você registrou seu Hook com sucesso.

## Verificando se os Hooks estão acessíveis em sua conta
<a name="verifying-hooks"></a>

Verifique se o seu Hook está disponível em você Conta da AWS e nas regiões para as quais você o enviou.

1. Para verificar seu Hook, use o [https://docs.aws.amazon.com/cli/latest/reference/cloudformation/list-types.html](https://docs.aws.amazon.com/cli/latest/reference/cloudformation/list-types.html)comando para listar seu Hook recém-registrado e retornar uma descrição resumida dele.

   ```
   $ aws cloudformation list-types
   ```

   O comando retorna a seguinte saída e também mostra Hooks disponíveis publicamente que você pode ativar em suas Conta da AWS regiões.

   ```
   {
       "TypeSummaries": [
           {
               "Type": "HOOK",
               "TypeName": "MyCompany::Testing::MyTestHook",
               "DefaultVersionId": "00000001",
               "TypeArn": "arn:aws:cloudformation:us-west-2:ACCOUNT_ID/type/hook/MyCompany-Testing-MyTestHook",
               "LastUpdated": "2021-08-04T23:00:03.058000+00:00",
               "Description": "Verifies S3 bucket and SQS queues properties before creating or updating"
           }
       ]
   }
   ```

1. Recupere a `list-type` saída `TypeArn` do seu Hook e salve-a.

   ```
   export HOOK_TYPE_ARN=arn:aws:cloudformation:us-west-2:ACCOUNT_ID/type/hook/MyCompany-Testing-MyTestHook
   ```

Para saber como publicar Hooks para uso público, consulte[Livros de publicação para uso público](hooks-publishing.md).

### Configurar ganchos
<a name="configure-hooks"></a>

Depois de desenvolver e registrar seu Hook, você pode configurar seu Hook no seu Conta da AWS publicando-o no registro.
+ Para configurar um Hook em sua conta, use a [https://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_SetTypeConfiguration.html](https://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_SetTypeConfiguration.html)operação. Essa operação ativa as propriedades do hook que são definidas na seção `properties` do esquema do hook. No exemplo a seguir, a `minBuckets` propriedade está definida como `1` na configuração.
**nota**  
Ao habilitar Hooks em sua conta, você está autorizando um Hook a usar permissões definidas do seu. Conta da AWS CloudFormation remove as permissões não necessárias antes de passar suas permissões para o Hook. CloudFormation recomenda que os clientes ou usuários do Hook revisem as permissões do Hook e estejam cientes de quais permissões os Hooks têm permissão antes de habilitar os Hooks em sua conta.

  Especifique os dados de configuração da sua extensão Hook registrada na mesma conta Região da AWS e.

  ```
  $ aws cloudformation set-type-configuration --region us-west-2 
    --configuration '{"CloudFormationConfiguration":{"HookConfiguration":{"HookInvocationStatus":"ENABLED","FailureMode":"FAIL","Properties":{"minBuckets": "1","minQueues": "1", "encryptionAlgorithm": "aws:kms"}}}}'
    --type-arn $HOOK_TYPE_ARN
  ```
**Importante**  
Para permitir que seu Hook inspecione proativamente a configuração de sua pilha, você deve `HookInvocationStatus` definir o número `ENABLED` na `HookConfiguration` seção, após o Hook ter sido registrado e ativado em sua conta.

## Acessando AWS APIs em manipuladores
<a name="accessing-apis-in-handlers"></a>

Se seus Hooks usam uma AWS API em qualquer um de seus manipuladores, o CFN-CLI cria automaticamente um modelo de função de execução do IAM,. `hook-role.yaml` O `hook-role.yaml` modelo é baseado nas permissões especificadas para cada manipulador na seção do manipulador do esquema Hook. Se o `--role-arn` sinalizador não for usado durante a [https://docs.aws.amazon.com/cloudformation-cli/latest/userguide/resource-type-cli-generate.html](https://docs.aws.amazon.com/cloudformation-cli/latest/userguide/resource-type-cli-generate.html)operação, a função nessa pilha será provisionada e usada como a função de execução do Hook.

Para obter mais informações, consulte [Acessando AWS APIs a partir de um tipo de recurso.](https://docs.aws.amazon.com/cloudformation-cli/latest/userguide/resource-type-develop.html#resource-type-develop-executionrole)

### modelo hook-role.yaml
<a name="resource-role.yaml"></a>

**nota**  
Se você optar por criar sua própria função de execução, é altamente recomendável praticar o princípio do privilégio mínimo, permitindo apenas listar e. `hooks.cloudformation.amazonaws.com` `resources.cloudformation.amazonaws.com`

O modelo a seguir usa as permissões IAM, Amazon S3 e Amazon SQS.

```
AWSTemplateFormatVersion: 2010-09-09
Description: >
  This CloudFormation template creates a role assumed by CloudFormation during
  Hook operations on behalf of the customer.
Resources:
  ExecutionRole:
    Type: 'AWS::IAM::Role'
    Properties:
      MaxSessionDuration: 8400
      AssumeRolePolicyDocument:
        Version: 2012-10-17
        Statement:
          - Effect: Allow
            Principal:
              Service:
                - resources.cloudformation.amazonaws.com
                - hooks.cloudformation.amazonaws.com
            Action: 'sts:AssumeRole'
            Condition:
              StringEquals:
                aws:SourceAccount: !Ref AWS::AccountId
              StringLike:
                aws:SourceArn: !Sub arn:${AWS::Partition}:cloudformation:${AWS::Region}:${AWS::AccountId}:type/hook/MyCompany-Testing-MyTestHook/*
      Path: /
      Policies:
        - PolicyName: HookTypePolicy
          PolicyDocument:
            Version: 2012-10-17
            Statement:
              - Effect: Allow
                Action:
                  - 's3:GetEncryptionConfiguration'
                  - 's3:ListBucket'
                  - 's3:ListAllMyBuckets'
                  - 'sqs:GetQueueAttributes'
                  - 'sqs:GetQueueUrl'
                  - 'sqs:ListQueues'
                Resource: '*'
Outputs:
  ExecutionRoleArn:
    Value: !GetAtt 
      - ExecutionRole
      - Arn
```