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

AWS Lambda配置测试事件启动EC2实例报EndpointConnectionError如何解决

问题根因

  • 代码中所有EC2配置参数(REGION、AMI、INSTANCE_TYPE等)都被硬编码为占位符字符串,没有替换为实际有效值,也没有读取测试事件传入的参数
  • 你给region_name传了值为REGION的字符串,导致boto3尝试拼接不存在的域名ec2.REGION.amazonaws.com,自然连接失败
  • 如果你打算通过测试事件JSON传入参数,现有代码完全没有读取event对象里的配置值,且EC2客户端初始化放在了函数外部,冷启动阶段还没拿到传入的区域参数就会初始化失败

修正后代码

import boto3
import json

def lambda_handler(event, context):
    # 从测试事件传入的参数读取配置
    AMI = event.get('AMI')
    INSTANCE_TYPE = event.get('INSTANCE_TYPE')
    KEY_NAME = event.get('KEY_NAME')
    REGION = event.get('REGION')
    SUBNET_ID = event.get('SUBNET_ID')
    SECURITYGROUP_ID = event.get('SECURITYGROUP_ID')
    
    # 初始化EC2客户端要放在函数内,才能拿到传入的REGION参数
    ec2 = boto3.client('ec2', region_name=REGION)
    
    instance = ec2.run_instances(
        ImageId=AMI,
        InstanceType=INSTANCE_TYPE,
        KeyName=KEY_NAME,
        SubnetId=SUBNET_ID,
        SecurityGroupIds=[SECURITYGROUP_ID],
        MaxCount=1,
        MinCount=1
    )
    
    print("New instance created:")
    instance_id = instance['Instances'][0]['InstanceId']
    print(instance_id)
    
    return instance_id

测试事件JSON格式参考

你需要在测试事件里填入对应实际值,示例结构如下:

{
  "AMI": "ami-xxxxxx(你实际要用的镜像ID)",
  "INSTANCE_TYPE": "t2.micro(实例规格)",
  "KEY_NAME": "你的EC2密钥对名称",
  "REGION": "cn-north-1(实际区域编码,例如北京区是cn-north-1,宁夏区是cn-northwest-1)",
  "SUBNET_ID": "subnet-xxxxxx(子网ID)",
  "SECURITYGROUP_ID": "sg-xxxxxx(安全组ID)"
}

额外注意事项

  • 需要给Lambda执行角色附加ec2:RunInstances权限,否则会报权限不足错误
  • 如果Lambda部署在VPC内,需要确保有到EC2服务端点的网络连通性,可以配置VPC端点或者给子网配置公网网关
  • 所有参数值必须和你填的REGION属于同一个AWS区域,比如AMI ID是区域级资源,跨区域无法使用

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 14:24:03