

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 建模自定义 CloudFormation 挂钩
<a name="hooks-model"></a>

对自定义 CloudFormation Hook 进行建模涉及创建一个用于定义 Hook、其属性和属性的架构。使用`cfn init`命令创建自定义 Hook 项目时，会将示例 Hook 架构创建为 JSON 格式的文本文件。`{{hook-name}}.json`

目标调用点和目标操作指定了调用 Hook 的确切位置。*Hook 处理程序*为这些点托管可执行的自定义逻辑。例如，`CREATE`操作的目标操作使用`preCreate`处理程序。当 Hook 目标和服务执行匹配操作时，您在处理程序中编写的代码将调用。*挂钩目标*是调用挂钩的目的地。您可以指定目标，例如 CloudFormation 公共资源、私有资源或自定义资源。Hook 支持无限数量的钩子目标。

该架构包含挂钩所需的权限。创作 Hook 需要您为每个 Hook 处理程序指定权限。 CloudFormation 鼓励作者编写遵循标准安全建议的策略，即授予*最低权限*或仅授予执行任务所需的权限。确定用户（和角色）需要做什么，然后制定策略，*仅*允许他们为 Hook 操作执行这些任务。 CloudFormation 使用这些权限来限定 Hook 用户提供的权限。这些权限将传递给 Hook。Hook 处理程序使用这些权限来访问 AWS 资源。

您可以使用以下架构文件作为起点来定义您的 Hook。使用 Hook 架构来指定要实现的处理程序。如果您选择不实现特定的处理程序，请将其从 Hook 架构的处理程序部分中删除。有关架构的更多详细信息，请参阅[架构语法](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)