微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

是否可以通过 CDK 为 AWS Step Functions 设置“开始执行”默认 JSON 输入?

如何解决是否可以通过 CDK 为 AWS Step Functions 设置“开始执行”默认 JSON 输入?

我正在自动生成 Step Function 的过程,供我们的 Cloud Ops 团队调用。是否可以通过 SDK 设置执行认输入参数?目前它认如下,但我需要能够将其设置为我的堆栈部署的一部分。 谢谢

输入 - 可选 以 JSON 格式输入此执行的输入值

{
    "Comment": "Insert your JSON here"
}

解决方法

AWS Step Function 公开了一个 API,可让您以编程方式执行调用工作流、列出工作流等操作。当您使用 API 调用工作流时,您可以指定要使用的 JSON。例如,以下是调用现有工作流的 Java API 示例。

import org.json.simple.JSONObject;
import org.json.simple.parser.JSONParser;
import software.amazon.awssdk.regions.Region;
import software.amazon.awssdk.services.sfn.SfnClient;
import software.amazon.awssdk.services.sfn.model.*;
import java.io.FileReader;
import java.io.IOException;
import java.util.UUID;
// snippet-end:[stepfunctions.java2.start_execute.import]

public class StartExecution {

       public static void main(String[] args) {
            final String USAGE = "\n" +
                    "Usage:\n" +
                    "    StartExecution <stateMachineArn> <jsonFile>\n\n" +
                    "Where:\n" +
                    "    stateMachineArn - the ARN of the state machine.\n\n" +
                    "    jsonFile - A JSON file that contains the values to pass to the worflow.\n" ;

            if (args.length != 2) {
                System.out.println(USAGE);
                System.exit(1);
            }

            String stateMachineArn = args[0];
            String jsonFile = args[1];
            Region region = Region.US_EAST_1;
            SfnClient sfnClient = SfnClient.builder()
                    .region(region)
                    .build();

           String exeArn = startWorkflow(sfnClient,stateMachineArn,jsonFile);
           System.out.println("The execution ARN is" +exeArn);
           sfnClient.close();
        }

        // snippet-start:[stepfunctions.java2.start_execute.main]
        public static String startWorkflow(SfnClient sfnClient,String stateMachineArn,String jsonFile) {

            String json = getJSONString(jsonFile);

            // Specify the name of the execution by using a GUID value.
            UUID uuid = UUID.randomUUID();
            String uuidValue = uuid.toString();
            try {

                StartExecutionRequest executionRequest = StartExecutionRequest.builder()
                        .input(json)
                        .stateMachineArn(stateMachineArn)
                        .name(uuidValue)
                        .build();

                StartExecutionResponse response = sfnClient.startExecution(executionRequest);
                return response.executionArn();


            } catch (SfnException e) {
                System.err.println(e.awsErrorDetails().errorMessage());
                System.exit(1);
            }
            return "";
        }

    private static String getJSONString(String path) {

        try {
            JSONParser parser = new JSONParser();
            JSONObject data = (JSONObject) parser.parse(new FileReader(path));//path to the JSON file.
            String json = data.toJSONString();
            return json;
        } catch (IOException |  org.json.simple.parser.ParseException e) {
            e.printStackTrace();
        }
        return "";
   }
    // snippet-end:[stepfunctions.java2.start_execute.main]
 }

此处有更多示例:

https://github.com/awsdocs/aws-doc-sdk-examples/tree/master/javav2/example_code/stepfunctions/src/main/java/com/example/stepfunctions

,

Amazon States LanguageStep Functions CreateStateMachine API 都不支持默认输入参数,尽管这将是一个很好的功能请求。

我猜默认 { "Comment": "Insert your JSON here" } 是由 Step Functions 控制台定义的,您将无法控制。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。