解决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
相关产品推荐
相关产品推荐

