【问题标题】:In CloudFormation, store a Subnet ID in Parameter Store在 CloudFormation 中,将子网 ID 存储在 Parameter Store 中
【发布时间】:2021-04-07 04:32:37
【问题描述】:

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

这适用于在 中使用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”参数时也会出现此错误:

属性验证失败:[Encountered unsupported properties in {/}: [Value]]

【问题讨论】:

    标签: amazon-web-services amazon-cloudformation amazon-vpc aws-parameter-store


    【解决方案1】:

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

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

    【讨论】:

    • 除此之外,我建议您探索 CDK,这可能有助于您在未来简化其中的一些操作。它是 IaC,可以使用多种不同的语言运行,包括 .Net Core、Python、Typescript 和 Java。
    猜你喜欢
    • 1970-01-01
    • 2020-11-23
    • 1970-01-01
    • 2018-08-26
    • 2021-10-04
    • 2020-07-30
    • 1970-01-01
    • 2021-11-26
    • 2023-03-20
    相关资源
    最近更新 更多