public Map handleRequest()

in amazon-ecs-java-starter-kit-tasklauncher/src/main/java/software/aws/ecs/java/starterkit/launcher/ECSTaskLauncher.java [30:105]


	public Map<String, Object> handleRequest(WorkflowSpecs workflowSpecs, Context context) {

		context.getLogger().log("Input event: " + new Gson().toJson(workflowSpecs));
		String regionString = workflowSpecs.getRegion();
		String clusterName = workflowSpecs.getClusterName();
		String containerName = workflowSpecs.getContainerName();
		String taskDefinition = workflowSpecs.getTaskDefinition();
		String securityGroupId = workflowSpecs.getSecurityGroupId();
		String subnetIdLiteral = workflowSpecs.getSubnetIdLiteral();
		String separator = workflowSpecs.getSeparator();
		String ddbTableNameWFSummary = workflowSpecs.getDdbTableNameWFSummary();
		String hashKeyWFSummary = workflowSpecs.getHashKeyWFSummary();
		String rangeKeyWFSummary = workflowSpecs.getRangeKeyWFSummary();
		String ddbTableNameWFDetails = workflowSpecs.getDdbTableNameWFDetails();
		String hashKeyWFDetails = workflowSpecs.getHashKeyWFDetails();
		String rangeKeyWFDetails = workflowSpecs.getRangeKeyWFDetails();

		printEnvVariables(regionString, clusterName, containerName, taskDefinition, securityGroupId, subnetIdLiteral,
				separator, ddbTableNameWFSummary, hashKeyWFSummary, rangeKeyWFSummary, ddbTableNameWFDetails,
				hashKeyWFDetails, rangeKeyWFDetails);

		Collection<String> subnetIds = tokenizeStrings(subnetIdLiteral, separator);
		Collection<String> securityGroupIds = tokenizeStrings(securityGroupId, separator);

		Region region = Region.regions().stream().filter(r -> r.toString().equalsIgnoreCase(regionString)).findFirst()
				.orElse(Region.US_EAST_1);

		List<Task> tasks = new ArrayList<Task>();
		List<String> ecsTaskArns = new ArrayList<String>();
		DDBUtil ddbUtil = new DDBUtil();
		EcsClient ecs = EcsClient.builder().region(region).build();
		DynamoDbClient dynamoDB = DynamoDbClient.builder().region(region).build();

		long workflowRunId = System.currentTimeMillis();

		// TODO: validate the parsing
		List<TaskConfig> taskList = workflowSpecs.getTaskList();
		for (TaskConfig taskConfig : taskList) {
			// Prepare Container Overrides -for each ECS task
			Collection<KeyValuePair> environment = Arrays.asList(
					KeyValuePair.builder().name("region").value(regionString).build(),
					KeyValuePair.builder().name("workflow_details_ddb_table_name").value(ddbTableNameWFDetails).build(),
					KeyValuePair.builder().name("workflow_details_hash_key").value(hashKeyWFDetails).build(),
					KeyValuePair.builder().name("workflow_details_range_key").value(rangeKeyWFDetails).build(),
					KeyValuePair.builder().name("workflow_name").value(workflowSpecs.getWorkflowName()).build(),
					KeyValuePair.builder().name("workflow_run_id").value(Long.toString(workflowRunId)).build(),
					KeyValuePair.builder().name("task_name").value(taskConfig.getTaskName()).build(),
					KeyValuePair.builder().name("s3_bucket_name").value(taskConfig.getS3BucketName()).build(),
					KeyValuePair.builder().name("object_key").value(taskConfig.getObjectKey()).build());

			ContainerOverride co = ContainerOverride.builder().environment(environment).name(containerName).build();
			Collection<ContainerOverride> containerOverrides = Arrays.asList(co);
			TaskOverride overrides = TaskOverride.builder().containerOverrides(containerOverrides).build();

			// Submit ECS Task
			Task task = submitECSTask(ecs, subnetIds, securityGroupIds, overrides, clusterName, taskDefinition);
			tasks.add(task);
			ecsTaskArns.add(task.taskArn());
		}
		// Insert status to DynamoDB Table
		String startTime = new Date().toString();
		ddbUtil.insertWorkflowSummary(dynamoDB, ddbTableNameWFSummary, hashKeyWFSummary, rangeKeyWFSummary,
				workflowSpecs.getWorkflowName(), new Gson().toJson(workflowSpecs), workflowRunId, tasks.size(),
				"Running", startTime);

		/**
		 * Prepare response to AWS Step Functions State Machine. This will model
		 * Iterator design pattern.
		 * 
		 */
		Map<String, Object> map = new HashMap<String, Object>();
		map.put("workflowName", workflowSpecs.getWorkflowName());
		map.put("workflowRunId", workflowRunId);
		map.put("ecsTaskArns", ecsTaskArns);
		return map;
	}