本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
向注册自定义 Hook AWS CloudFormation
创建自定义 Hook 后,需要向其注册 AWS CloudFormation 才能使用它。在本节中,你将学习如何打包和注册你的Hook,以便在你的 AWS 账户。
Package a Hook (Java)
如果你是用 Java 开发的 Hook,请使用 Maven 对其进行打包。
在 Hook 项目的目录中,运行以下命令来构建 Hook,运行单元测试,并将项目打包为可用于将 Hook 提交到 CloudFormation 注册表JAR的文件中。
mvn clean package
注册一个自定义 Hook
注册挂钩
- 
    (可选)将您的默认 AWS 区域 名称配置为 us-west-2,方法是提交 configure操作。$aws configureAWS Access Key ID [None]:<Your Access Key ID>AWS Secret Access Key [None]:<Your Secret Key>Default region name [None]:us-west-2Default output format [None]:json
- 
    (可选)以下命令无需注册即可构建和打包您的 Hook 项目。 $cfn submit --dry-run
- 
    使用 Hook 注册你的 Hook CloudFormation CLI submit操作。 $cfn submit --set-default该命令将返回以下命令。 {‘ProgressStatus’: ‘COMPLETE’}结果:您已成功注册您的 Hook。 
验证您的账户中是否可以访问 Hook
确认您的 Hook 在您 AWS 账户 和您已提交该挂钩的区域中可用。
- 
    要验证您的 Hook,请使用 list-types命令列出你新注册的 Hook 并返回它的摘要描述。 $aws cloudformation list-types该命令返回以下输出,还将向您显示可在 AWS 账户 和区域中激活的公开可用的 Hook。 { "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" } ] }
- 
    TypeArn从 Hook 的list-type输出中检索并保存。export HOOK_TYPE_ARN=arn:aws:cloudformation:us-west-2:ACCOUNT_ID/type/hook/MyCompany-Testing-MyTestHook
要了解如何发布 Hook 供公众使用,请参阅发布 Hook 供公众使用。
配置挂钩
开发并注册了 Hook 后,您可以 AWS 账户 通过将其发布到注册表来配置您的 Hook。
- 
     要在您的账户中配置 Hook,请使用 SetTypeConfiguration操作。此操作启用挂钩架构 properties部分中定义的挂钩属性。在以下示例中,该minBuckets属性在配置1中设置为。注意通过在您的账户中启用 Hook,即授权 Hook 使用您的 AWS 账户已定义权限。 CloudFormation 在将您的权限传递给 Hook 之前,会移除不需要的权限。 CloudFormation 建议客户或 Hook 用户在账户中启用 Hook 之前,先查看 Hook 权限并了解允许 Hook 拥有哪些权限。 在同一个账户中为你注册的 Hook 扩展指定配置数据,然后 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重要要使您的 Hook 能够主动检查堆栈的配置,您必须在账户 ENABLED中注册并激活 Hook 之后,在该HookConfiguration部分中将设置为。HookInvocationStatus
AWS APIs在处理程序中访问
如果您的 Hook AWS API 在其任何处理程序中使用了,则 CFN-CLI 会自动创建IAM执行角色模板。hook-role.yaml该hook-role.yaml模板基于在 Hook 架构的处理程序部分中为每个处理程序指定的权限。如果在此期间未使用该--role-arn标志 generate操作,则此堆栈中的角色将被配置并用作 Hook 的执行角色。
有关更多信息,请参阅AWS APIs从资源类型访问。
hook-role.yaml 模板
注意
如果您选择创建自己的执行角色,我们强烈建议您遵循最低权限原则,即仅允许上架hooks.cloudformation.amazonaws.com和resources.cloudformation.amazonaws.com。
以下模板使用IAM、Amazon S3 和亚马逊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