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;
}