

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

# Mendaftarkan Hook khusus dengan CloudFormation
<a name="registering-hooks"></a>

Setelah Anda membuat Hook khusus, Anda harus mendaftarkannya CloudFormation sehingga Anda dapat menggunakannya. Di bagian ini, Anda akan belajar mengemas dan mendaftarkan Hook Anda untuk digunakan di bagian Anda Akun AWS.

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

Jika Anda telah mengembangkan Hook Anda dengan Java, gunakan Maven untuk mengemasnya.

Dalam direktori proyek Hook Anda, jalankan perintah berikut untuk membangun Hook Anda, menjalankan pengujian unit, dan paket proyek Anda sebagai `JAR` file yang dapat Anda gunakan untuk mengirimkan Hook Anda ke CloudFormation registri.

```
mvn clean package
```

## Daftarkan Hook kustom
<a name="registering-hooks-register"></a>

**Untuk mendaftarkan Hook**

1. (Opsional) Konfigurasikan Wilayah AWS nama default Anda ke`us-west-2`, dengan mengirimkan operasi. [https://docs.aws.amazon.com/cli/latest/reference/configure/](https://docs.aws.amazon.com/cli/latest/reference/configure/)

   ```
   $ 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. (Opsional) Perintah berikut membangun dan mengemas proyek Hook Anda tanpa mendaftarkannya.

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

1. Daftarkan Hook Anda dengan menggunakan CloudFormation operasi 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
   ```

   Perintah mengembalikan perintah berikut.

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

   *Hasil*: Anda telah berhasil mendaftarkan Hook Anda.

## Verifikasi Hooks dapat diakses di akun Anda
<a name="verifying-hooks"></a>

Verifikasi bahwa Hook Anda tersedia di Anda Akun AWS dan di Wilayah tempat Anda mengirimkannya.

1. Untuk memverifikasi Hook Anda, gunakan [https://docs.aws.amazon.com/cli/latest/reference/cloudformation/list-types.html](https://docs.aws.amazon.com/cli/latest/reference/cloudformation/list-types.html)perintah untuk mencantumkan Hook Anda yang baru terdaftar dan kembalikan deskripsi ringkasannya.

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

   Perintah mengembalikan output berikut dan juga akan menunjukkan kepada Anda Hooks yang tersedia untuk umum yang dapat Anda aktifkan di Akun AWS dan Wilayah Anda.

   ```
   {
       "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. Ambil `TypeArn` dari `list-type` output untuk Hook Anda dan simpan.

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

Untuk mempelajari cara menerbitkan Hooks untuk penggunaan umum, lihat[Publishing Hooks untuk penggunaan umum](hooks-publishing.md).

### Konfigurasikan Kait
<a name="configure-hooks"></a>

Setelah Anda mengembangkan dan mendaftarkan Hook Anda, Anda dapat mengonfigurasi Hook Anda Akun AWS dengan menerbitkannya ke registri.
+ Untuk mengkonfigurasi Hook di akun Anda, gunakan [https://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_SetTypeConfiguration.html](https://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_SetTypeConfiguration.html)operasi. Operasi ini memungkinkan properti Hook yang didefinisikan di `properties` bagian skema Hook. Dalam contoh berikut, `minBuckets` properti diatur ke `1` dalam konfigurasi.
**catatan**  
Dengan mengaktifkan Hooks di akun Anda, Anda mengotorisasi Hook untuk menggunakan izin yang ditentukan dari Anda. Akun AWS CloudFormation menghapus izin yang tidak diperlukan sebelum meneruskan izin Anda ke Hook. CloudFormation merekomendasikan pelanggan atau pengguna Hook untuk meninjau izin Hook dan mengetahui izin apa yang diizinkan oleh Hooks sebelum mengaktifkan Hooks di akun Anda.

  Tentukan data konfigurasi untuk ekstensi Hook terdaftar Anda di akun yang sama dan Wilayah 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
  ```
**penting**  
Untuk mengaktifkan Hook Anda untuk secara proaktif memeriksa konfigurasi tumpukan Anda, Anda harus mengatur `HookInvocationStatus` to `ENABLED` di `HookConfiguration` bagian, setelah Hook telah terdaftar dan diaktifkan di akun Anda.

## Mengakses AWS APIs di handler
<a name="accessing-apis-in-handlers"></a>

Jika Hooks Anda menggunakan AWS API di salah satu handlernya, CFN-CLI secara otomatis membuat template peran eksekusi IAM,. `hook-role.yaml` `hook-role.yaml`Template didasarkan pada izin yang ditentukan untuk setiap handler di bagian handler dari skema Hook. Jika `--role-arn` flag tidak digunakan selama [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)operasi, peran dalam tumpukan ini akan disediakan dan digunakan sebagai peran eksekusi Hook.

Untuk informasi selengkapnya, lihat [Mengakses AWS APIs dari jenis sumber daya](https://docs.aws.amazon.com/cloudformation-cli/latest/userguide/resource-type-develop.html#resource-type-develop-executionrole).

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

**catatan**  
Jika Anda memilih untuk membuat peran eksekusi Anda sendiri, kami sangat menyarankan untuk mempraktikkan prinsip hak istimewa paling sedikit dengan mengizinkan daftar saja `hooks.cloudformation.amazonaws.com` dan`resources.cloudformation.amazonaws.com`.

Template berikut menggunakan izin IAM, Amazon S3, dan 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
```