I have the below script that works on booting workspaces, but it gets the first 25 Workspaces, despite being AVAILABLE or STOPPED state.
I am running more than 25 Workspaces in my environment and I am trying to figure out what is there I need to add on it, in order to check all workspaces in my environment (50<) and initiate START to the ones that are in a STOPPED state.
I look forward hearing your feedback.
Thanks
import boto3
workspaces = boto3.client('workspaces')
def lambda_handler(event, context):
workspaces_client_list = workspaces.describe_workspaces()
for workspaces_info in workspaces_client_list['Workspaces']:
workspace_id = workspaces_info['WorkspaceId']
workspace_state = workspaces_info['State']
if workspace_state == 'STOPPED':
start_workspaces(workspace_id)
def start_workspaces(workspace_id):
workspaces.start_workspaces(
StartWorkspaceRequests = [
{
'WorkspaceId': workspace_id
},
]
)
The documentation states that you can provide a Limit
in the request parameters
Limit
The maximum number of items to return.
Type: Integer
Valid Range: Minimum value of 1. Maximum value of 25.
Required: No
You only get 25 items because it's the maximum number of items you can get. To get all items you have to check in any response whether there NextToken
. If there is a next token you have to use it for the next request, you iterate this until there is no next token left.
def lambda_handler(event, context):
workspaces_client_list = get_all_workspaces()
for workspaces_info in workspaces_client_list:
workspace_id = workspaces_info['WorkspaceId']
workspace_state = workspaces_info['State']
if workspace_state == 'STOPPED':
start_workspaces(workspace_id)
def get_all_workspaces():
response = workspaces.describe_workspaces()
workspaces_client_list = response['Workspaces']
while "NextToken" in response:
response = workspaces.describe_workspaces(NextToken=response['NextToken'])
workspaces_client_list.extend(response['Workspaces'])
return workspaces_client_list