async function stopTask()

in source/constructs/lambda/api/api-task.ts [86:132]


async function stopTask(taskId: string) {
  assert(process.env.STATE_MACHINE_ARN !== undefined, 'no environment variable STATE_MACHINE_ARN found')
  assert(process.env.TASK_TABLE !== undefined, 'no environment variable TASK_TABLE')
  const isDryRun = process.env.DRY_RUN == 'True'
  const sfn = new AWS.StepFunctions({
    region: process.env.AWS_REGION
  });
  const ddb = new AWS.DynamoDB.DocumentClient({
    region: process.env.AWS_REGION
  });

  const taskList = await ddb.query({
    TableName: process.env.TASK_TABLE,
    KeyConditionExpression: 'id = :id',
    ExpressionAttributeValues: {
      ':id': taskId
    }
  }).promise()

  assert(taskList.Items && taskList.Items[0], `Cannot find the task with id ${taskId}`)
  const task = taskList.Items[0]

  const sfnRes = !isDryRun ? await sfn.startExecution({
    stateMachineArn: process.env.STATE_MACHINE_ARN,
    input: JSON.stringify({ ...task, action: 'STOP' })  // Add action STOP
  }).promise() : {
    executionArn: `dry-run-execution-arn-${makeid(10)}`
  }
  pprint('StepFunctions Res', sfnRes)

  const updateTaskRes = await ddb.update({
    TableName: process.env.TASK_TABLE,
    Key: {
      id: taskId
    },
    UpdateExpression: 'set executionArn = :executionArn, progress = :progress',
    ExpressionAttributeValues: {
      ':executionArn': sfnRes.executionArn,
      ':progress': 'STOPPING'
    },
    ReturnValues: "ALL_NEW"
  }).promise()

  pprint('updatedTaskRes', updateTaskRes)

  return updateTaskRes.Attributes as Task
}