{
  "StartAt": "SF_Start",
  "States": {
    "SF_Start": {
      "Type": "Pass",
      "Parameters": {
        "note": "Delphi AWS Step Function PoC example",
        "start_time.$": "$$.Execution.StartTime"
       },
      "ResultPath": "$.info",
      "Next": "SF_Pause"
    },
    "SF_Pause": {
      "Type": "Wait",
      "Seconds": 2,
      "Next": "SF_Config"
    },
    "SF_Config": {
      "Type": "Task",
      "Resource": "arn:aws:lambda:us-east-1:475275892927:function:sf-lambda-read-config",
      "Parameters": {
        "bucket.$": "$.bucket",
        "file.$": "$.file"
      },
      "ResultPath": "$.config",
      "Next": "SF_Validate_Config"
    },
    "SF_Validate_Config": {
      "Type": "Choice",
      "Choices": [
        {
          "Variable": "$.config.status",
          "StringEquals": "SUCCESS",
          "Next": "SF_InProgress"
        }        
      ],
      "Default": "SF_BadConfig"
    },
    "SF_BadConfig": {
      "Type": "Fail",
      "Cause": "Error processing config parameters"
    },
    "SF_InProgress": {
      "Type": "Task",
      "Resource": "arn:aws:states:::dynamodb:putItem",
      "Parameters": {
        "TableName": "sf_poc_job",
        "Item": { 
                  "job_id": { "S.$" : "$.config.job_id" }, 
                  "job_status": "IN PROGRESS",
                  "job_start.$": "$.info.start_time"
                }
      },
      "ResultPath": null,
      "Next": "SF_Download"
    },
    "SF_Download": {
      "Type": "Task",
      "Resource": "arn:aws:states:::ecs:runTask.waitForTaskToken",
      "Parameters": {
        "LaunchType.$": "$.config.launch_type",
        "NetworkConfiguration": {
          "AwsvpcConfiguration": {
              "Subnets.$": "$.config.subnets",
              "AssignPublicIp": "ENABLED"
          }
      },
        "Cluster.$": "$.config.cluster",
        "TaskDefinition.$": "$.config.task_definition",
        "Overrides": {
            "ContainerOverrides": [
                {  
                    "Name": "sfpoc",
                    "Command.$": "$.config.command",
                     "Environment":[  
                         {  
                            "Name": "SFN_TASK_TOKEN",
                            "Value.$": "$$.Task.Token"
                         }
                      ]
                 }
             ]
        }
      },
      "ResultPath": "$.task",
      "Next": "SF_Validate_Download"      
    },
    "SF_Validate_Download": {
      "Type": "Choice",
      "Choices": [
        {
          "Variable": "$.task.status",
          "StringEquals": "success",
          "Next": "SF_Task_Complete"
        }        
      ],
      "Default": "SF_BadDownload"
    },
    "SF_BadDownload": {
      "Type": "Fail",
      "Cause": "Error performing download task"
    },
    "SF_Task_Complete": {
      "Type": "Task",
      "Resource": "arn:aws:states:::dynamodb:putItem",
      "Parameters": {
        "TableName": "sf_poc_job",
        "Item": { 
                  "job_id": { "S.$" : "$.config.job_id" }, 
                  "job_status": "SUCCESS",
                  "job_start.$": "$.info.start_time"
                }
      },
      "ResultPath": null,
      "Next": "SF_Success"
    },
    "SF_Success": {
      "Type": "Succeed"
    }
  }
}