6
votes

I have created a step function in aws. Name of my state machine is 'TestStep'. which is used to iterate a number from 1 to 1000.

I have created an IAM Role which has "AWSStepFunctionsFullAccess" policy.

I created one java lambda to access this step function. My code is given below.

 final StateMachine stateMachine = stateMachine().comment("Iterator State Machine Example").startAt("ConfigureCount")
             .state("ConfigureCount", taskState()
               .resource("arn:aws:lambda:us-east-1:ACCOUNTID:function:TestStep")
               .transition(end()))
       .build();
final AWSStepFunctions client = AWSStepFunctionsClientBuilder.defaultClient();
        client.createStateMachine(new CreateStateMachineRequest()
                                                  .withName("TestStep")
                                                  .withRoleArn("arn:aws:iam::ACCOUNTID:role/ROLENAME")
                                                  .withDefinition(stateMachine));

But I am getting an error like below. Please help me to get this correctly. When i am calling it from java the step function should be triggered and work...

enter image description here

2

2 Answers

7
votes

Happy to inform you that I found the solution. The above code I mentioned is for creating a new state machine and trying to run the newly created state machine from java lambda. For my scenario that is just call a step function which is already created in aws step function please follow the below steps.

First, add dependency in pom.xml

<dependency>
   <groupId>com.amazonaws</groupId>
   <artifactId>aws-java-sdk-stepfunctions</artifactId>
   <version>1.11.285</version>

then use the below code to call a step function from your java

  awsStepfunctionClient.startExecution(StartExecutionRequest);
2
votes

For the AWS Java SDK v2, the dependency for the pom is:

<dependency>
    <groupId>software.amazon.awssdk</groupId>
    <artifactId>sfn</artifactId>
    <version>2.16.59</version>
<dependency>

Then use the standard builder pattern for the client (and StartExecutionRequest object) to trigger your execution:

SfnClient sfc = SfnClient.builder()
        .region()
        .build();

sfc.startExecution(startExecutionRequest);