如何解决 AWS CloudFormation 中的 “模型验证失败(#:不允许无关密钥 [密钥])”这一错误?

上次更新时间:2020 年 8 月 17 日

在 AWS CloudFormation 中使用我的资源提供程序创建资源时,我在堆栈事件中收到“模型验证失败(#:不允许无关密钥 [密钥])”这一错误。如何解决此错误?

简短描述

解决方法

1.    确认在您的 AWS CloudFormation 模板中得以定义的属性,也在您的organization-service-resource.json中得到了定义。

注意:资源提供者 schema 文件为Organization-service-resource.json格式的 JSON 文件,位于项目的根目录中。

2.    如果您已正确定义属性,请通过按顺序运行cfn generatemvn packagecfn submit 命令来确认您的项目是否已成功创建。例如:

$ cfn generate
Generated files for Organization::Service::Resource
$ mvn package
[INFO] Scanning for projects...
[INFO] 
[INFO] --< software.organization.service.resource:organization-service-resource-handler >--
[INFO] Building organization-service-resource-handler 1.0-SNAPSHOT
[INFO] --------------------------------[ jar ]---------------------------------
...
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  21.690 s
[INFO] Finished at: 2020-07-14T16:02:47-05:00
[INFO] ------------------------------------------------------------------------
$ cfn submit 
Successfully submitted type. Waiting for registration with token '12345a-abcde-6789-abc1-a1234b567891' to complete.
{'ProgressStatus': 'COMPLETE', 'Description': 'Deployment is currently in DEPLOY_STAGE of status COMPLETED' , 'TypeArn': 'arn:aws:cloudformation:us-east-1:1234567891:type/resource/Organization-Service-Resource', 'TypeVersionArn': 'arn:aws:cloudformation:us-east-1:1234567891:type/resource/Organization-Service-Resource/00000035', 'ResponseMetadata': {'RequestId': '123a1234-b123-4567-abcd-123a123b1c1d', 'HTTPStatusCode': 200, 'HTTPHeaders': {'x-amzn-requestid': '123a1234-b123-4567-abcd-123a123b1c1d', 'content-type': 'text/xml', 'content-length': '952', 'date': 'Tue, 14 Jul 2020 21:16:17 GMT'}, 'RetryAttempts': 0}}

3.    要将项目的当前版本设置为默认使用,请运行以下命令:

aws cloudformation set-type-default-version --type RESOURCE --type-name Organization::Service::Resource --version-id 00000005

注意:--type-name--version-id的值替换为TypeVersionArn键中的资源类型名称和cfn submit返回的构建的最新版本。

4.    如果步骤 1-3 未能解决问题,请通过更改资源提供商 schema 和 AWS CloudFormation 模板中的属性名称来检查您是否正在使用预留属性。然后,重建并注册您的资源类型,然后尝试使用具有不同属性名称的 AWS CloudFormation 再次创建资源。

请考虑以下提示:

如果您的单元测试尚未完成,而您想跳过测试,请运行mvn -Dmaven.test.skip=true package ,而非mvn package

要在成功注册类型版本后将当前类型版本设置为默认版本,请根据以下示例将--set-default选项指定为cfn submit

$ cfn submit --set-default

注:有关更多信息,请参阅提交

您可以通过从项目的根目录导航到目录/target/surefire-reports来排除测试故障。


这篇文章对您有帮助吗?


您是否需要账单或技术支持?