async function createTask()

in source/constructs/lambda/api/api-task.ts [138:177]


async function createTask(input: CreateTaskInput) {
  const sfn = new AWS.StepFunctions({
    region: process.env.AWS_REGION
  });
  const ddb = new AWS.DynamoDB.DocumentClient({
    region: process.env.AWS_REGION
  });
  assert('type' in input, 'No input.type field')
  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 pluginTemplateUrl = process.env[`PLUGIN_TEMPLATE_${input.type.toUpperCase()}`]
  assert(pluginTemplateUrl !== undefined, `No environment variable PLUGIN_TEMPLATE_${input.type.toUpperCase()}`)
  const isDryRun = process.env.DRY_RUN == 'True'

  const task = {
    ...input, // task object
    id: uuidv4(), // id filed in DynamoDB
    templateUrl: pluginTemplateUrl,
    createdAt: new Date().toISOString()
  }

  // Start to execute Steps Functions for CloudFormation template provisioning
  const sfnRes = !isDryRun ? await sfn.startExecution({
    stateMachineArn: process.env.STATE_MACHINE_ARN,
    input: JSON.stringify({ ...task, action: 'START' }) // Add action START
  }).promise() : {
    executionArn: `try-run-execution-arn-${makeid(5)}`
  }
  pprint('StepFunctions Res', sfnRes)

  const item: Task = { ...task, executionArn: sfnRes.executionArn }
  pprint('Item to insert', item)

  await ddb.put({
    TableName: process.env.TASK_TABLE,
    Item: item
  }).promise()

  return item
}