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

AWS Lambda运行Python调用EC2 describe_images出现参数校验错误如何解决?

错误原因

AWS Lambda的入口函数lambda_handler有固定的入参规则:

  • 第一个入参是触发事件对象,类型为字典,对应你报错信息里的value: {}, type: <class 'dict'>
  • 第二个入参是Lambda运行上下文对象,类型为LambdaContext,对应你报错信息里的value: <__main__.LambdaContext object>

你自定义了lambda_handler的入参名和默认值,但Lambda调用函数时会强制传入上述两个参数,直接覆盖了你设置的默认值,导致传入describe_images接口的Values参数不是要求的字符串类型,触发参数校验失败。

修复方案

按照Lambda的入参规则修改函数逻辑即可,如果你需要固定查询名称前缀为test*、指定owner的镜像,直接把参数写死在函数内即可,修复后的代码如下:

from operator import itemgetter
import boto3

client = boto3.client('ec2')

def lambda_handler(event, context):
    # 固定查询参数,也可以按需从event中动态获取参数
    name = 'test*'
    owner = '**********'
    list_of_images = client.describe_images(Filters=[
        {'Name': 'name', 'Values': [name]}, 
        {'Name': 'owner-id', 'Values': [owner]}
    ])
    image_details = sorted(list_of_images['Images'], key=itemgetter('CreationDate'), reverse=True)
    # 增加空判断,避免无匹配镜像时索引报错
    if image_details:
        return image_details[0]
    return {"message": "No matching images found"}

如果需要动态传入name和owner参数,可以在触发Lambda时把参数放到event里,对应修改参数获取逻辑即可:

def lambda_handler(event, context):
    # 从event中取参数,保留默认值兜底
    name = event.get('name', 'test*')
    owner = event.get('owner', '**********')
    # 后续逻辑和上面一致

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.15 15:36:05