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

Python Boto3调用ECR start_image_scan报错:仅接受关键字参数

解决AWS Lambda调用ECR start_image_scan时的TypeError问题

问题场景

创建AWS Lambda Python脚本自动扫描ECR镜像,遍历仓库内的镜像后调用boto3的start_image_scan接口启动扫描。传入生成的参数时触发错误:

[ERROR] TypeError: start_image_scan() only accepts keyword arguments.

硬编码参数时接口可正常运行,尝试多种字符串转换方式后仍报错。

错误原因

你错误地将参数拼接成了字符串格式传递给start_image_scan,但boto3的ECR客户端方法仅接受关键字参数(keyword arguments),无法解析字符串形式的参数结构。

解决方法

不需要拼接字符串参数,直接传递明确的关键字参数,或者用字典构造参数后通过**解包传递。

修改后的核心代码

替换lambda_handler中生成scanid和调用start_image_scan的部分:

def lambda_handler(event, context):
    client = boto3.client('ecr')
    output = get_reponames()
    for rn in output:
        outputii = get_imageids(rn)
        for ii in outputii:
            # 先判断imageTag不为None再做小写比较,避免AttributeError
            if ii.get('imageTag') and ii['imageTag'].lower() == "latest":
                print("scan this image")
                # 方式1:直接传递关键字参数
                client.start_image_scan(
                    repositoryName=rn,
                    imageId={
                        "imageDigest": ii['imageDigest'],
                        "imageTag": ii['imageTag']
                    }
                )
                # 方式2:构造字典后解包(二选一即可)
                # scan_params = {
                #     'repositoryName': rn,
                #     'imageId': {
                #         'imageDigest': ii['imageDigest'],
                #         'imageTag': ii['imageTag']
                #     }
                # }
                # client.start_image_scan(**scan_params)
            else:
                print("DONT SCAN")

    return {
        'body': json.dumps("hello world")
    }

补充说明

  1. 新增ii.get('imageTag')判断,避免当镜像无标签(imageTag为None)时调用lower()触发AttributeError
  2. 两种传参方式本质都是传递关键字参数,符合boto3方法的参数要求,可根据习惯选择

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 20:45:58