Search code examples
amazon-web-servicesaws-step-functionsaws-batch

Pass parameters to next step function task


{
  "Comment": "A description of my state machine",
  "StartAt": "Batch SubmitJob",
  "States": {
    "Batch SubmitJob": {
      "Type": "Task",
      "Resource": "arn:aws:states:::batch:submitJob.sync",
      "Parameters": {
        "JobDefinition": "arn:aws:batch:us-east-1:XXXXXXXXXXX:job-definition/clientcopyjobdef:1",
        "JobQueue": "arn:aws:batch:us-east-1:XXXXXXXXXX:job-queue/copyclientjq",
        "ContainerOverrides": {
          "Command.$": [
            "dotnet",
            "CopyClientJob.dll",
            "$.input"
          ]
        },
        "JobName.$": "$.input"
      },
      "End": true
    }
  }
}

I was trying to create this state machine, it was working fine if I am passing command to JobDefinition directly, but here I am trying to override the command and want to pass command parameter from state input, so trying to pass like above code. For "JobName.$": "$.input" it is working but for

"Command.$": [
            "dotnet",
            "CopyClientJob.dll",
            "$.input"
          ] 

It is not working, the command is passing as it is to aws batch without transforming the parameter, can someone help on this. Thanks


Solution

  • Got the solution, Actually I need to combine the all 3 using States.Array like below

    {
      "Comment": "A description of my state machine",
      "StartAt": "Batch SubmitJob",
      "States": {
        "Batch SubmitJob": {
          "Type": "Task",
          "Resource": "arn:aws:states:::batch:submitJob.sync",
          "Parameters": {
            "JobDefinition": "arn:aws:batch:us-east-1:XXXXXXXXX:job-definition/clientcopyjobdef:1",
            "JobQueue": "arn:aws:batch:us-east-1:XXXXXXXX:job-queue/copyclientjq",
            "ContainerOverrides": {
              "Command.$": "States.Array('dotnet', 'CopyClientJob.dll', $.input)"
            },
            "JobName": "test"
          },
          "End": true
        }
      }
    }