

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

# Registrar un Hook personalizado con CloudFormation
<a name="registering-hooks"></a>

Una vez que hayas creado un Hook personalizado, tendrás que registrarlo CloudFormation para poder usarlo. En esta sección, aprenderás a empaquetar y registrar tu Hook para usarlo en tu Cuenta de AWS.

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

Si has desarrollado tu Hook con Java, usa Maven para empaquetarlo.

En el directorio de tu proyecto Hook, ejecuta el siguiente comando para compilar tu Hook, ejecuta pruebas unitarias y empaqueta tu proyecto como un `JAR` archivo que puedas usar para enviar tu Hook al CloudFormation registro.

```
mvn clean package
```

## Registra un Hook personalizado
<a name="registering-hooks-register"></a>

**Para registrar un Hook**

1. (Opcional) Configure su Región de AWS nombre predeterminado como`us-west-2`, enviando la [https://docs.aws.amazon.com/cli/latest/reference/configure/](https://docs.aws.amazon.com/cli/latest/reference/configure/)operación.

   ```
   $ 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) El siguiente comando compila y empaqueta tu proyecto de Hook sin registrarlo.

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

1. Registre su Hook mediante la [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)operación CloudFormation CLI.

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

   El comando devuelve el siguiente comando:

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

   *Resultados*: Has registrado correctamente tu Hook.

## Verificación de que los Hooks estén accesibles en tu cuenta
<a name="verifying-hooks"></a>

Comprueba que tu Hook esté disponible en tu región Cuenta de AWS y en las regiones a las que lo has enviado.

1. Para verificar tu Hook, usa el [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 enumerar tu Hook recién registrado y obtener una descripción resumida del mismo.

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

   El comando devuelve el siguiente resultado y también te mostrará los Hooks disponibles públicamente que puedes activar en tu región Cuenta de AWS y en tu región.

   ```
   {
       "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. Recupera el `TypeArn` archivo de `list-type` salida de tu Hook y guárdalo.

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

Para obtener información sobre cómo publicar Hooks para uso público, consulte[Publicar ganchos para uso público](hooks-publishing.md).

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

Una vez que hayas desarrollado y registrado tu Hook, puedes configurarlo en tu Hook Cuenta de AWS publicándolo en el registro.
+ Para configurar un Hook en tu cuenta, usa la [https://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_SetTypeConfiguration.html](https://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_SetTypeConfiguration.html)operación. Esta operación habilita las propiedades del enlace que se definen en la sección `properties` del esquema del enlace. En el siguiente ejemplo, la `minBuckets` propiedad se establece `1` en la configuración.
**nota**  
Al habilitar Hooks en tu cuenta, autorizas a un Hook a usar los permisos definidos por ti Cuenta de AWS. CloudFormation elimina los permisos no necesarios antes de pasarlos al Hook. CloudFormation recomienda a los clientes o usuarios de Hook que revisen los permisos de Hook y sepan qué permisos tienen los Hooks antes de habilitar los Hooks en su cuenta.

  Especifica los datos de configuración de tu extensión Hook registrada en la misma cuenta y Región de AWS.

  ```
  $ 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 que tu Hook pueda inspeccionar de forma proactiva la configuración de tu pila, debes `HookInvocationStatus` establecer el valor `ENABLED` en la `HookConfiguration` sección una vez que el Hook se haya registrado y activado en tu cuenta.

## Acceder a AWS APIs los controladores
<a name="accessing-apis-in-handlers"></a>

Si sus Hooks utilizan una AWS API en alguno de sus controladores, la CFN-CLI crea automáticamente una plantilla de funciones de ejecución de IAM,. `hook-role.yaml` La `hook-role.yaml` plantilla se basa en los permisos especificados para cada controlador en la sección correspondiente al controlador del esquema Hook. Si el `--role-arn` indicador no se utiliza durante la [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)operación, la función de esta pila se aprovisionará y se utilizará como función de ejecución del Hook.

Para obtener más información, consulta [Acceder AWS APIs desde un tipo de recurso](https://docs.aws.amazon.com/cloudformation-cli/latest/userguide/resource-type-develop.html#resource-type-develop-executionrole).

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

**nota**  
Si decide crear su propio rol de ejecución, le recomendamos encarecidamente que practique el principio del mínimo privilegio y permita publicar solo y. `hooks.cloudformation.amazonaws.com` `resources.cloudformation.amazonaws.com`

La siguiente plantilla utiliza los permisos de IAM, Amazon S3 y 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
```