in TerraformCustomResourceHandler/src/main/java/com/amazon/servicecatalog/terraform/customresource/fulfillment/CommandSender.java [60:100]
public void sendCommand() {
// verify command status to avoid concurrent updates
verifyPreviousCommandCompletion();
Tag instanceTag = envConfig.getInstanceTag();
String instanceId = ec2Facade.getInstanceId(instanceTag);
String outputBucket = envConfig.getCommandOutputS3Bucket();
String outputS3KeyPrefix = createOutputS3KeyPrefix();
String wrapperScriptOutputS3Key = outputS3KeyPrefix + "/tf_wrapper_script_output";
String wrapperScriptErrorS3Key = outputS3KeyPrefix + "/tf_wrapper_script_errors";
String terraformCommand = String.format(
TERRAFORM_COMMAND,
CustomResourceMarshaller.write(request),
outputBucket,
wrapperScriptOutputS3Key,
wrapperScriptErrorS3Key,
externalId);
List<String> commands = ImmutableList.of(
"#!/bin/bash",
"set -o pipefail",
"tmp_out=/tmp/" + UUID.randomUUID(),
"tmp_err=/tmp/" + UUID.randomUUID(),
terraformCommand + " > >(tee $tmp_out) 2> >(tee $tmp_err >&2)",
"status=$?",
String.format("aws s3 mv $tmp_out s3://%s/%s", outputBucket, wrapperScriptOutputS3Key),
String.format("aws s3 mv $tmp_err s3://%s/%s", outputBucket, wrapperScriptErrorS3Key),
"exit $status"
);
// Fire-and-forget send command.
String ssmOutputS3KeyPrefix = outputS3KeyPrefix + "/ssm_output";
String commandId = ssmFacade.sendCommand(commands, instanceId, outputBucket, ssmOutputS3KeyPrefix)
.getCommand()
.getCommandId();
log.info("Sent commandId: " + commandId);
commandRecordPersistence.putCommandRecord(request.getPhysicalResourceId(), commandId, instanceId);
bestEffortCheckWhetherCommandIsNotFound(commandId, instanceId);
}