You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用cloudformation-cli-go-plugin开发的CF自定义资源获取Guid属性失败求助

问题排查与解决建议

针对你遇到的自定义资源!GetAtt获取Guid属性失败的问题,结合你的场景(资源创建成功、本地验证正常、契约测试通过),可以按以下步骤排查:

1. 确认Create/Update响应的属性结构

虽然Guid是primaryIdentifier,但CloudFormation在处理!GetAtt时,依赖资源Handler返回的响应数据中明确包含该属性。检查你的Go代码中Create/Update逻辑的返回值:

  • 确保返回的模型对象中Guid字段已正确赋值,同时PhysicalResourceID设置为Guid的值
  • 示例代码片段:
    return &resourcemodel.CreateResponse{
        WorkloadModel: resourcemodel.WorkloadModel{
            Guid: aws.String(generatedGuid),
            // 其他必要属性
        },
        PhysicalResourceID: aws.String(generatedGuid),
    }, nil
    
    注意:即使Guid是主键,也必须在响应的Data(模型对象)中显式传递,CloudFormation才会将其作为可获取的属性。

2. 检查CloudWatch日志中的实际响应

部署到AWS后,查看自定义资源对应的Lambda函数的CloudWatch日志,定位Create/Update阶段的ResponsePayload:

  • 确认日志中返回的Payload里包含Guid字段,且值正确
  • 排查是否存在部署后环境差异(如API调用失败、环境变量缺失)导致实际返回的响应中丢失Guid

3. 验证资源Schema定义细节

检查你的资源Schema文件,确保:

  • primaryIdentifier设置为["/properties/Guid"]
  • readOnlyProperties包含["/properties/Guid"]
  • properties中Guid的类型定义正确(如string),且属性名大小写与代码中完全一致(CloudFormation对属性名大小写敏感)
  • 示例Schema片段:
    "properties": {
      "Guid": {
        "type": "string",
        "description": "Unique identifier for the workload"
      }
    },
    "primaryIdentifier": ["/properties/Guid"],
    "readOnlyProperties": ["/properties/Guid"]
    

4. 尝试用!Ref替代!GetAtt

由于Guid是primaryIdentifier,!Ref会直接返回资源的物理ID(即Guid值),可以临时替换Outputs测试:

Outputs:
  CustomResourceAttribute1:
    Value: !Ref Resource1

如果!Ref能正常返回值,说明主键映射正确,问题集中在!GetAtt对应的属性传递环节,需回到步骤1-2检查响应数据。

5. 排查Lambda执行权限(边缘场景)

虽然资源能创建成功,但后续CloudFormation发起属性获取请求时,Lambda可能因权限不足无法获取Guid对应的后端数据。检查Lambda的IAM角色,确保其拥有访问后端服务(若Guid来自外部服务)的必要权限。

内容的提问来源于stack exchange,提问作者Mike Summers

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 05:35:27