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

传递EC2实例ID数组至Python脚本时遇类型错误请求解决

解决EC2实例打标签脚本的参数错误问题

错误原因

问题出在instance_id = list(sys.argv[1])这行代码:当你把字符串传入list()函数时,它会将字符串拆分成单个字符的列表。比如你传入i-092bbabaf1e82f5a1,会被转换成['i', '-', '0', '9', ...]这种单个字符的列表,而boto3的InstanceIds参数要求每个元素是完整的字符串格式实例ID,不是字符列表,因此触发类型错误。

修复方案

  1. 正确解析实例ID参数:如果运行脚本时用逗号分隔多个实例ID(比如i-xxxx,i-yyyy),使用split(',')方法将字符串分割成字符串列表,而不是list()。
  2. 调整变量与参数传递:将变量名改为instance_ids更符合语义,直接将这个列表传给boto3的InstanceIds参数。
  3. 修复打印逻辑:在循环内打印每个实例的标签添加结果,避免循环结束后只输出最后一个实例的信息。

修正后的完整代码

#!/usr/bin/env python3

import boto3
import sys

# 用逗号分割传入的实例ID字符串,得到字符串列表
instance_ids = sys.argv[1].split(',')
tagname = sys.argv[2]
tagvalue = sys.argv[3]

EC2_RESOURCE = boto3.resource('ec2', region_name='us-west-1')

def tag_instances(instance_ids, tagname, tagvalue):
    TAGS = [
        {
            'Key': tagname,
            'Value': tagvalue
        }
    ]

    # 直接传入实例ID列表,支持单个或多个实例
    instances = EC2_RESOURCE.instances.filter(
        InstanceIds=instance_ids
    )

    for instance in instances:
        instance.create_tags(Tags=TAGS)
        print(f'Tags successfully added to the instance {instance.id}')

tag_instances(instance_ids, tagname, tagvalue)

运行示例

假设你的脚本名为tag_ec2.py,运行命令如下:

python tag_ec2.py i-092bbabaf1e82f5a1,i-1234567890abcdef0 Environment Production

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 09:11:53