You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

CloudFormation创建EC2实例报未解析子网资源依赖错误

报错根因

Unresolved resource dependencies报错的触发逻辑是CloudFormation解析模板时,在Ref/!Ref函数的引用目标里,找不到当前模板内定义的对应逻辑资源或参数。
你模板里的错误写法:

SubnetId: 
  Ref: "subnet-057ba3df40f87da4e"

Ref函数仅支持引用当前模板内Resources块定义的逻辑资源、Parameters块定义的参数,你传入的是AWS侧已经存在的实体子网ID,不是模板内定义的逻辑ID,CloudFormation会尝试在模板里找叫subnet-057ba3df40f87da4e的逻辑资源,找不到就抛出该错误。你之前写VpcId: "vpc-09495a820716bff3b"是直接传字符串值,没有套Ref,所以不会触发这个报错。
另外你的模板还有一处隐性配置冲突:你已经在NetworkInterfaces块里通过GroupSet绑定了安全组,外层的SecurityGroupIds字段必须删除——自定义网络接口时,安全组配置只能声明在网络接口属性内,同时写两处会触发新的部署校验错误。

修复方法

二选一即可:

  • 快速修复(硬编码现有资源ID):直接给SubnetId传字符串值,去掉Ref包裹,同时删除冗余的SecurityGroupIds配置,修改后的EC2资源段如下:
EC2Instance:
  Type: AWS::EC2::Instance
  Properties:
    ImageId: "ami-0022f774911c1d690"
    InstanceType: t3.micro
    NetworkInterfaces: 
      - AssociatePublicIpAddress: "true"
        DeviceIndex: "0"
        GroupSet: 
          - Ref: "accessSecurityGroup"
        SubnetId: "subnet-057ba3df40f87da4e"
    UserData:
      Fn::Base64: 
        !Sub |
          #!/bin/bash
          sudo yum update -y
          sudo yum install -y httpd
          sudo systemctl start httpd
          sudo systemctl enable httpd
  • 规范写法(参数化可变配置,推荐):在模板顶部新增Parameters块,把VPC、子网、AMI这类随环境变化的资源ID定义为参数,通过Ref引用参数值,既符合CloudFormation最佳实践,也不会出现引用错误。完整修正模板如下:
Parameters:
  DeployVpcId:
    Type: AWS::EC2::VPC::Id
    Description: 部署资源所属的VPC ID
  DeploySubnetId:
    Type: AWS::EC2::Subnet::Id
    Description: 启动EC2实例所属的子网ID
  EC2AmiId:
    Type: AWS::EC2::Image::Id
    Description: EC2实例使用的AMI ID
    Default: "ami-0022f774911c1d690"

Resources:
  accessSecurityGroup:
    Type: AWS::EC2::SecurityGroup
    Properties: 
      GroupDescription: "new EC2 security group for HTTP and SHH ports"
      SecurityGroupIngress: 
        - IpProtocol: tcp
          FromPort: 80
          ToPort: 80
          CidrIp: 0.0.0.0/0
      SecurityGroupEgress:
        - IpProtocol: -1
          FromPort: -1
          ToPort: -1
          CidrIp: 0.0.0.0/0
      VpcId: !Ref DeployVpcId
  
  EC2Instance:
    Type: AWS::EC2::Instance
    Properties:
      ImageId: !Ref EC2AmiId
      InstanceType: t3.micro
      NetworkInterfaces: 
        - AssociatePublicIpAddress: "true"
          DeviceIndex: "0"
          GroupSet: 
            - !Ref accessSecurityGroup
          SubnetId: !Ref DeploySubnetId
      UserData:
        Fn::Base64: 
          !Sub |
            #!/bin/bash
            sudo yum update -y
            sudo yum install -y httpd
            sudo systemctl start httpd
            sudo systemctl enable httpd

使用参数化模板执行部署时,可以在CLI命令中追加--parameters参数传入VPC、子网的实际ID,也可以直接把参数默认值改成你当前环境的资源ID。

内容的提问来源于stack exchange,提问作者Mohammed Salah

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 17:21:09