0

我有一个 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”无济于事。查看子网的 CF 文档显示没有可返回的子网 ID 的属性Fn::GetAtt

错误 B

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

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

4

1 回答 1

1

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

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

于 2020-12-30T17:13:03.330 回答