【问题标题】:start_workspaces() only accepts keyword argumentsstart_workspaces() 只接受关键字参数
【发布时间】:2021-09-24 03:41:47
【问题描述】:

我正在尝试在 Lambda 函数中编写 Python 代码,该代码将在警报触发时启动停止的工作区。响应类型为dict。

但我得到了错误。以下是我的代码和错误。

import json
import boto3

client = boto3.client('workspaces')
    
def lambda_handler(event, context):
    response = client.describe_workspaces(
        DirectoryId='d-966714f114'
    )
        
    #print(response)
    
    print("hello")

    for i in response['Workspaces']:
        if(i['State']== 'STOPPED'):
            print(i['WorkspaceId'])
            client.start_workspaces(i['WorkspaceId'])
{
    "errorMessage": "start_workspaces() only accepts keyword arguments.",
    "errorType": "TypeError",
    "stackTrace": [
    "  File \"/var/task/lambda_function.py\", line 21, in lambda_handler\n    client.start_workspaces(i)\n",
    "  File \"/var/runtime/botocore/client.py\", line 354, in _api_call\n    raise TypeError(\n"
    ]
}

【问题讨论】:

    标签: python-3.x aws-lambda boto3 amazon-workspaces


    【解决方案1】:

    如果您查看调用的documentation,它会说它需要关键字StartWorkspaceRequests,它本身就是一个字典列表:

    {
        'WorkspaceId': 'string'
    },
    

    调用不接受参数(只是传递的值没有相应的关键字)。您需要调整您的调用以符合 boto3 预期的格式。

    import json
    import boto3
    
    client = boto3.client('workspaces')
        
    def lambda_handler(event, context):
        response = client.describe_workspaces(
            DirectoryId='d-966714f114'
        )
            
        workspaces_to_start = []
             
        for i in response['Workspaces']:
            if(i['State']== 'STOPPED'):
                workspaces_to_start.append({'WorkspaceId': i['WorkspaceId']})
    
        if workspaces_to_start:
            client.start_workspaces(StartWorkspaceRequests=workspaces_to_start)
    

    【讨论】:

    • 是的,我明白你的意思。但是有没有其他方法可以启动停止的工作区,因为这个 lambda 是自动化的一部分,传递值不是一个可行的选项。谢谢
    • 我不太明白。您的问题专门针对此错误。这个后续问题在问题的上下文中没有任何意义,需要有关您的设置的更多信息才能可用
    • 抱歉,如果我不清楚我的后续评论。我的意思是说,我试图用我的代码启动处于停止状态的工作区。但是语法有一个错误,我不知道如何继续,因为我正在编写的代码不起作用。所以我正在寻找一种方法,其中for循环将值存储在dict中,然后调用start_workspaces函数。
    • 我添加了一个代码 sn-p 来实现我的建议,希望能澄清事情
    • 这太棒了 Oleksii。有效。非常感谢!!
    猜你喜欢
    • 2018-11-22
    • 2021-10-10
    • 1970-01-01
    • 2015-08-18
    • 1970-01-01
    • 1970-01-01
    • 2020-02-20
    • 2016-09-01
    • 2012-07-27
    相关资源
    最近更新 更多