

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

# Registrazione di un Hook personalizzato con CloudFormation
<a name="registering-hooks"></a>

Dopo aver creato un Hook personalizzato, devi registrarlo per CloudFormation poterlo utilizzare. In questa sezione, imparerai a impacchettare e registrare il tuo Hook per utilizzarlo nel tuo Account AWS.

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

Se hai sviluppato il tuo Hook con Java, usa Maven per impacchettarlo.

Nella directory del tuo progetto Hook, esegui il seguente comando per creare il tuo Hook, esegui test unitari e impacchetta il progetto come `JAR` file da utilizzare per inviare il tuo Hook al CloudFormation registro.

```
mvn clean package
```

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

**Per registrare un Hook**

1. (Facoltativo) Configura il tuo Regione AWS nome predefinito in`us-west-2`, inviando l'[https://docs.aws.amazon.com/cli/latest/reference/configure/](https://docs.aws.amazon.com/cli/latest/reference/configure/)operazione.

   ```
   $ 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. (Facoltativo) Il comando seguente crea e impacchetta il progetto Hook senza registrarlo.

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

1. Registra il tuo Hook utilizzando l' CloudFormation operazione 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
   ```

   Questo comando restituisce il comando seguente.

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

   *Risultati*: Hai registrato con successo il tuo Hook.

## Gli Hooks di verifica sono accessibili nel tuo account
<a name="verifying-hooks"></a>

Verifica che il tuo Hook sia disponibile nella tua regione Account AWS e nelle regioni a cui lo hai inviato.

1. Per verificare il tuo Hook, usa il [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 per elencare l'Hook appena registrato e restituiscine una descrizione riassuntiva.

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

   Il comando restituisce il seguente risultato e ti mostrerà anche gli Hook disponibili pubblicamente che puoi attivare nelle tue Account AWS regioni.

   ```
   {
       "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 l'`list-type`output `TypeArn` del tuo Hook e salvalo.

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

Per informazioni su come pubblicare Hooks per uso pubblico, consulta. [Ganci di pubblicazione per uso pubblico](hooks-publishing.md)

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

Dopo aver sviluppato e registrato il tuo Hook, puoi configurare il tuo Hook nel tuo Account AWS pubblicandolo nel registro.
+ Per configurare un Hook nel tuo account, usa l'[https://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_SetTypeConfiguration.html](https://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_SetTypeConfiguration.html)operazione. Questa operazione abilita le proprietà dell’Hook definite nella sezione relativa allo schema dell’Hook `properties`. Nell'esempio seguente, la `minBuckets` proprietà è impostata su `1` nella configurazione.
**Nota**  
Abilitando Hooks nel tuo account, autorizzi un Hook a utilizzare le autorizzazioni definite dal tuo. Account AWS CloudFormation rimuove le autorizzazioni non richieste prima di passare le autorizzazioni a Hook. CloudFormation consiglia ai clienti o agli utenti di Hook di rivedere le autorizzazioni di Hook e di essere consapevoli delle autorizzazioni a cui sono consentiti gli Hook prima di abilitare gli Hook nel proprio account.

  Specificate i dati di configurazione per l'estensione Hook registrata nello stesso account e. Regione 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**  
Per consentire a Hook di controllare in modo proattivo la configurazione dello stack, è necessario impostare l'`HookInvocationStatus`opzione `ENABLED` nella `HookConfiguration` sezione, dopo che l'Hook è stato registrato e attivato nel proprio account.

## Accesso nei gestori AWS APIs
<a name="accessing-apis-in-handlers"></a>

Se il tuo Hooks utilizza un' AWS API in uno qualsiasi dei suoi gestori, CFN-CLI crea automaticamente un modello di ruolo di esecuzione IAM,. `hook-role.yaml` Il `hook-role.yaml` modello si basa sui permessi specificati per ogni gestore nella sezione dedicata al gestore dello schema Hook. Se il `--role-arn` flag non viene utilizzato durante 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)operazione, il ruolo in questo stack verrà assegnato e utilizzato come ruolo di esecuzione dell'Hook.

Per ulteriori informazioni, vedere [Accesso AWS APIs da un tipo di risorsa](https://docs.aws.amazon.com/cloudformation-cli/latest/userguide/resource-type-develop.html#resource-type-develop-executionrole).

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

**Nota**  
Se scegli di creare il tuo ruolo di esecuzione, ti consigliamo vivamente di mettere in pratica il principio del privilegio minimo, autorizzando solo l'inserimento nell'elenco e. `hooks.cloudformation.amazonaws.com` `resources.cloudformation.amazonaws.com`

Il modello seguente utilizza le autorizzazioni 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
```