

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 建立自訂 CloudFormation 勾點的模型
<a name="hooks-model"></a>

建立自訂 CloudFormation 勾點的模型需要建立定義勾點、其屬性及其屬性的結構描述。當您使用 `cfn init`命令建立自訂 Hook 專案時，Hook 結構描述範例會建立為 JSON 格式的文字檔案 `{{hook-name}}.json`。

目標調用點和目標動作會指定叫用勾點的確切點。*勾點處理常式*託管這些點的可執行自訂邏輯。例如，`CREATE`操作的目標動作會使用`preCreate`處理常式。當 Hook 目標和服務執行相符動作時，您在處理常式中寫入的程式碼將會叫用 。*勾點目標*是調用勾點的目的地。您可以指定目標，例如 CloudFormation 公有資源、私有資源或自訂資源。勾點支援無限數量的勾點目標。

結構描述包含勾點所需的許可。編寫勾點需要您為每個勾點處理常式指定許可。CloudFormation 鼓勵作者撰寫遵循授予*最低權限*或僅授予執行任務所需許可之標準安全建議的政策。決定使用者 （和角色） 需要執行的動作，然後制定政策，允許他們*僅*執行勾點操作的任務。CloudFormation 使用這些許可來縮小範圍勾點使用者提供的許可。這些許可會傳遞至 勾點。勾點處理常式使用這些許可來存取 AWS 資源。

您可以使用下列結構描述檔案做為定義勾點的起點。使用勾點結構描述來指定您要實作的處理常式。如果您選擇不實作特定處理常式，請從勾點結構描述的處理常式區段中移除它。如需結構描述的詳細資訊，請參閱 [結構描述語法](hooks-schema.md)。

```
{
    "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"
            }
        },
        "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
}
```

**Topics**
+ [使用 Java 建立自訂 CloudFormation 勾點的模型](hooks-model-java.md)
+ [使用 Python 建立自訂 CloudFormation 勾點的模型](hooks-model-python.md)