Start
Entdecken
Suche senden
Hochladen
Einloggen
Registrieren
Anzeige
Check these out next
20200826 AWS Black Belt Online Seminar AWS CloudFormation
Amazon Web Services Japan
20190522 AWS Black Belt Online Seminar AWS Step Functions
Amazon Web Services Japan
20210526 AWS Expert Online マルチアカウント管理の基本
Amazon Web Services Japan
20190320 AWS Black Belt Online Seminar Amazon EBS
Amazon Web Services Japan
20191002 AWS Black Belt Online Seminar Amazon EC2 Auto Scaling and AWS Auto S...
Amazon Web Services Japan
20191105 AWS Black Belt Online Seminar Amazon Route 53 Hosted Zone
Amazon Web Services Japan
20201028 AWS Black Belt Online Seminar Amazon CloudFront deep dive
Amazon Web Services Japan
20190604 AWS Black Belt Online Seminar Amazon Simple Notification Service (SNS)
Amazon Web Services Japan
1
von
55
Top clipped slide
Amazon Simple Workflow Service (SWF)
7. Jul 2014
•
0 gefällt mir
51 gefällt mir
×
Sei der Erste, dem dies gefällt
Mehr anzeigen
•
44,499 Aufrufe
Aufrufe
×
Aufrufe insgesamt
0
Auf Slideshare
0
Aus Einbettungen
0
Anzahl der Einbettungen
0
Jetzt herunterladen
Downloaden Sie, um offline zu lesen
Melden
Technologie
AWS Black Belt Tech Webinar 2014 (旧マイスターシリーズ) Simple Workflow Service (SWF)
Amazon Web Services Japan
Folgen
Amazon Web Services Japan
Anzeige
Anzeige
Anzeige
Recomendados
20190220 AWS Black Belt Online Seminar Amazon S3 / Glacier
Amazon Web Services Japan
41.9K Aufrufe
•
79 Folien
20200422 AWS Black Belt Online Seminar Amazon Elastic Container Service (Amaz...
Amazon Web Services Japan
39.2K Aufrufe
•
62 Folien
20190514 AWS Black Belt Online Seminar Amazon API Gateway
Amazon Web Services Japan
19.1K Aufrufe
•
74 Folien
20210316 AWS Black Belt Online Seminar AWS DataSync
Amazon Web Services Japan
2.8K Aufrufe
•
89 Folien
20210216 AWS Black Belt Online Seminar AWS Database Migration Service
Amazon Web Services Japan
5.5K Aufrufe
•
63 Folien
20191029 AWS Black Belt Online Seminar Elastic Load Balancing (ELB)
Amazon Web Services Japan
65.8K Aufrufe
•
83 Folien
Más contenido relacionado
Presentaciones para ti
(20)
20200826 AWS Black Belt Online Seminar AWS CloudFormation
Amazon Web Services Japan
•
31.4K Aufrufe
20190522 AWS Black Belt Online Seminar AWS Step Functions
Amazon Web Services Japan
•
89.1K Aufrufe
20210526 AWS Expert Online マルチアカウント管理の基本
Amazon Web Services Japan
•
12.1K Aufrufe
20190320 AWS Black Belt Online Seminar Amazon EBS
Amazon Web Services Japan
•
71.9K Aufrufe
20191002 AWS Black Belt Online Seminar Amazon EC2 Auto Scaling and AWS Auto S...
Amazon Web Services Japan
•
23.1K Aufrufe
20191105 AWS Black Belt Online Seminar Amazon Route 53 Hosted Zone
Amazon Web Services Japan
•
8.4K Aufrufe
20201028 AWS Black Belt Online Seminar Amazon CloudFront deep dive
Amazon Web Services Japan
•
6.6K Aufrufe
20190604 AWS Black Belt Online Seminar Amazon Simple Notification Service (SNS)
Amazon Web Services Japan
•
11.8K Aufrufe
DevOps with Database on AWS
Amazon Web Services Japan
•
39K Aufrufe
AWS Black Belt Online Seminar 2017 AWS Storage Gateway
Amazon Web Services Japan
•
78.7K Aufrufe
20190821 AWS Black Belt Online Seminar AWS AppSync
Amazon Web Services Japan
•
33.8K Aufrufe
20191218 AWS Black Belt Online Seminar AWSのマネジメント&ガバナンス サービスアップデート
Amazon Web Services Japan
•
4.7K Aufrufe
20190326 AWS Black Belt Online Seminar Amazon CloudWatch
Amazon Web Services Japan
•
95.5K Aufrufe
AWS Black Belt Online Seminar 2017 Amazon Kinesis
Amazon Web Services Japan
•
147K Aufrufe
20191016 AWS Black Belt Online Seminar Amazon Route 53 Resolver
Amazon Web Services Japan
•
39.2K Aufrufe
AWS Black Belt Online Seminar 2017 AWS Elastic Beanstalk
Amazon Web Services Japan
•
44.5K Aufrufe
20191001 AWS Black Belt Online Seminar AWS Lake Formation
Amazon Web Services Japan
•
23.6K Aufrufe
20200722 AWS Black Belt Online Seminar AWSアカウント シングルサインオンの設計と運用
Amazon Web Services Japan
•
11K Aufrufe
20190723 AWS Black Belt Online Seminar AWS CloudHSM
Amazon Web Services Japan
•
8.1K Aufrufe
20190730 AWS Black Belt Online Seminar Amazon CloudFrontの概要
Amazon Web Services Japan
•
53.6K Aufrufe
Similar a Amazon Simple Workflow Service (SWF)
(20)
Anchors Aweigh!! - re:Invent報告@re:Port 2016 大阪
真吾 吉田
•
702 Aufrufe
20140621 july techfesta (JTF2014) 突発**むけAWS
Yasuhiro Araki, Ph.D
•
3.4K Aufrufe
[AWSマイスターシリーズ]Amazon Simple Workflow Service (SWF)
Amazon Web Services Japan
•
12.4K Aufrufe
JAWSUG初心者向けトラック 【Deploy&Ops】
Yukihiko SAWANOBORI
•
2.4K Aufrufe
20120528 aws meister-reloaded-awssd-kforjava-public
Amazon Web Services Japan
•
1.5K Aufrufe
Programming AWS with Perl at YAPC::Asia 2013
Yasuhiro Horiuchi
•
7.1K Aufrufe
サーバ構築・デプロイが簡単に!Elastic beanstalk
Hirokazu Ouchi
•
7K Aufrufe
Elastic beanstalk
Akio Katayama
•
1.1K Aufrufe
[AWSマイスターシリーズ] AWS Elastic Beanstalk -Python編-
Amazon Web Services Japan
•
5.7K Aufrufe
クラウド環境向けZabbixカスタマイズ紹介(第5回Zabbix勉強会)
Daisuke Ikeda
•
6.7K Aufrufe
May the FaaS be with us!!
真吾 吉田
•
2K Aufrufe
AWS SAMで始めるサーバーレスアプリケーション開発
真吾 吉田
•
43K Aufrufe
AWSマイスターシリーズ(Elastic Beanstalk)
Akio Katayama
•
1.3K Aufrufe
Application Deployment on AWS
Eiji Shinohara
•
3K Aufrufe
Using Windows Azure
Shinji Tanaka
•
2.2K Aufrufe
PHP on Cloud
Akio Katayama
•
2.3K Aufrufe
AWS as code_and_test
Serverworks Co.,Ltd.
•
2K Aufrufe
20130326 aws meister-reloaded-windows
Amazon Web Services Japan
•
3.8K Aufrufe
Eight meets AWS
Tetsuya Mase
•
6.8K Aufrufe
[AWSマイスターシリーズ] AWS Elastic Beanstalk
Amazon Web Services Japan
•
15.6K Aufrufe
Anzeige
Más de Amazon Web Services Japan
(20)
202205 AWS Black Belt Online Seminar Amazon VPC IP Address Manager (IPAM)
Amazon Web Services Japan
•
6.9K Aufrufe
Infrastructure as Code (IaC) 談義 2022
Amazon Web Services Japan
•
3.1K Aufrufe
Amazon Game Tech Night #25 ゲーム業界向け機械学習最新状況アップデート
Amazon Web Services Japan
•
1.9K Aufrufe
20220409 AWS BLEA 開発にあたって検討したこと
Amazon Web Services Japan
•
3.5K Aufrufe
SaaS テナント毎のコストを把握するための「AWS Application Cost Profiler」のご紹介
Amazon Web Services Japan
•
4K Aufrufe
マルチテナント化で知っておきたいデータベースのこと
Amazon Web Services Japan
•
6.5K Aufrufe
機密データとSaaSは共存しうるのか!?セキュリティー重視のユーザー層を取り込む為のネットワーク通信のアプローチ
Amazon Web Services Japan
•
831 Aufrufe
パッケージソフトウェアを簡単にSaaS化!?既存の資産を使ったSaaS化手法のご紹介
Amazon Web Services Japan
•
759 Aufrufe
202201 AWS Black Belt Online Seminar Apache Spark Performnace Tuning for AWS ...
Amazon Web Services Japan
•
4.3K Aufrufe
20211209 Ops-JAWS Re invent2021re-cap-cloud operations
Amazon Web Services Japan
•
3.5K Aufrufe
20211203 AWS Black Belt Online Seminar AWS re:Invent 2021アップデート速報
Amazon Web Services Japan
•
15.1K Aufrufe
[AWS EXpert Online for JAWS-UG 18] 見せてやるよ、Step Functions の本気ってやつをな
Amazon Web Services Japan
•
5.2K Aufrufe
20211109 JAWS-UG SRE keynotes
Amazon Web Services Japan
•
2K Aufrufe
20211109 bleaの使い方(基本編)
Amazon Web Services Japan
•
2.1K Aufrufe
202110 AWS Black Belt Online Seminar AWS Site-to-Site VPN
Amazon Web Services Japan
•
7.3K Aufrufe
AWS の IoT 向けサービス
Amazon Web Services Japan
•
2K Aufrufe
AWS IoT Coreを オンプレミス環境と使う際の アーキテクチャ例 (AWS IoT Deep Dive #5)
Amazon Web Services Japan
•
1.9K Aufrufe
AWS IoT SiteWise のご紹介 (AWS IoT Deep Dive #5)
Amazon Web Services Japan
•
1.7K Aufrufe
製造装置データ収集の選択肢 (AWS IoT Deep Dive #5)
Amazon Web Services Japan
•
787 Aufrufe
IoT@Loft#20 - IoTプラットフォームを進化さ せるAWSの活用方法
Amazon Web Services Japan
•
1.3K Aufrufe
Último
(20)
初学者のためのプロンプトエンジニアリング実践.pptx
Akifumi Niida
•
393 Aufrufe
20230516 @Mix Leap Hirohiko_Suwa
Masashi Nakagawa
•
83 Aufrufe
統計学の攻略_正規分布ファミリーの全体像.pdf
akipii Oga
•
153 Aufrufe
通信プロトコルについて
iPride Co., Ltd.
•
5 Aufrufe
Omnis
DaisukeFujita10
•
15 Aufrufe
Forguncy8 製品概要 202305.pptx
フォーガンシー
•
54 Aufrufe
触感に関わる共感覚的表現と基本6感情の対応関係の検証
Matsushita Laboratory
•
7 Aufrufe
社内ソフトスキルを考える
infinite_loop
•
59 Aufrufe
モバイル・クラウド・コンピューティング-データを如何に格納し、組み合わせ、情報として引き出すか
Masahiko Funaki
•
2 Aufrufe
Windows ChatGPT Bing AI.pptx
Atomu Hidaka
•
6 Aufrufe
オレオレになりがちなテスト計画を見直した話
terahide
•
25 Aufrufe
☀️【卡尔顿大学毕业证成绩单留学生首选】
15sad
•
2 Aufrufe
20230523_IoTLT_vol99_kitazaki_v1.pdf
Ayachika Kitazaki
•
108 Aufrufe
CDLEハッカソン2022参加報告.pdf
SHOIWA1
•
7 Aufrufe
JSTQB_テストプロセスの概念モデル.pdf
akipii Oga
•
153 Aufrufe
JSONEncoderで詰まった話
とん とんぼ
•
59 Aufrufe
JSTQB_テストマネジメントとレビュープロセス.pdf
akipii Oga
•
128 Aufrufe
留信网认证可查【皇家霍洛威学院文凭证书毕业证购买】
32lkhng
•
2 Aufrufe
3Dプリンタって いいね
infinite_loop
•
29 Aufrufe
Kubernetes超入門
Takashi Suzuki
•
5 Aufrufe
Anzeige
Amazon Simple Workflow Service (SWF)
Amazon Simple Workflow
Service(SWF) AWS Black Belt Tech Webinar 2014 アマゾンデータサービスジャパン株式会社 技術本部 エンタープライズソリューション部 部長/ソリューションアーキテクト 片山暁雄
アジェンダ • Amazon SWFのメカニズム •
AWS Flow Framework • SWFのさまざまな機能 • まとめ
アジェンダ • Amazon SWFのメカニズム •
AWS Flow Framework • SWFのさまざまな機能 • まとめ
Amazon SWFとは Amazon SWFは「処理のステート管理」と「タスク間の コーディネート」を行うためのフルマネージドサービス Amazon
SWFはシステム構築における以下の問題を解消 スケーラビリティ アベイラビリティ 並列処理の制御 ネットワーク/FW越しの連携
例えば:動画の処理 ユーザーが動画 をアップロード サムネイルの 作成 エンコード処理 (スマホ向け) エンコード処理 (PC向け) 不正動画検出 サイト公開 元動画の保存 動画インデック スの更新 メタデータ 埋め込み ユーザー情報 の更新
例えば:動画の処理(アーキテクチャその1) ユーザーが動画 をアップロード サムネイルの 作成 エンコード処理 (スマホ向け) エンコード処理 (PC向け) 不正動画検出 サイト公開 元動画の保存 動画インデック スの更新 メタデータ 埋め込み ユーザー情報 の更新
1つのアプリケーションで逐次処理を実装すれば、システ ムとしての作りは簡単 ただし・・・ • 全体の処理が長くなる • 性能向上はスケールアップしかない •
途中でエラーになった場合にリカバリできない 動画の処理(アーキテクチャその1)
例えば:動画の処理(アーキテクチャその2) ユーザーが動画 をアップロード サムネイルの 作成 エンコード処理 (スマホ向け) エンコード処理 (PC向け) 不正動画検出 サイト公開 元動画の保存 動画インデック スの更新 メタデータ 埋め込み ユーザー情報 の更新 キュー
各タスクをアプリ分割して、キューでつなぐ • 途中でプロセスエラーになっても落ちても、プロセス復帰後は直前 のキューまで戻れる • 各タスクを別のサーバに乗せることが可能 •
スケールアウトと冗長化 ただし・・・ • 全体の処理は長いまま • 各タスクが、次のタスクを意識しないといけない エンコード処理 (スマホ向け) エンコード処理 (スマホ向け) 動画の処理(アーキテクチャその2) EC2 EC2
例えば:動画の処理(アーキテクチャその3) ユーザーが動画 をアップロード サムネイルの 作成 エンコード処理 (スマホ向け) エンコード処理 (PC向け) 不正動画検出 サイト公開 元動画の保存 動画インデック スの更新 メタデータ 埋め込み ユーザー情報 の更新 キュー タスクの制御
「タスクの制御」処理を導入 • タスク実行の順序をこの処理に集めることで、タスク間を疎結合に • この処理が状態管理をすることで、タスクの並列実行が可能に •
タスクの戻り値で次のタスクを変えたりできる • 処理の履歴を記録できる ただし・・・ • 状態管理や処理履歴記録など、複雑な実装が必要 • 「タスクの制御」処理自体がSPOFで、かつスケーラビリティに欠ける 動画の処理(アーキテクチャその3)
例えば:動画の処理(アーキテクチャその4) ユーザーが動画 をアップロード サムネイルの 作成 エンコード処理 (スマホ向け) エンコード処理 (PC向け) 不正動画検出 サイト公開 元動画の保存 動画インデック スの更新 メタデータ 埋め込み ユーザー情報 の更新 コーディネーター 次のタスクを 決める キュー
「タスクの制御」を分割する • 「タスクの制御」のうちでも、汎用的な処理を、コーディネーターと して切り出す • 状態管理、次タスクへのキューイング、タスク終了の補足、実行履歴の 記録、エラーの補足、etc… •
汎用的でない部分はタスク化して状態を持たないようにする • 毎回キューに入ってくる実行履歴をもとに、次のタスクを決めるとこ ろだけに専念 動画の処理(アーキテクチャその4) コーディネーター = Amazon SWF
次のタスクを 決める エンコード処理 (スマホ向け) エンコード処理 (スマホ向け) 次のタスクを 決める SWFアーキテクチャと用語 ユーザーが動画 をアップロード 次のタスクを 決める エンコード処理 (スマホ向け) ワークフロー スターター デサイダー アクティビティ デシジョン タスクリスト アクティビティ タスクリスト ポーリング ポーリング ドメイン ワークフロー エグゼキューション ワークフロー エグゼキューション ワークフロー エグゼキューション
SWF用語 ワークフロースターター • ワークフローをキックするプログラム • キックするたびに「ワークフローエグゼキューション」が作成される ワークフローエグゼキューション •
ワークフローのインスタンス • 各ワークフローエグゼキューションごとに以下のような情報を保持 • WorkflowID:ユーザー採番の任意ID – 決済番号や請求書番号などを設定(重複時はエラー) • RunID:自動生成IDされるユニークID • ワークフローヒストリー:入出力情報含むタスクの実行履歴 • 開始時間 • タイムアウト設定
SWF用語 ドメイン • この区分ごとに、ワークフローエグゼキューションやタスクリストが管理さ れる • プログラム言語でいう「ネームスペース」のような概念 タスクリスト •
デサイダー/アクティビティがポーリングをするためのキュー • デサイダーとアクティビティごとにキューを設定 • タスクリストに入った1つのタスクは、1つのデサイダー/アクティビティし か取得しないことを保証 • タスクリストは、ドメイン内で共有 • 異なるワークフロースターターから始まる処理にも利用可能
エンコード処理 画像タスク タスクリストの使い方 ユーザーが動画を アップロード 動画タスク ユーザー認証 ワークフロー エグゼキューション ワークフロー エグゼキューション ユーザーが画像を アップロード エンコード処理エンコード処理エンコード処理エンコード処理 課金ユーザー 無料ユーザー 共通処理
SWF用語 デサイダー • 次のタスクを決めるタスク • タスクリストをポーリングして、タスクがあった場合に、 次に実行するアクティビティを指定 アクティビティ •
ワークフロー内の個別のタスクの処理 • デサイダーと同様、タスクリストをポーリングするため、 オンプレミスや既存DCでの動作も可能 • 人手を介する処理でもOK
ここまでのまとめ Amazon SWFは、デサイダーとアクティビティのコー ディネートと、ステート管理を行うサービス SWFのアーキテクチャでシステムを構築すると、以下の問題 が解決できる スケーラビリティ アベイラビリティ 並列処理の制御 ネットワーク/FW越しの連携
開発 SWF実行までの流れ アプリケーションやワーク フローの設計、必要なアク ティビティの洗い出し ドメインの作成 ワークフローと アクティビティタイプの登録 アクティビティの 実装 デサイダーの実装 ワークフロー スターターの実装 ワークフロースターターの 実行 ワークフロー エグゼキューション デサイダーやアクティビ ティワーカーのデプロイと 実行 設計 実行
アジェンダ • Amazon SWFのメカニズム •
AWS Flow Framework • SWFのさまざまな機能 • まとめ
AWS Flow Framework ワークフロー開始の呼び出し、タスクリストのポーリング、分岐処理 の実行など、SWFの各種APIを隠ぺいしてハイレベルなプログラミン グを提供する、クライアントフレームワーク Java,Rubyで提供。その他言語はAWS
SDKを使用 Flow Framework Flow Framework Flow Framework
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-flow • http://rubygems.org/gems/aws-flow
クラス構成と実装順 HelloWorldActivity HelloWorld ActivityWorker HelloWorld WorkflowWorker HelloWorldflow Starter AWS::Flow:: ActivityWorker AWS::Simple Workflow HelloWorldWorkflow AWS::Flow::Activities 認証情報 実装する部分 生成される部分 SDK提供部分 利用 アクティビティ の実装 デサイダーの実装 ワーカー/ワークフロー スターターの実装 extend AWS::Flow::Workflows extend AWS::Flow:: WorkflowWorker AWS::Flow:: workflow_client
アクティビティの実装 Activitiesクラスを継承して、アクティビティを実装 アクティビティオプションの 設定 ビジネスロジックをここに記述
デサイダーの実装 Workflowsクラスを継承して、デサイダーを実装 デサイダーの設定 デジションコーディング用 のスタブを生成 処理フローを実装
ワーカー/ワークフロースターターの実装 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に内包
デサイダーの実装方法 • デサイダーはワークフローのフローロジックの要 – 逐次処理、並列処理、フォーク/ジョインはデサイダーで実装 •
並列処理やフォーク/ジョインは、用意されたメソッドを用いて実装 – send_async、wait_for_any, wait_for_allなどのメソッドで並列処理や処 理待ちを実装
デサイダーの実装例 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 1つが実行済みなら続行 http://docs.aws.amazon.com/amazonswf/latest/awsrbflowguide/programming-workflow-patterns.html
さらに詳しいデサイダーの実装例 Recipes • http://docs.aws.amazon.com/amazonswf/latest/awsrbflowguide/r ecipes.html 以下のレシピを実装付きで公開 • 単一アクティビティの繰り返し実行 •
複数アクティビティの繰り返し実行 • 条件によるワークフローロジックの実行 • 手動操作によるアクティビティタスクの完了 • 非同期コードからスローされた例外のハンドリング方法 • 非同期コード実行失敗時のリトライ • 子ワークフローの呼び出し • ワークフローへのシグナル
Flow Frameworkの実装サンプル 各種サンプル実装 • https://github.com/awslabs/aws-flow-ruby-samples Hello
Worldや、ファイル処理、デプロイメント、cron処理など有 用なサンプルが多数 • このサンプルに先出のレシピの実装ファイルも同梱
AWS Flow Framework AWS
Flow Framework for Java • アクティビティのロジック実装から、SWF固有処理を分離 • デサイダーのロジック実装から、非同期処理の実装を分離 • JavaのAPT機能を使用して、各種スタブコードを生成 • JUnitを使用したテストのサポート機能 • AWS SDK for Javaを使用 セットアップ • JDKをセットアップ • Eclipseの場合、下記URLを参照 • http://docs.aws.amazon.com/amazonswf/latest/awsflowguide/setup.html • その他IDEの場合 • AWS SDK for Javaを入手(Flow Frameworkも内包) • 上記URLを参考に、プロジェクトのAPTと、JREのAspectJ設定を実施
クラス構成と実装順 MyActivityImpl MyActivity MyActivity ClientImpl MyActivityClient APT MyWorkflowClient External MyWorkflowClien tExternalImpl MyWorkflowClient ExternalFactory MyWorkflowClient ExternalFactory Impl APT APT MyActivityWorker MyWorkflowWorker MyWorkflow Starter ActivityWorker AmazonSimple Workflow MyWorkflowImpl MyWorkflow WorkflowWorker 認証情報 実装する部分 生成される部分 SDK提供部分 利用 アクティビティ の実装 デサイダーの実装 ワーカー/ワークフロー スターターの実装
アクティビティの実装 @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”; } } アクティビティのインターフェースを定義 ビジネスロジックを記述 アクティビティの設定
デサイダーの実装 @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(); } } デサイダーのインターフェースを実装 デサイダーの設定 処理フローを実装
ワーカー/ワークフロースターターの実装 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(); } } ワーカーを実装 フレームワーク 提供のクラス アクティビティクラスの インスタンスを登録 フレームワーク 提供のクラス デサイダークラスを登録 ポーリング を開始 ポーリング を開始
ワーカー/ワークフロースターターの実装 ワークフロースターターを実装 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を生成 ワークフロー開始
デサイダーの実装方法 • デサイダーはワークフローのフローロジックの要 – 逐次処理、並列処理、フォーク/ジョインはデサイダーで実装 •
Promise<>と@Asynchronusが処理フロー実装の基本 – ActivityClientのメソッド、もしくは@Asynchronousのついたメソッドに Promise<>を渡すと、そのPromise<>の状態がReadyになるまで処理が実 行されない – 逐次処理をしたい場合は、直前の処理の戻り値(Promise<>)を、次の処理 の引数にする。並行処理の場合は、戻り値を渡さない MyWorkflowImpl MyWorkflow MyActivity ClientImpl MyActivityClient
サンプルワークフロー processStart fileTransfer dataProcessingA combinResult showReport dataProcessingB dataProcessingC dataProcessingD
public void processStart(final
String srcImagePath) { Promise<String> s3ImagePath = jpl.fileTransfer(srcImagePath); //3分岐の処理 Promise<ProcessingResultA> resultA = aws.dataProcessingA(s3ImagePath); Promise<ProcessingResultB> resultB = aws.dataProcessingB(s3ImagePath); Promise<ProcessingResultC> resultC = aws.dataProcessingC(s3ImagePath); //dataProcessingCの終了後にDを実行 Promise<ProcessingResultD> resultD = aws.dataProcessingD(resultC); //全てのdataProcessiongを待つ Promise<CombineResult> combineResult = jpl.combineResult(resultA, resultB, resultD); Promise<Void> endResult = jpl.showResult(combineResult); } Jpl, awsは生成されたActivetyClientデサイダー実装例
デサイダーの実装例 • AWS Flow
Framework Recipes – http://aws.amazon.com/code/2535278400103493 • 以下のレシピを実装付きで公開 – 単一アクティビティの繰り返し実行 – 複数アクティビティの繰り返し実行 – 条件によるワークフローロジックの実行 – 手動操作によるアクティビティタスクの完了 – 非同期コードからスローされた例外のハンドリング方法 – 非同期コード実行失敗時のリトライ – ワークフローへのシグナル
実装サンプル 各種サンプル実装は、AWS SDK for
Javaに同梱 • http://aws.amazon.com/jp/sdkforjava/ • Samplesフォルダ内のAwsFlowFramework Hello Worldや、ファイル処理、デプロイメント、cron処理など有 用なサンプルが多数
デサイダーの実装Tips • 分岐処理を実装するためのクラスやアノテーションを活用 – AndPromise<>,OrPromise<>クラス –
@Wait,@NoWait – Settable<>クラス – @Asynchronous、Taskクラス – TryCatch、TryFinally、TryCatchFinallyクラス – @Signal
Flow Framework利用のTips 処理の細分化を検討 • 処理を細分化しておき、処理同士を疎結合にすることで、処理の再利用 やワークフロー間での共通利用が可能 •
細分化することで、特定のタスクだけサーバ台数を増やして、パフォー マンスを向上させることが可能 ステートレスを心がける • デサイダーやアクティビティを作る際、データをローカルに持たないよ うに設計する • 例えば画像処理の場合、画像データはS3などに入れ、各アクティビ ティが処理時にS3から取得するようにしておく
デサイダー、アクティビティの実行場所 デサイダー、アクティビティはEC2でもオンプレでもどこでもよい EC2であれば、認証情報はIAMロールを利用 ステートレスに作ることで、インスタンスごと生成/破棄できる • AutoScaling, BeanstalkやOpsWorksと相性がよい
Flow Frameworkのまとめ Flow Frameworkを利用することで、最小/平易な実装で複雑な ワークフロー処理の記述が可能 Flow
Frameworkを利用しないと使えない(使うのが難しい)機 能もあるため、まずは利用を検討
アジェンダ • Amazon SWFのメカニズム •
AWS Flow Framework • SWFのさまざまな機能 • まとめ
Amazon SWFの機能 デサイダー/アクティビティへのタスクルーティング • デサイダー/アクティビティ間のデータ受け渡し ワークフローエグゼキューションの実行履歴保持 •
どのようなアクティビティが呼ばれたかの履歴を保持 • 渡された値や戻り値の情報も保持 統計情報の取得 • 実行中のタスク数、終了タスク数、実行履歴 マニュアル実行のアクティビティのサポート • メールでの承認作業や、発送処理などの手作業が入る場合
Amazon SWFの機能(cont) 実行時間の長いアクティビティのサポート • 定期的なハートビートの実行 子プロセスサポート •
ワークフロー実行中にサブワークフローを実行 シグナル • ワークフロー処理への割り込み 実行中のワークフローのキャンセル マーカー • デサイダー実行時、任意の情報を履歴に入れることができる タグ • ワークフローエグゼキューションにタグを付与(5つまで)
さまざまなタイムアウト設定 • http://docs.aws.amazon.com/amazonswf/latest/developerguide/swf- timeout-types.html デサイダー/アクティビティ共通 アクティビティで利用(ハートビート用)
Amazon SWFの利用料金(東京リージョン) 1ワークフローエグゼキューションごとに$0.00011429 • 初回1,000回は無料 1ワークフローエグゼキューションの実行時間、24時間ごとに$0.00000571 •
ただし最初の30,000回、24時間までは無料 完了した1ワークフローの実行履歴を残すのに、1日当たり$0.00000571 • ただし最初の30,000回、24時間までは無料 1タスク、マーカー、タイマー、シグナルごとに$0.00002857 • 最初の10,000回は無料金
各種Limit http://docs.aws.amazon.com/amazonswf/la test/developerguide/swf-dg-limits.html 特にAPI Call数については要チェック 上限解除申請フォーム http://www.amazon.com/gp/html-forms-controller/AmazonSWF_Limit_Increase_Form 数が多い場合は解除申請もしくはサポート/ADSJまでご連絡を!
アジェンダ • Amazon SWFのメカニズム •
AWS Flow Framework • SWFのさまざまな機能 • まとめ
まとめ Amazon SWFは、デサイダーとアクティビティの コーディネートと、ステート管理を行うサービス Flow Frameworkを使うことで、実装が容易に 「ワークフロー」と考えるよりも、「ステートレス 処理をつなげるインフラ」と考えて、幅広い範囲で の利用を!
Appendix 参考資料 • Amazon Simple
Workflow Service • http://aws.amazon.com/jp/swf/ • AWS Flow Framework • http://aws.amazon.com/jp/swf/details/flow/ • 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
Anzeige