【问题标题】:Cloudformation SubnetList get CidrBlockCloudformation SubnetList 获取 CidrBlock
【发布时间】:2019-08-15 04:25:39
【问题描述】:

我正在开发使用 CloudFormation 配置的新基础架构。我需要为安全组获取子网 cidrblock。

我尝试了一些获取子网 Cidr 块的方法,但出现以下错误:

YAML not well-formed

我的模板是:

 SubnetList:
    Description: 'Gateway Subnet Id'
    Type: List<AWS::EC2::Subnet::Id>

.....
..
....

ElastiCacheSecurityGroupIngressGateway: ##SubnetLists
  Type: AWS::EC2::SecurityGroupIngress
  Properties:
    GroupId: !GetAtt SecGroup.GroupId
    IpProtocol: tcp
    FromPort: '6379'
    ToPort: '6379'
    CidrIp: Fn::GetAtt: [ Fn::Select: [ 0, !Ref SubnetList ], CidrBlock ]

我需要从 SubnetList 获取 cidr 块。

我该如何处理?

【问题讨论】:

  • 首先,请始终确保包含您看到的准确错误消息。否则,当人们用谷歌搜索该错误消息时,将找不到您在档案中的问题。其次,因为你有一个格式不正确的 YAML 消息,除非你提供整个模板,否则没有人可以提供帮助,而你只提供了它的一个 sn-p。
  • yaml 格式正确的错误是确切的错误消息,我只想了解如何从作为参数添加的子网中获取 cidr 块。谢谢你的建议
  • 错误消息将是“YAML 格式不正确”,请参阅此页面here
  • 这是我的错字对不起,谢谢:)
  • 最好的办法是在以后复制/粘贴确切的错误消息。我就是做这个的。此外,您似乎正在尝试获取第一个 SubnetId 并将其放在 CidrIp 字段中。但这需要是 IP 地址吗?

标签: amazon-web-services amazon-cloudformation devops vpc infrastructure-as-code


【解决方案1】:

除非您在同一个模板中创建子网,否则我认为您无法做到这一点。使用 GetAtt 时,您需要在 CloudFormation 模板中提供资源的名称​​。您只需提供子网 ID 的参数列表 - 这些是字符串,而不是 CloudFormation 管理的资源。

您可以简单地将子网 CIDR 作为参数传入,或者更好的是,将它们作为最初使用 Fn::ImportValue 创建 VPC 和子网的堆栈的输出引用。

对于同样的问题,另请参阅this proposed solution。警告:这不是微不足道的。

【讨论】:

    猜你喜欢
    • 2016-01-28
    • 1970-01-01
    • 2018-12-23
    • 1970-01-01
    • 2018-12-03
    • 2019-08-28
    • 2019-01-13
    • 2022-01-08
    • 2017-05-28
    相关资源
    最近更新 更多