微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在 CloudFormation 中,将子网 ID 存储在 Parameter Store

如何解决在 CloudFormation 中,将子网 ID 存储在 Parameter Store

我有一个 CloudFormation 模板来创建 VPC 并向其添加子网和安全组。我需要在 AWS Parameter Store 中存储新安全组的 ID 和子网的 ID。

这适用于在 中使用 Value: !GetAtt [securityGroup,GroupId] 的安全组,但我不知道如何以适用于 Parameter Store 的方式引用子网的 ID。

以下是 CloudFormation 的相关部分:

Resources:

### subnet resource ###

  subnet1:
    Type: AWS::EC2::subnet
    Properties:
      AvailabilityZone: !Ref subnetAvailabilityZone1
      CidrBlock: 10.2.0.0/16
      VpcId: !Ref requesterVpc

### Parameter Store resource ###

  subnet1Id:
    Type: AWS::SecretsManager::Secret
    Properties:
      Description: Lambda subnet ID
      Name: /lambda-vpc/subnet/1
      Value: !GetAtt [subnet1,id] # <---------- this doesn't work        (Error A below)
      Value: !Ref subnet1          # <---------- this doesn't work either (Error B below)

错误 A

尝试获取子网的“id”属性可以理解地给出错误

资源子网 1 不支持 Fn::GetAtt 中的属性类型 id。

我也尝试过“subnetId”但无济于事。查看 subnet's CF documentation 显示没有可使用 Fn::GetAtt 返回的子网 ID 的属性

错误 B

尝试使用 Fn::Ref 获取子网 ID 也不起作用。即使文档说“Ref 返回子网的 ID”,尝试更新 CF 堆栈在尝试创建/更新“subnet1Id”参数时也会出现此错误

属性验证失败:[在{/}中遇到不受支持属性:[值]]

解决方法

问题在于我用于参数的 AWS 资源类型。

我使用的是 AWS::SecretsManager::Secret,但我需要 AWS::SSM::Parameter。切换到那个并将 Type: String 添加到 Properties 后,!Ref subnet1 起作用了。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。