yaml 中的 Cloud 形成模板将如何检查导出的堆栈是否存在使用嵌套?堆栈

问题描述

基于以下代码尝试实现 YAML 模板,并想检查导出的堆栈是否存在。请指教。

Outputs:
  Publicsubnet:
    Description: The subnet ID to use for public web servers
    Value:
      Ref: Publicsubnet
    Export:
      Name:
        'Fn::Sub': '${AWS::StackName}-subnetID'
  WebServerSecurityGroup:
    Description: The security group ID to use for public web servers
    Value:
      'Fn::GetAtt':
        - WebServerSecurityGroup
        - GroupId
    Export:
      Name:
        'Fn::Sub': '${AWS::StackName}-SecurityGroupID'

Resources:
  WebServerInstance:
    Type: 'AWS::EC2::Instance'
    Properties:
      InstanceType: t2.micro
      ImageId: ami-a1b23456
      NetworkInterfaces:
        - GroupSet:
            - !ImportValue 
              'Fn::Sub': '${NetworkStackNameParameter}-SecurityGroupID'
          AssociatePublicIpAddress: 'true'
          DeviceIndex: '0'
          DeleteOnTermination: 'true'
          subnetId: !ImportValue 
            'Fn::Sub': '${NetworkStackNameParameter}-subnetID'

解决方法

使用普通的 CloudFormation (CFN) 无法做到这一点。导出的值桅杆已经存在,您无法使用 CFN 检查它是否存在。

唯一的方法是以 lambda 函数的形式创建 custom resource。该函数将使用 AWS 开发工具包来检查给定的导出是否存在,并将检查结果返回到您的模板以供进一步处理。