H AWS CloudFormation ooks 的架构语法参考 - AWS CloudFormation

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

H AWS CloudFormation ooks 的架构语法参考

本节介绍用于开发 AWS CloudFormation Hook 的架构的语法。

Hook 包括由JSON架构和 Hook 处理程序表示的 Hook 规范。创建自定义 Hook 的第一步是对定义挂钩及其属性的架构进行建模。当你使用初始化自定义 Hook 项目时 CloudFormation CLI init命令,将为您创建一个 Hook 架构文件。使用此架构文件作为定义自定义 Hook 的形状和语义的起点。

架构语法

以下架构是 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

您的 Hook 的唯一名称。为 Hook 指定一个由三部分组成的命名空间,推荐的Organization::Service::Hook模式为。

注意

以下组织命名空间已预留,不能用于您的 Hook 类型名称:

  • Alexa

  • AMZN

  • Amazon

  • ASK

  • AWS

  • Custom

  • Dev

必需:是

图案^[a-zA-Z0-9]{2,64}::[a-zA-Z0-9]{2,64}::[a-zA-Z0-9]{2,64}$

最小值10

最大值196

description

CloudFormation 控制台中显示的 Hook 的简短描述。

必需:是

sourceUrl

Hook URL 的源代码(如果是公开的)。

必需:否

最大值4096

documentationUrl

提供 Hook 详细文档的页面中的。URL

必需:是

图案^https\:\/\/[0-9a-zA-Z]([-.\w]*[0-9a-zA-Z])(\:[0-9]*)*([\?/#].*)?$

最大值4096

注意

尽管 Hook 架构应包含完整而准确的属性描述,但您可以使用该documentationURL属性为用户提供更多详细信息,包括示例、用例和其他详细信息。

definitions

使用该definitions块提供共享的 Hook 属性架构。

使用该definitions部分来定义可在您的 Hook 类型架构中的多个位置使用的架构元素被认为是一种最佳实践。然后,您可以使用指JSON针在 Hook 类型架构中的相应位置引用该元素。

必需:否

typeConfiguration

Hook 配置数据的定义。

必需:是

properties

挂钩的属性。Hook 的所有属性都必须在架构中表达。将 Hook 架构属性与挂钩类型配置属性对齐。

注意

不允许使用嵌套属性。相反,在definitions元素中定义任何嵌套属性,然后使用$ref指针在所需的属性中引用它们。

additionalProperties

additionalProperties 必须设置为 false。Hook 的所有属性都必须在架构中表达:不允许任意输入。

必需:是

有效值false

handlers

处理程序指定可以启动架构中定义的 Hook 的操作,例如 Hook 调用点。例如,preUpdate处理程序是在处理程序中所有指定目标的更新操作之前调用的。

有效值preCreate | preUpdate | preDelete

注意

必须为处理程序指定至少一个值。

重要

导致状态为的堆栈操作UpdateCleanup不会调用 Hook。例如,在以下两个场景中,不会调用 Hook 的preDelete处理程序:

  • 从模板中移除一个资源后,堆栈即会更新。

  • 更新类型为替换的资源被删除。

targetNames

Hook 瞄准的类型名称的字符串数组。例如,如果preCreate处理程序有AWS::S3::Bucket目标,则挂钩将在预配置阶段为 Amazon S3 存储桶运行。

  • TargetName

    为每个已实现的处理程序指定至少一个目标名称。

    图案^[a-zA-Z0-9]{2,64}::[a-zA-Z0-9]{2,64}::[a-zA-Z0-9]{2,64}$

    最小值1

    必需:是

    警告

    SSM SecureString 而且 Secrets Manager 动态引用在传递给 Hooks 之前不会被解析。

permissions

一个字符串数组,它指定调用处理程序所需的 AWS 权限。

必需:是

additionalProperties

additionalProperties 必须设置为 false。Hook 的所有属性都必须在架构中表达:不允许任意输入。

必需:是

有效值false

Hooks 架构示例

示例 1

Java 和 Python 演练使用以下代码示例。以下是名为的 Hook 的示例结构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" } }, "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 }

示例 2

以下示例是一个使用STACKCAHNGE_SET for targetNames 来定位堆栈模板和更改集操作的架构。

{ "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" } }, "required":[ ], "additionalProperties":false }, "handlers":{ "preCreate":{ "targetNames":[ "STACK", "CHANGE_SET" ], "permissions":[ ] }, "preUpdate":{ "targetNames":[ "STACK" ], "permissions":[ ] }, "preDelete":{ "targetNames":[ "STACK" ], "permissions":[ ] } }, "additionalProperties":false }