CloudFormation栈模板报错:无法识别指定Hook资源类型
问题分析
你遇到的报错核心原因是:AWS::CloudFormation::Hook和AWSSamples::LambdaFunctionInvoker::Hook不属于CloudFormation栈模板的资源类型,不能直接放在模板的Resources块中定义。CloudFormation Hook是用于合规验证的扩展机制,需要通过「注册Hook类型+栈部署时指定配置」的方式使用,而非作为栈内资源创建。
修正步骤
1. 确认Hook类型已注册到目标AWS账户/区域
如果还未注册AWSSamples::LambdaFunctionInvoker::Hook类型,执行以下CLI命令完成注册(需提供Hook的schema handler包,可从AWS Samples相关资源获取):
aws cloudformation register-type \ --type HOOK \ --type-name AWSSamples::LambdaFunctionInvoker::Hook \ --schema-handler-package s3://<你的存储桶路径>/hook-package.zip
若该Hook是AWS公共可用类型,可添加--public-version参数引用官方发布的版本。
2. 清理原模板的错误定义
修改你的CloudFormation模板,删除Resources块内的LambdaFunctionInvokerHook部分(因为Hook不属于栈资源范畴),保留模板中原本需要创建的其他资源内容。
3. 部署栈时指定Hook配置
CLI部署方式
使用aws cloudformation create-stack命令时,通过--hooks参数传入Hook配置:
aws cloudformation create-stack \ --stack-name 你的目标栈名称 \ --template-body file://清理后的模板文件路径.yml \ --hooks '[ { "Type": "AWSSamples::LambdaFunctionInvoker::Hook", "Properties": { "LambdaFunctions": ["arn:aws:lambda:us-east-1:account_id:function:function_name"] } } ]'
控制台部署方式
在CloudFormation控制台创建/更新栈的流程中,找到配置选项 -> 钩子板块,点击「添加钩子」,选择AWSSamples::LambdaFunctionInvoker::Hook类型,然后填入对应的LambdaFunctions配置即可。
内容的提问来源于stack exchange,提问作者Lalana Nagaraj
相关产品推荐
相关产品推荐

