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简单队列服务和通知服务 注意 但有没有更好、更可取的方法来实现这一点?
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); } }
- 连续监视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(); } } }
因此,访问Step功能和活动不需要单独的凭据。非常感谢Sergey先生。我不知道AWS Step函数,在研究它时,它似乎是最好的解决方案。我可以添加与EC2实例上运行的可执行文件关联的活动。我将实施该解决方案,并在此处提供详细信息,以方便其他人。