

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# カスタムフックを に登録する CloudFormation
<a name="registering-hooks"></a>

カスタムフックを作成したら、それを に登録 CloudFormation して使用できるようにする必要があります。このセクションでは、 で使用するフックをパッケージ化して登録する方法について説明します AWS アカウント。

## フックのパッケージ化 (Java)
<a name="registering-hooks-package"></a>

Hook with Java を開発している場合は、Maven を使用してパッケージ化します。

Hook プロジェクトの ディレクトリで、次のコマンドを実行してフックを構築し、ユニットテストを実行し、プロジェクトを`JAR`ファイルとしてパッケージ化し、これを使用してフックを CloudFormation レジストリに送信します。

```
mvn clean package
```

## カスタムフックを登録する
<a name="registering-hooks-register"></a>

**フックを登録するには**

1. (オプション) [https://docs.aws.amazon.com/cli/latest/reference/configure/](https://docs.aws.amazon.com/cli/latest/reference/configure/)オペレーションを送信して`us-west-2`、デフォルト AWS リージョン 名を に設定します。

   ```
   $ 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. (オプション) 次のコマンドは、フックプロジェクトを登録せずにビルドしてパッケージ化します。

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

1. CloudFormation 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
   ```

   このコマンドは以下のコマンドを返します。

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

   *結果*: フックが正常に登録されました。

## アカウントでフックにアクセスできることを確認する
<a name="verifying-hooks"></a>

フックが AWS アカウント および送信先のリージョンで使用可能であることを確認します。

1. フックを確認するには、 [https://docs.aws.amazon.com/cli/latest/reference/cloudformation/list-types.html](https://docs.aws.amazon.com/cli/latest/reference/cloudformation/list-types.html) コマンドを使用して新しく登録したフックを一覧表示し、その概要の説明を返します。

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

   コマンドは次の出力を返し、 AWS アカウント および リージョンでアクティブ化できる公開フックも表示されます。

   ```
   {
       "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. フックの`list-type`出力`TypeArn`から を取得し、保存します。

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

公開用にフックを発行する方法については、「」を参照してください[公開用フックの公開](hooks-publishing.md)。

### フックの設定
<a name="configure-hooks"></a>

フックを開発して登録したら、 レジストリに公開 AWS アカウント することで、 でフックを設定できます。
+ アカウントでフックを設定するには、 [https://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_SetTypeConfiguration.html](https://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_SetTypeConfiguration.html)オペレーションを使用します。このオペレーションにより、フックのスキーマ `properties` セクションで定義されているフックのプロパティが有効になります。次の例では、設定`1`で `minBuckets`プロパティが に設定されています。
**注記**  
アカウントでフックを有効にすると、 から定義されたアクセス許可を使用するフックを承認します AWS アカウント。CloudFormation は、アクセス許可をフックに渡す前に、不要なアクセス許可を削除します。CloudFormation では、顧客またはフックユーザーがフックのアクセス許可を確認し、アカウントでフックを有効にする前にフックが許可されるアクセス許可に注意することをお勧めします。

  同じアカウント および で登録された Hook 拡張機能の設定データを指定します 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
  ```
**重要**  
フックがスタックの設定をプロアクティブに検査できるようにするには、フックがアカウントに登録されてアクティブ化された後、 `HookConfiguration`セクション`HookInvocationStatus``ENABLED`で を に設定する必要があります。

## ハンドラーでの AWS APIs へのアクセス
<a name="accessing-apis-in-handlers"></a>

Hooks がいずれかのハンドラーで AWS API を使用する場合、CFN-CLI は IAM 実行ロールテンプレート を自動的に作成します`hook-role.yaml`。`hook-role.yaml` テンプレートは、フックスキーマのハンドラーの セクションで各ハンドラーに指定されたアクセス許可に基づいています。[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) オペレーション中に `--role-arn`フラグが使用されない場合、このスタックのロールはプロビジョニングされ、フックの実行ロールとして使用されます。

詳細については、[「リソースタイプからの AWS APIs」を参照してください。](https://docs.aws.amazon.com/cloudformation-cli/latest/userguide/resource-type-develop.html#resource-type-develop-executionrole)

### hook-role.yaml テンプレート
<a name="resource-role.yaml"></a>

**注記**  
独自の実行ロールを作成する場合は、 `hooks.cloudformation.amazonaws.com`と のみを許可して最小特権の原則を実践することを強くお勧めします`resources.cloudformation.amazonaws.com`。

次のテンプレートでは、IAM、Amazon S3、および 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
```