资源编排ROSd Fn::GetAttr 怎么取有两层的值?保存模板时报错,提示只能取一层.
基于它的结果继续使用其他取值函数,比如 Fn::Jq、Fn::Select https://help.aliyun.com/document_detail/28865.html 此回答整理自钉群“资源编排ROS客户支持群”
在ROS资源编排中,Fn::GetAtt函数用于获取资源的某个属性值,通常只能获取到一层属性值。如果需要获取多层属性值,可以使用AWS::CloudFormation::Stack资源类型来嵌套多个模板。
在使用Fn::GetAtt函数获取资源属性值时,必须指定属性名称。如果您需要获取多层属性值,可以使用“.”操作符来获取子属性。例如,假设您需要获取一个EC2实例的私有IP地址和公有IP地址,可以使用以下方式:
json Copy "PrivateIp": {"Fn::GetAtt": ["EC2Instance", "PrivateIp"]}, "PublicIp": {"Fn::GetAtt": ["EC2Instance", "PublicIp"]} 其中,EC2Instance是EC2实例资源的名称,PrivateIp和PublicIp是EC2实例的属性名称,分别表示私有IP地址和公有IP地址。使用“.”操作符可以获取子属性值。
如果需要获取更多层级的属性值,可以使用AWS::CloudFormation::Stack资源类型嵌套多个模板。例如,可以创建一个嵌套模板,用于创建VPC和子网,然后在主模板中使用AWS::CloudFormation::Stack来引用这个嵌套模板,并使用Fn::GetAtt函数获取子网的CIDR块。示例代码如下:
json Copy "VPCStack": { "Type": "AWS::CloudFormation::Stack", "Properties": { "TemplateURL": "https://s3.amazonaws.com/mybucket/vpc-template.json" } }, "SubnetCIDR": {"Fn::GetAtt": ["VPCStack", "Outputs.SubnetCIDR"]} 在这个示例中,VPCStack是嵌套模板的名称,它引用了一个名为vpc-template.json的模板文件。使用Fn::GetAtt函数可以获取嵌套模板中输出的SubnetCIDR属性值,即子网的CIDR块。
需要注意的是,在使用AWS::CloudFormation::Stack资源类型时,需要指定模板URL或模板文件路径,并确保模板文件的格式正确
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。