模板错误:Fn::GetAtt 的实例引用了未定义的资源

Posted

技术标签:

【中文标题】模板错误:Fn::GetAtt 的实例引用了未定义的资源【英文标题】:Template error: instance of Fn::GetAtt references undefined resource 【发布时间】:2017-06-10 20:52:27 【问题描述】:

我有这个 cloudformation 模板:

"InstanceProfileProd": 
  "Type" : "AWS::IAM::InstanceProfile",
  "Properties": 
    "Path": "/",
    "Roles" : [  "Ref" : "InstanceRole" ]
  
,

"CompLayer": 
  "Type": "AWS::OpsWorks::Layer",
  "DependsOn" : "OpsWorksServiceRole",
  "Properties": 
    "AutoAssignElasticIps" : false,
    "AutoAssignPublicIps" : true,
    "CustomJson" : 
      ,
      "awscli" : 
        "profils" : 
          "default" : 
            "role_arn":  "Fn::GetAtt": [ "InstanceProfileProd","Arn" ] 
          
        
      ,
    ,
    "CustomSecurityGroupIds" :  "Ref" : "SecurityGroupIds" ,
    "EnableAutoHealing" : true,
    "InstallUpdatesOnBoot": false,
    "LifecycleEventConfiguration": 
      "ShutdownEventConfiguration": 
        "DelayUntilElbConnectionsDrained": false,
        "ExecutionTimeout": 120 
      ,
      "Name": "Layer",
      "Shortname" : "layer1",
      "StackId":  "Ref": "CompStack" ,
  
,

当我验证模板时出现此错误:

An error occurred (ValidationError) when calling the ValidateTemplate operation: Template error: instance of Fn::GetAtt references undefined resource InstanceProfileProd

资源都被正确定义和写得很好;我不明白为什么我会收到这个错误。 我的 opsworks 堆栈的所有层都引用了实例配置文件。

【问题讨论】:

除了 JSON 语法错误之外,如果您的问题仍然存在,请发布一个完整的堆栈模板来重现该问题,而不仅仅是较大模板的一小部分。引用FAQ,“问题可能不在您怀疑的部分,而是完全在另一部分。” 【参考方案1】:

您的 JSON 格式不正确。

CustomJSON 下面的行有一个额外的右括号,应该删除:

,

profils 中有一个错字,这似乎不是故意的(尽管可能与当前错误无关)。

【讨论】:

以上是关于模板错误:Fn::GetAtt 的实例引用了未定义的资源的主要内容,如果未能解决你的问题,请参考以下文章

AWS cloudformation 错误:模板验证错误:模板错误:资源 NotificationsTopic 不支持 Fn::GetAtt 中的属性类型 Arn

在 AWS SAM 模板中出现 Fn::GetAtt 错误

级联还是不级联? (“对象引用了未保存的瞬态实例”错误)

TransientPropertyValueException:对象引用了未保存的瞬态实例 - 在刷新之前保存瞬态实例

org.hibernate.TransientObjectException:对象引用了未保存的瞬态实例 - 在刷新之前保存瞬态实例

数据未保存:对象引用了未保存的瞬态实例 - 在刷新之前保存瞬态实例 [重复]