

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

# Referensi sintaks skema untuk Hooks CloudFormation
<a name="hooks-schema"></a>

Bagian ini menjelaskan sintaks skema yang Anda gunakan untuk mengembangkan CloudFormation Hooks.

Hook mencakup spesifikasi Hook yang diwakili oleh skema JSON dan penangan Hook. Langkah pertama dalam membuat Hook kustom adalah pemodelan skema yang mendefinisikan Hook, propertinya, dan atributnya. Saat Anda menginisialisasi proyek Hook kustom menggunakan perintah CloudFormation [https://docs.aws.amazon.com/cloudformation-cli/latest/userguide/resource-type-cli-init.html](https://docs.aws.amazon.com/cloudformation-cli/latest/userguide/resource-type-cli-init.html)CLI, file skema Hook dibuat untuk Anda. Gunakan file skema ini sebagai titik awal untuk menentukan bentuk dan semantik Hook kustom Anda.

## Skema sintaks
<a name="schema-syntax"></a>

Skema berikut adalah struktur untuk Hook.

```
{
"typeName": "string",
    "description": "string",
    "sourceUrl": "string",
    "documentationUrl": "string",
    "definitions": {
        "definitionName": {
          . . .
        }
    },
    "typeConfiguration": {
        "properties": {
             "propertyName": {
                "description": "string",
                "type": "string",
                 . . .
            },
        },
    "required": [
        "propertyName"
         . . .
            ],
    "additionalProperties": false
    },
    "handlers": {
        "preCreate": {
            "targetNames": [
            ],
            "permissions": [
            ]
        },
        "preUpdate": {
            "targetNames": [
            ],
            "permissions": [
            ]
        },
        "preDelete": {
            "targetNames": [
            ],
            "permissions": [
            ]
        }
   },
   "additionalProperties": false
}
```

`typeName`  <a name="hooks-properties-typeName"></a>
Nama unik untuk Hook Anda. Menentukan namespace tiga bagian untuk Hook Anda, dengan pola yang direkomendasikan. `Organization::Service::Hook`  
Ruang nama organisasi berikut dicadangkan dan tidak dapat digunakan dalam nama tipe Hook Anda:  
+ `Alexa`
+ `AMZN`
+ `Amazon`
+ `ASK`
+ `AWS`
+ `Custom`
+ `Dev`
*Wajib*: Ya  
 *Pola:* `^[a-zA-Z0-9]{2,64}::[a-zA-Z0-9]{2,64}::[a-zA-Z0-9]{2,64}$`  
*Minimal*: `10`  
*Maksimum*: `196`

`description`  <a name="hooks-properties-description"></a>
Deskripsi singkat tentang Hook yang ditampilkan di CloudFormation konsol.  
*Wajib*: Ya

`sourceUrl`  <a name="hooks-properties-sourceUrl"></a>
URL kode sumber untuk Hook, jika publik.  
*Wajib*: Tidak  
*Maksimum*: `4096`

`documentationUrl`  <a name="hooks-properties-documentationurl"></a>
URL halaman yang menyediakan dokumentasi rinci untuk Hook.  
*Wajib*: Ya  
*Pola:* `^https\:\/\/[0-9a-zA-Z]([-.\w]*[0-9a-zA-Z])(\:[0-9]*)*([\?/#].*)?$`  
*Maksimum*: `4096`  
Meskipun skema Hook harus menyertakan deskripsi properti yang lengkap dan akurat, Anda dapat menggunakan `documentationURL` properti untuk memberikan detail lebih lanjut kepada pengguna, termasuk contoh, kasus penggunaan, dan informasi terperinci lainnya.

`definitions`  <a name="hooks-properties-definitions"></a>
Gunakan `definitions` blok untuk menyediakan skema properti Hook bersama.  
Ini dianggap sebagai praktik terbaik untuk menggunakan `definitions` bagian untuk menentukan elemen skema yang dapat digunakan di beberapa titik dalam skema tipe Hook Anda. Anda kemudian dapat menggunakan pointer JSON untuk mereferensikan elemen itu di tempat yang sesuai dalam skema tipe Hook Anda.  
*Wajib*: Tidak

`typeConfiguration`  <a name="hooks-properties-typeconfiguration"></a>
Definisi data konfigurasi Hook.  
*Wajib*: Ya

`properties`  <a name="hooks-properties-properties"></a>
Sifat-sifat Hook. Semua properti Hook harus dinyatakan dalam skema. Sejajarkan properti skema Hook dengan properti konfigurasi tipe Hook.  
Properti bersarang tidak diizinkan. Sebagai gantinya, tentukan properti bersarang dalam `definitions` elemen, dan gunakan `$ref` penunjuk untuk mereferensikannya di properti yang diinginkan.
Properti berikut saat ini didukung:  
+ `default`— Nilai default properti.
+ `description`— Deskripsi properti.
+ `pattern`— Pola regex yang digunakan untuk memvalidasi input.
+ `type`— Jenis properti yang diterima.

`additionalProperties`  <a name="hooks-properties-additionalproperties"></a>
`additionalProperties` harus diatur ke `false`. Semua properti Hook harus dinyatakan dalam skema: input arbitrer tidak diperbolehkan.  
*Wajib*: Ya  
*Nilai yang valid*: `false`

`handlers`  <a name="hooks-properties-handlers"></a>
Handler menentukan operasi yang dapat memulai Hook didefinisikan dalam skema, seperti titik pemanggilan Hook. Misalnya, `preUpdate` handler dipanggil sebelum operasi pembaruan untuk semua target yang ditentukan di handler.  
*Nilai yang valid*: `preCreate` \$1 `preUpdate` \$1 `preDelete`  
Setidaknya satu nilai harus ditentukan untuk handler.
Operasi tumpukan yang menghasilkan status `UpdateCleanup` jangan memanggil Hook. Misalnya, selama dua skenario berikut, `preDelete` handler Hook tidak dipanggil:  
+ tumpukan diperbarui setelah menghapus satu sumber daya dari template.
+ sumber daya dengan jenis [penggantian](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-updating-stacks-update-behaviors.html#update-replacement) pembaruan dihapus.

`targetNames`  <a name="hooks-properties-targetNames"></a>
Sebuah array string nama tipe yang Hook target. Misalnya, jika `preCreate` handler memiliki `AWS::S3::Bucket` target, Hook berjalan untuk bucket Amazon S3 selama fase preprovisioning.  
+ `TargetName`

  Tentukan setidaknya satu nama target untuk setiap handler yang diterapkan.

  *Pola:* `^[a-zA-Z0-9]{2,64}::[a-zA-Z0-9]{2,64}::[a-zA-Z0-9]{2,64}$`

  *Minimal*: `1`

  *Wajib*: Ya
**Awas**  
Referensi dinamis SSM SecureString dan Secrets Manager tidak diselesaikan sebelum diteruskan ke Hooks.

`permissions`  <a name="hooks-properties-permissions"></a>
Sebuah array string yang menentukan AWS izin yang diperlukan untuk memanggil handler.  
*Wajib*: Ya

`additionalProperties`  <a name="hooks-additional-properties"></a>
`additionalProperties` harus diatur ke `false`. Semua properti Hook harus dinyatakan dalam skema: input arbitrer tidak diperbolehkan.  
*Wajib*: Ya  
*Nilai yang valid*: `false`

## Contoh skema Hooks
<a name="example-hooks"></a>

 **Contoh 1** 

Penelusuran Java dan Python menggunakan contoh kode berikut. Berikut ini adalah contoh struktur untuk Hook yang disebut`mycompany-testing-mytesthook.json`.

```
{
    "typeName":"MyCompany::Testing::MyTestHook",
    "description":"Verifies S3 bucket and SQS queues properties before create and update",
    "sourceUrl":"https://mycorp.com/my-repo.git",
    "documentationUrl":"https://mycorp.com/documentation",
    "typeConfiguration":{
        "properties":{
            "minBuckets":{
                "description":"Minimum number of compliant buckets",
                "type":"string"
            },
            "minQueues":{
                "description":"Minimum number of compliant queues",
                "type":"string"
            },
            "encryptionAlgorithm":{
                "description":"Encryption algorithm for SSE",
                "default":"AES256",
                "type":"string",
                "pattern": "[a-zA-Z]*[1-9]"
            }
        },
        "required":[
            
        ],
        "additionalProperties":false
    },
    "handlers":{
        "preCreate":{
            "targetNames":[
                "AWS::S3::Bucket",
                "AWS::SQS::Queue"
            ],
            "permissions":[
                
            ]
        },
        "preUpdate":{
            "targetNames":[
                "AWS::S3::Bucket",
                "AWS::SQS::Queue"
            ],
            "permissions":[
                
            ]
        },
        "preDelete":{
            "targetNames":[
                "AWS::S3::Bucket",
                "AWS::SQS::Queue"
            ],
            "permissions":[
                "s3:ListBucket",
                "s3:ListAllMyBuckets",
                "s3:GetEncryptionConfiguration",
                "sqs:ListQueues",
                "sqs:GetQueueAttributes",
                "sqs:GetQueueUrl"
            ]
        }
    },
    "additionalProperties":false
}
```

 **Contoh 2** 

Contoh berikut adalah skema yang menggunakan `STACK` dan `CHANGE_SET` `targetNames` untuk menargetkan template tumpukan dan operasi set perubahan.

```
{
    "typeName":"MyCompany::Testing::MyTestHook",
    "description":"Verifies Stack and Change Set properties before create and update",
    "sourceUrl":"https://mycorp.com/my-repo.git",
    "documentationUrl":"https://mycorp.com/documentation",
    "typeConfiguration":{
        "properties":{
            "minBuckets":{
                "description":"Minimum number of compliant buckets",
                "type":"string"
            },
            "minQueues":{
                "description":"Minimum number of compliant queues",
                "type":"string"
            },
            "encryptionAlgorithm":{
                "description":"Encryption algorithm for SSE",
                "default":"AES256",
                "type":"string",
                "pattern": "[a-zA-Z]*[1-9]"
            }
        },
        "required":[
        ],
        "additionalProperties":false
    },
    "handlers":{
        "preCreate":{
            "targetNames":[
                "STACK",
                "CHANGE_SET"
            ],
            "permissions":[  
            ]
        },
        "preUpdate":{
            "targetNames":[
                "STACK"
            ],
            "permissions":[
            ]
        },
        "preDelete":{
            "targetNames":[
                "STACK"
            ],
            "permissions":[
                
            ]
        }
    },
    "additionalProperties":false
}
```