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

解决AWS Workspaces describe_workspaces 25条返回限制的脚本修改问题

问题根因

AWS Workspaces的describe_workspacesAPI默认启用分页机制,单请求最多返回25个实例信息,你当前未处理分页令牌,所以只能拿到第一页的实例数据。

需要补充的修改点
  • 新增分页遍历逻辑:每次调用describe_workspaces后判断返回结果中是否存在NextToken,如果存在就将该令牌作为参数传入下一次API调用,直到返回结果中无NextToken为止。
  • (可选优化)将STOPPED状态的实例ID批量收集后统一调用启动接口,减少API请求次数,避免触发AWS API节流限制。
修改后完整代码
import boto3

workspaces = boto3.client('workspaces')

def lambda_handler(event, context):
    all_workspaces = []
    next_token = None
    
    # 分页获取所有Workspace实例
    while True:
        if next_token:
            resp = workspaces.describe_workspaces(NextToken=next_token)
        else:
            resp = workspaces.describe_workspaces()
        all_workspaces.extend(resp['Workspaces'])
        next_token = resp.get('NextToken')
        if not next_token:
            break
    
    # 批量收集需要启动的实例ID
    start_requests = []
    for ws_info in all_workspaces:
        ws_id = ws_info['WorkspaceId']
        ws_state = ws_info['State']
        if ws_state == 'STOPPED':
            start_requests.append({'WorkspaceId': ws_id})
            # 启动接口单批次最多支持25个实例,满25就先执行一次启动
            if len(start_requests) == 25:
                start_workspaces_batch(start_requests)
                start_requests = []
    
    # 启动剩余不足25个的实例
    if start_requests:
        start_workspaces_batch(start_requests)

def start_workspaces_batch(start_requests):
    workspaces.start_workspaces(
        StartWorkspaceRequests=start_requests
    )
注意事项
  • 请确保Lambda执行角色拥有workspaces:DescribeWorkspaces和workspaces:StartWorkspaces的权限
  • 如果你的实例数量超过100,建议根据实际情况调整Lambda的超时时间,避免执行被强制中断

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 18:27:03