55
Amazon Simple Workflow Service(SWF) AWS Black Belt Tech Webinar 2014 (旧マイスターシリーズ) アマゾンデータサービスジャパン株式会社 技術本部 エンタープライズソリューション部 部/ソリューションアーキテクト 暁雄

Amazon Simple Workflow Service (SWF)

Embed Size (px)

DESCRIPTION

AWS Black Belt Tech Webinar 2014 (旧マイスターシリーズ) Simple Workflow Service (SWF)

Citation preview

  • 1. Amazon Simple Workflow Service(SWF) AWS Black Belt Tech Webinar 2014 () /

2. Amazon SWF AWS Flow Framework SWF 3. Amazon SWF AWS Flow Framework SWF 4. Amazon SWF " Amazon SWF " Amazon SWF " " " " /FW 5. ( (PC 6. ( (PC 7. " 1 " 8. ( (PC 9. " " ( ( 2 EC2 EC2 10. ( (PC 11. " " SPOF 3 12. 4 ( (PC 13. " etc 4 Amazon SWF 14. ( ( SWF ( 15. SWF " " WorkowIDID RunID:IDID 16. SWF " " / 11/ 17. 18. SWF " " DC OK 19. " Amazon SWF " SWF " " " " /FW 20. SWF 21. Amazon SWF AWS Flow Framework SWF 22. AWS Flow Framework " SWFAPI " Java,RubyAWS SDK Flow Framework Flow Framework Flow Framework 23. AWS Flow Framework for Ruby " AWS Flow Framework for Ruby AWS SDK for Ruby " Ruby(1.9) AWS SDK for Ruby gem install aws-sdk http://aws.amazon.com/jp/sdkforruby/ AWS Flow Framework for Ruby gem install aws-ow http://rubygems.org/gems/aws-ow 24. HelloWorldActivity HelloWorld ActivityWorker HelloWorld WorkflowWorker HelloWorldflow Starter AWS::Flow:: ActivityWorker AWS::Simple Workflow HelloWorldWorkow AWS::Flow::Activities SDK / extend AWS::Flow::Workflows extend AWS::Flow:: WorkflowWorker AWS::Flow:: workflow_client 25. " Activities 26. " Workows 27. / AWS::Flow::ActivityWorker.new(SWF, , activity_tasklist, HelloWorldActivity).start AWS::Flow::workflow_client( SWF, ,{from_class: "HelloWorldWorkflow}) .start_execution(World") " AWS::Flow::WorkflowWorker.new(SWF, , workflow_tasklist, HelloWorldWorkflow).start " HelloWorldActivity,HelloWorldWorkflow 28. / / send_asyncwait_for_any, wait_for_all 29. client.activity1 client.activity2 client.activity3 client.activity1 client.send_async(:activity2) client.send_async(:activity3) first_future = client.send_async(:activity1) second_future = client.send_async(:activity2) wait_for_all(first_future, second_future) client.activity3 decision_value = client.activity1 if (predicate_function(decision_value)) client.activity2 else client.activity3 end first_future = client.send_async(:activity1) second_future = client.send_async(:activity2) wait_for_any(first_future, second_future) client.activity3 http://docs.aws.amazon.com/amazonswf/latest/awsrbflowguide/programming-workflow-patterns.html 30. " Recipes http://docs.aws.amazon.com/amazonswf/latest/awsrbowguide/ recipes.html " 31. Flow Framework " https://github.com/awslabs/aws-ow-ruby-samples " Hello Worldcron 32. AWS Flow Framework " AWS Flow Framework for Java SWF JavaAPT JUnit AWS SDK for Java " JDK EclipseURL http://docs.aws.amazon.com/amazonswf/latest/awsowguide/setup.html IDE AWS SDK for JavaFlow Framework URLAPTJREAspectJ 33. MyActivityImpl MyActivity MyActivity ClientImpl MyActivityClient APT MyWorkowClient External MyWorkowClient ExternalImpl MyWorkowClient ExternalFactory MyWorkowClient ExternalFactory Impl APT APT MyActivityWorker MyWorkflowWorker MyWorkflow Starter ActivityWorker AmazonSimple Workflow MyWorkowImpl MyWorkow WorkflowWorker SDK / 34. @Activities(version = "1.0") @ActivityRegistrationOptions( defaultTaskList = MyActivityTaskList, defaultTaskScheduleToStartTimeoutSeconds = 30, defaultTaskStartToCloseTimeoutSeconds = 30) public interface MyActivity { String activity1(); } " public class MyActivityImpl implements MyActivity { @Override public String activity1() { return a1; } } " 35. @Workflow @WorkflowRegistrationOptions( defaultTaskList = Constants.DECIDER_TASK_LIST, defaultExecutionStartToCloseTimeoutSeconds = 300, defaultTaskStartToCloseTimeoutSeconds = 100) public interface MyWorkflow{ @Execute(version = "1.0") void execute(); } " public class MyWorkflowImpl implements MyWorkflow { private MyActivityClient client = new MyActivityClientImpl();// @Override public void execute() { client.activity1(); } } " 36. / public class MyActivityWorker { public static void main(String[] args) throws Exception { AmazonSimpleWorkflow swfClient = Helper.createClient(); String domain = CreateDomain.DOMAIN; ActivityWorker worker = new ActivityWorker(swfClient, domain,ACTIVITY_TASK_LIST); MyActivityImpl ac = new MyActivityImpl(); worker.addActivitiesImplementation(ac); worker.start(); } } public class MyWorkflowWorker { public static void main(String[] args) throws Exception { AmazonSimpleWorkflow swfClient = Helper.createClient(); String domain = CreateDomain.DOMAIN; WorkflowWorker worker = new WorkflowWorker(swfClient, DECIDER_TASKLIST); worker.addWorkflowImplementationType(MyWorkflowImpl.class); worker.start(); } } " 37. / " public class MyWorkflowStarter { public static void main(String[] args) throws Exception { AmazonSimpleWorkflow swfClient = Helper.createClient(); String domain = CreateDomain.DOMAIN; MyDeciderClientExternalFactory factory = new MyDeciderClientExternalFactoryImpl(swfClient, domain); String workflowId = DEMO+ new SimpleDateFormat("yyyy-MM-dd-hh-mm-ss").format(new Date()); MyDeciderClientExternal client = factory.getClient(workflowId); StartWorkflowOptions options = new StartWorkflowOptions(); options.setTaskList(Constants.DECIDER_TASK_LIST); client.execute(); } } ID 38. / Promise@Asynchronus ActivityClient@Asynchronous PromisePromiseReady (Promise) MyWorkowImpl MyWorkow MyActivity ClientImpl MyActivityClient 39. processStart fileTransfer dataProcessingA combinResult showReport dataProcessingB dataProcessingC dataProcessingD 40. public void processStart(final String srcImagePath) { Promise s3ImagePath = jpl.fileTransfer(srcImagePath); //3 Promise resultA = aws.dataProcessingA(s3ImagePath); Promise resultB = aws.dataProcessingB(s3ImagePath); Promise resultC = aws.dataProcessingC(s3ImagePath); //dataProcessingCD Promise resultD = aws.dataProcessingD(resultC); //dataProcessiong Promise combineResult = jpl.combineResult(resultA, resultB, resultD); Promise endResult = jpl.showResult(combineResult); } Jpl, awsActivetyClient 41. AWS Flow Framework Recipes http://aws.amazon.com/code/2535278400103493 42. " AWS SDK for Java http://aws.amazon.com/jp/sdkforjava/ SamplesAwsFlowFramework " Hello Worldcron 43. Tips AndPromise,OrPromise @Wait,@NoWait Settable @AsynchronousTask TryCatchTryFinallyTryCatchFinally @Signal 44. Flow FrameworkTips " " S3 S3 45. " EC2 " EC2IAM " / AutoScaling, BeanstalkOpsWorks 46. Flow Framework " Flow Framework/ " Flow Framework 47. Amazon SWF AWS Flow Framework SWF 48. Amazon SWF " / / " " " 49. Amazon SWFcont " " " " " " 50. http://docs.aws.amazon.com/amazonswf/latest/developerguide/swf- timeout-types.html / 51. Amazon SWF() " $0.00011429 1,000 " 24$0.00000571 30,00024 " 1$0.00000571 30,00024 " 1$0.00002857 10,000 52. Limit " http://docs.aws.amazon.com/amazonswf/ latest/developerguide/swf-dg-limits.html " API Call " " http://www.amazon.com/gp/html-forms-controller/AmazonSWF_Limit_Increase_Form " /ADSJ 53. Amazon SWF AWS Flow Framework SWF 54. " Amazon SWF " Flow Framework " 55. Appendix " Amazon Simple Workow Service http://aws.amazon.com/jp/swf/ AWS Flow Framework http://aws.amazon.com/jp/swf/details/ow/ AWS Flow Framework Recipes http://aws.amazon.com/code/2535278400103493 AWS Flow Framework samples for Amazon SWF http://aws.amazon.com/code/3015904745387737 Getting Started with AWS Flow Framework for Ruby https://www.youtube.com/watch?v=Z_dvXy4AVEE