public void sendCommand()

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