Amazon ec2 AWS Ec2实例中不涉及lambda的工作流设计

Amazon ec2 AWS Ec2实例中不涉及lambda的工作流设计,amazon-ec2,workflow,amazon-swf,aws-step-functions,Amazon Ec2,Workflow,Amazon Swf,Aws Step Functions,提前感谢您的时间和回答 我有多个,比如说3个AWS EC2 windows实例 我在3个windows实例中的每个实例中都有.NET可执行文件A、B和C。(我也可以混合使用java程序) 它们需要以类似工作流的方式一个接一个地运行,这取决于前一个可执行文件的结果。i、 e B应在A成功后运行;C应该在B成功后运行等等。简言之,我希望 实现工作流程 在AWS中,我研究了Amazon的简单工作流;然而对我来说 要使用它,我需要在.NET代码中嵌入AWS SWS SDK。但是 不幸的是,我只有可执行

提前感谢您的时间和回答

  • 我有多个,比如说3个AWS EC2 windows实例
  • 我在3个windows实例中的每个实例中都有.NET可执行文件A、B和C。(我也可以混合使用java程序)
  • 它们需要以类似工作流的方式一个接一个地运行,这取决于前一个可执行文件的结果。i、 e B应在A成功后运行;C应该在B成功后运行等等。简言之,我希望 实现工作流程

  • 在AWS中,我研究了Amazon的简单工作流;然而对我来说 要使用它,我需要在.NET代码中嵌入AWS SWS SDK。但是 不幸的是,我只有可执行文件,不允许 重建它

  • 我还有Amazon简单队列服务和通知服务 注意

    但有没有更好、更可取的方法来实现这一点?

但有没有更好、更可取的方法来实现这一点

对。现在首选的方法是使用Amazon Simple Workflow的改进、简化和干净版本。因为您有一个按顺序运行的预编译可执行文件,所以也值得一看


Step函数基本上是Lambda函数,但您可以随部署包一起提供可执行文件,并从Lambda函数执行它们。

根据Sergey提供的答案,我实现了Step函数,效果非常好。 我将此作为后续发布,以提供有关我如何实施此功能的更多详细信息

1) 使用JSON DSL从AWS控制台创建了具有一系列活动的AWS状态机。 (有几篇文章解释了如何创建状态机)

2) 我的状态机应该根据上传到特定目录的文件启动工作流

3) 因此,我编写了一个java应用程序(可以是c#或任何东西),它将

  • 使用文件查看器启动AWS工作流

    import com.amazonaws.services.stepfunctions.AWSStepFunctions;
    import com.amazonaws.services.stepfunctions.AWSStepFunctionsClientBuilder;
    import com.amazonaws.services.stepfunctions.model.StartExecutionRequest;
    
    class StepFunctionExecution {
    private StartExecutionRequest startExecutionRequest = new StartExecutionRequest();
    public void Start(String filePath){
        final AWSStepFunctions client = AWSStepFunctionsClientBuilder
                .standard()
                .build();
    
        /** Start execution */
        startExecutionRequest.setStateMachineArn("MyARN");
        startExecutionRequest.setName(java.util.UUID.randomUUID().toString());
        String inputJson = "{\r\n  \"FilePath\": \"" + filePath + "\"\r\n}";
        startExecutionRequest.setInput(inputJson);
        client.startExecution(startExecutionRequest);
        }
    }
    
4) 我在同一个java应用程序中启动了另一个线程(我也可以使用单独的java应用程序)

  • 连续监视AWS step函数中的第一个活动

        final ClientConfiguration clientConfiguration = new ClientConfiguration();
    clientConfiguration.setSocketTimeout((int) TimeUnit.SECONDS.toMillis(65));
    final AWSStepFunctions client = AWSStepFunctionsClientBuilder
            .standard()
            .withClientConfiguration(clientConfiguration)
            .build();
    
    while (true) {
        GetActivityTaskResult getActivityTaskResult =
                client.getActivityTask(
                        new GetActivityTaskRequest().withActivityArn("myArn"));
        if (getActivityTaskResult.getTaskToken() != null) {
            try {
                    // Do actual processing
                    client.sendTaskSuccess(
                            new SendTaskSuccessRequest()
                                    .withOutput("{}")
                                    .withTaskToken(getActivityTaskResult.getTaskToken()));
            } catch (final Exception e) {
                client.sendTaskFailure(
                        new SendTaskFailureRequest()
                                .withCause(e.getMessage())
                                .withTaskToken(getActivityTaskResult.getTaskToken()));
            }
        } else {
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
    
5) 我在AWSEC2实例中运行了这些Java可执行文件

EC2实例被分配IAM角色以访问步骤功能资源等


因此,访问Step功能和活动不需要单独的凭据。

非常感谢Sergey先生。我不知道AWS Step函数,在研究它时,它似乎是最好的解决方案。我可以添加与EC2实例上运行的可执行文件关联的活动。我将实施该解决方案,并在此处提供详细信息,以方便其他人。