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

使用Lambda中Python Boto3创建EC2实例时遇VPCIdNotSpecified错误求助

解决Boto3创建EC2实例时的VPCIdNotSpecified错误

问题原因

当你的AWS账户没有默认VPC(或默认VPC已被删除)时,调用create_instances如果不指定VPC相关参数,AWS会尝试使用默认VPC的资源,但找不到就会抛出VPCIdNotSpecified错误。虽然Boto3文档没有强制要求必须指定VPC,但这是AWS底层的环境限制——在没有默认VPC的情况下,必须明确指定实例要部署的VPC子网或VPC ID。

解决方案

你需要在create_instances调用中添加VPC相关参数,以下是两种常用实现方式:

方式1:指定子网ID

直接指定目标VPC下的子网ID,AWS会自动使用该子网所属VPC,并为实例分配该子网的默认安全组(未指定安全组时):

import json
import boto3

def lambda_handler(event, context):
    aws_mgmt_console = boto3.session.Session()
    ec2_console_resource = aws_mgmt_console.resource('ec2')
    
    # 替换为你的实际子网ID
    subnet_id = "subnet-xxxxxxxxx"
    
    ec2_console_resource.create_instances(
        ImageId="ami-018d291ca9ffc002f",
        MinCount=1,
        MaxCount=1,
        InstanceType="t2.micro",
        SubnetId=subnet_id
    )

方式2:指定VPC ID和安全组ID

如果需要使用自定义安全组,可以同时指定VPC ID和安全组ID(注意安全组必须属于指定的VPC):

import json
import boto3

def lambda_handler(event, context):
    aws_mgmt_console = boto3.session.Session()
    ec2_console_resource = aws_mgmt_console.resource('ec2')
    
    # 替换为你的实际VPC ID和安全组ID
    vpc_id = "vpc-xxxxxxxxx"
    security_group_ids = ["sg-xxxxxxxxx"]
    
    ec2_console_resource.create_instances(
        ImageId="ami-018d291ca9ffc002f",
        MinCount=1,
        MaxCount=1,
        InstanceType="t2.micro",
        SecurityGroupIds=security_group_ids,
        VpcId=vpc_id
    )

额外注意事项

  • 确保执行Lambda的IAM角色拥有ec2:RunInstances权限,以及相关VPC、子网、安全组的访问权限。
  • 若想恢复默认VPC,可通过AWS控制台或CLI重建,但更推荐明确指定VPC参数以保证部署的可控性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 21:57:32