在 AWS CloudFormation 的资源提供者资源上使用 Fn::GetAtt 函数时,如何解决“属性'密钥'不存在”这一错误?
上次更新时间:2020 年 8 月 17 日
在 AWS CloudFormation 的资源提供者资源上使用 Fn::GetAtt 函数时,我收到“属性‘密钥’不存在”这一错误。如何解决此错误?
简短描述
当资源的ReadHandler未返回从资源提供者 schema文件organization-service-resource.json中的列表readOnlyProperties指定的属性时,会收到“属性‘密钥’不存在”这一错误。AWS CloudFormation 会返回此错误,是因为它未收到所需的属性。
如果您遇到与使用资源提供者有关的其他错误的问题,请参阅以下文章,以获取更多排查故障步骤:
- 在 AWS CloudFormation 中使用 CloudFormation CLI 运行 cfn generate 命令时,如何解决“资源规范无效”这一错误?
- 如何解决 AWS CloudFormation 中的 “模型验证失败(#:不允许无关密钥 [密钥])”这一错误?
- 在 AWS CloudFormation 中使用资源提供者类型创建资源时,如何解决“等待创建物理资源时资源超时”这一错误?
- 如何解决 AWS CloudFormation 中的“ java.lang.ClassNotFoundException:com.example.package.resource.HandlerWrapper”这一错误?
解决方法
1. 在您的organization-service-resource.json文件中,确认readOnlyProperties定义遵循的是此格式,其中,Output是在属性部分定义的属性。例如:
"readOnlyProperties": [
"/properties/Output"
],
注意:资源提供者 schema 文件为Organization-service-resource.json格式的 JSON 文件,位于项目的根目录中。
2. 在ReadHandler中,在模型对象中设置属性(在以下示例中为Outpost)。例如:
final ResourceModel model = request.getDesiredResourceState();
model.setOutput("abcdxyz");
return ProgressEvent.<ResourceModel, CallbackContext>builder()
.resourceModel(model)
.status(OperationStatus.SUCCESS)
.build();