AWS Lambda调用boto3的start_workspaces()报仅接受关键字参数错误如何解决
错误原因
boto3的WorkSpaces客户端start_workspaces方法不支持直接传入WorkspaceId字符串作为位置参数,仅接受关键字参数,且要求参数格式为:
- 关键字参数名为
StartWorkspaceRequests - 参数值是列表类型,列表中的每个元素是包含
WorkspaceId键的字典,对应要启动的实例ID
修复代码
你可以直接修改循环内的调用代码:
import json import boto3 client = boto3.client('workspaces') def lambda_handler(event, context): response = client.describe_workspaces( DirectoryId='d-966714f114' ) for i in response['Workspaces']: if i['State'] == 'STOPPED': print(i['WorkspaceId']) # 修正传参格式 client.start_workspaces( StartWorkspaceRequests=[ {"WorkspaceId": i['WorkspaceId']} ] )
优化方案(可选)
你也可以先收集所有处于STOPPED状态的实例ID,再批量调用接口减少API请求次数(单接口最多支持同时启动25个实例):
import json import boto3 client = boto3.client('workspaces') def lambda_handler(event, context): response = client.describe_workspaces( DirectoryId='d-966714f114' ) stopped_workspaces = [] for i in response['Workspaces']: if i['State'] == 'STOPPED': print(i['WorkspaceId']) stopped_workspaces.append({"WorkspaceId": i['WorkspaceId']}) # 批量启动 if stopped_workspaces: client.start_workspaces(StartWorkspaceRequests=stopped_workspaces)
注意事项
你需要为Lambda的执行角色添加以下IAM权限,否则会出现授权报错:
workspaces:DescribeWorkspacesworkspaces:StartWorkspaces
内容的提问来源于stack exchange,提问作者ASingh
相关产品推荐
相关产品推荐

