如何解决 CloudFormation 中的“Model validation failed (#: extraneous key [Key] is not permitted)”(模型验证失败 [#:不允许外键 [Key]])错误?

2 分钟阅读
0

堆栈事件中收到“Model validation failed (#: extraneous key [Key] is not permitted)”(模型验证失败 [#:不允许外键 [Key]])错误。通过 AWS CloudFormation 命令行界面 (CLI) 使用自定义资源提供程序创建资源时,会发生此错误。

简短描述

尝试使用资源提供程序创建具有属性的资源时,会收到此错误消息。但是,您并未在资源提供程序架构中定义一个或多个属性,或者您正在使用预留属性。

如果您遇到与使用资源提供程序有关的其他错误的问题,请参阅以下文章,以获取更多排查故障步骤:

**注意:**如果在运行 AWS CLI 命令时收到错误,请确保您使用的是最新版本的 AWS CLI

解决方法

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

**注意:**资源提供程序架构文件为 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 未能解决问题,请通过更改资源提供程序架构和 CloudFormation 模板中的属性名称来检查您是否正在使用预留属性。然后,重建并注册您的资源类型,并尝试使用具有不同属性名称的 CloudFormation 再次创建资源。

请考虑以下提示:

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

要在成功注册类型版本后将当前类型版本设置为默认版本,请将 --set-default 选项指定为 cfn submit。例如:

$ cfn submit --set-default

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

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


相关信息

AWS CloudFormation CLI

AWS 官方
AWS 官方已更新 2 年前