

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

# Enregistrer un Hook personnalisé avec CloudFormation
<a name="registering-hooks"></a>

Une fois que vous avez créé un Hook personnalisé, vous devez l' CloudFormation enregistrer pour pouvoir l'utiliser. Dans cette section, vous allez apprendre à empaqueter et à enregistrer votre Hook pour l'utiliser dans votre Compte AWS.

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

Si vous avez développé votre Hook avec Java, utilisez Maven pour le packager.

Dans le répertoire de votre projet Hook, exécutez la commande suivante pour créer votre Hook, exécuter des tests unitaires et empaqueter votre projet sous forme de `JAR` fichier que vous pouvez utiliser pour soumettre votre Hook au CloudFormation registre.

```
mvn clean package
```

## Enregistrer un Hook personnalisé
<a name="registering-hooks-register"></a>

**Pour enregistrer un Hook**

1. (Facultatif) Configurez votre Région AWS nom par défaut sur`us-west-2`, en soumettant l'[https://docs.aws.amazon.com/cli/latest/reference/configure/](https://docs.aws.amazon.com/cli/latest/reference/configure/)opération.

   ```
   $ 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. (Facultatif) La commande suivante crée et empaquette votre projet Hook sans l'enregistrer.

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

1. Enregistrez votre Hook en utilisant l'[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)opération CloudFormation CLI.

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

   Cette commande renvoie la commande suivante.

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

   *Résultats* : Vous avez enregistré votre Hook avec succès.

## Vérifier que les Hooks sont accessibles dans votre compte
<a name="verifying-hooks"></a>

Vérifiez que votre Hook est disponible dans votre région Compte AWS et dans les régions auxquelles vous l'avez envoyé.

1. Pour vérifier votre Hook, utilisez la [https://docs.aws.amazon.com/cli/latest/reference/cloudformation/list-types.html](https://docs.aws.amazon.com/cli/latest/reference/cloudformation/list-types.html)commande pour répertorier le Hook que vous venez d'enregistrer et renvoyer une description sommaire de celui-ci.

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

   La commande renvoie le résultat suivant et vous montrera également les Hooks accessibles au public que vous pouvez activer dans votre région Compte AWS et dans votre région.

   ```
   {
       "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. Récupérez le contenu `TypeArn` de la `list-type` sortie de votre Hook et enregistrez-le.

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

Pour savoir comment publier des Hooks destinés à un usage public, consultez[Hooks de publication destinés à un usage public](hooks-publishing.md).

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

Après avoir développé et enregistré votre Hook, vous pouvez le configurer dans votre Hook en le Compte AWS publiant dans le registre.
+ Pour configurer un Hook dans votre compte, utilisez l'[https://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_SetTypeConfiguration.html](https://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_SetTypeConfiguration.html)opération. Cette opération active les propriétés du hook définies dans la section `properties` de schéma du hook. Dans l'exemple suivant, la `minBuckets` propriété est définie sur `1` dans la configuration.
**Note**  
En activant les Hooks dans votre compte, vous autorisez un Hook à utiliser les autorisations définies par votre Compte AWS. CloudFormation supprime les autorisations non requises avant de transmettre vos autorisations au Hook. CloudFormation recommande aux clients ou aux utilisateurs de Hook de consulter les autorisations Hook et de connaître les autorisations auxquelles les Hooks sont autorisés avant d'activer Hooks dans votre compte.

  Spécifiez les données de configuration de votre extension Hook enregistrée dans le même compte et Région 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
  ```
**Important**  
Pour permettre à votre Hook d'inspecter de manière proactive la configuration de votre stack, vous devez définir le `HookInvocationStatus` to `ENABLED` dans la `HookConfiguration` section, une fois que le Hook a été enregistré et activé dans votre compte.

## Accès AWS APIs dans les gestionnaires
<a name="accessing-apis-in-handlers"></a>

Si votre Hooks utilise une AWS API dans l'un de ses gestionnaires, le CFN-CLI crée automatiquement un modèle de rôle d'exécution IAM,. `hook-role.yaml` Le `hook-role.yaml` modèle est basé sur les autorisations spécifiées pour chaque gestionnaire dans la section du gestionnaire du schéma Hook. Si l'`--role-arn`indicateur n'est pas utilisé pendant l'[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)opération, le rôle de cette pile sera provisionné et utilisé comme rôle d'exécution du Hook.

Pour plus d'informations, consultez la section [Accès à AWS APIs partir d'un type de ressource.](https://docs.aws.amazon.com/cloudformation-cli/latest/userguide/resource-type-develop.html#resource-type-develop-executionrole)

### modèle hook-role.yaml
<a name="resource-role.yaml"></a>

**Note**  
Si vous choisissez de créer votre propre rôle d'exécution, nous vous recommandons vivement de suivre le principe du moindre privilège en autorisant uniquement le listage `hooks.cloudformation.amazonaws.com` et`resources.cloudformation.amazonaws.com`.

Le modèle suivant utilise les autorisations IAM, Amazon S3 et 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
```