Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Amazon Simple Workflow Casual
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
Kenichi Takahashi
November 01, 2013
Programming
780
3
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Amazon Simple Workflow Casual
AWS Casual Talks #1 LT
Kenichi Takahashi
November 01, 2013
More Decks by Kenichi Takahashi
See All by Kenichi Takahashi
実践、マルチクラウド環境でのコスト管理の現状と未来
kenchan
0
190
エンジニアリング 💰Moneyジャー / Engineering Money-ger
kenchan
3
1k
Lv1,2の開発生産性を経営と繋ぐ
kenchan
4
2.1k
「トップ10プランナー」からはじめる目標設定
kenchan
5
4.4k
負債と言わないことが負債と向き合うこと
kenchan
5
4.7k
可用性No.1へ!「カラーミーショップ」のリ・アーキテクティング
kenchan
0
190
カラーミーショップは私たちが作っています
kenchan
0
1.8k
カラーミーショップ 2022 / COLORME SHOP 2022
kenchan
0
740
Amazon RDS移行のための 性能検証でわかった2つのこと
kenchan
3
4.3k
Other Decks in Programming
See All in Programming
Vue × Nuxt × Oxc どこまで使える?実運用の現在地
andpad
0
160
Claspは野良GASの夢をみるか
takter00
0
180
スマートグラスで並列バイブコーディング
hyshu
0
120
不変条件と整合性境界—ビジネスが決める設計判断と実現パターン / Invariants and Consistency Boundaries
nrslib
13
3.6k
Old Dog, New Tricks: The Java 25 Reinvention - JNation
bazlur_rahman
0
150
メソッドのジェネリクスでGoの夢は広がるか? / Kyoto.go #65
utgwkk
3
670
Spec Driven Development | AI Summit Lisbon
danielsogl
PRO
0
180
Oxlintのカスタムルールの現況
syumai
6
1.1k
Spec-Driven Development with AI-Agents: From High-Level Requirements to Working Software
antonarhipov
2
490
AIとASP.NET Coreで雑Webアプリを作った話
mayuki
0
500
フロントエンドとバックエンドで「1文字」を揃えよう
youkidearitai
PRO
0
260
Why Laravel apps break—Mastering the fundamentals to keep them maintainable
kentaroutakeda
1
350
Featured
See All Featured
Rebuilding a faster, lazier Slack
samanthasiow
85
9.5k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
333
22k
Utilizing Notion as your number one productivity tool
mfonobong
4
320
A designer walks into a library…
pauljervisheath
211
24k
Everyday Curiosity
cassininazir
0
230
Information Architects: The Missing Link in Design Systems
soysaucechin
0
970
HTML-Aware ERB: The Path to Reactive Rendering @ RubyCon 2026, Rimini, Italy
marcoroth
1
170
Reflections from 52 weeks, 52 projects
jeffersonlam
356
21k
Pawsitive SEO: Lessons from My Dog (and Many Mistakes) on Thriving as a Consultant in the Age of AI
davidcarrasco
0
160
Intergalactic Javascript Robots from Outer Space
tanoku
273
27k
30 Presentation Tips
portentint
PRO
1
320
A Guide to Academic Writing Using Generative AI - A Workshop
ks91
PRO
1
320
Transcript
ג ӬγεςϜϚωδϝϯτ ∁ڮ݈Ұ LFOUBLBIBTIJ!FTNDPKQ IUUQTIVDSFBNOFU "84$BTVBM5BMLT "NB[PO 4JNQMF8PSLqPX $BTVBM
ࣗݾհ ,FOJDIJ5",")"4)* IUUQTIVDSFBNOFU UXJUUFS!LFODIBO HJUIVCLFODIBO ! (FOUPP 'VOUPP -JOVY 5JMJOH8JOEPX.BOBHFS
,JOFTJT$POUPVSFE,FZCPBSE ! ఏಜ ϦϯΨധ ޫͷઓ࢜ ϰΝφσΟʔϧ
ɹIUUQJEPCBUBJP
ँࣙ
"NB[PO4JNQMF8PSLqPX Λ"844%,GPS3VCZ͔Β ͍ɺ"DUJWJUZ5BTLΛඇಉظ ʹྃͤ͞ΔΈΛ࡞Δ͜ͱͰ ༷ʑͳ՝Λղܾͨ͠Λ͠·͢ɻ ࠓͷ͓
͓ख͍͍ͯ͠Δ4BOTBO༷ ͷʮͱ͋ΔγεςϜʯͰ 4JNQMF8PSLqPX͕γε ςϜͷத֩Λ୲͓ͬͯΓɺ ̔ສͷϫʔΫϑϩʔΛຖ࣮ ߦ͍ͯ͠·͢ɻ ࠓͷ͓ͷิ
ͳͥ4JNQMF8PSLqPX
ͳͥ4JNQMF8PSLqPX "NB[PO4JNQMF8PSLqPX ͍ͬͯ͏৽͍͠αʔϏε͕͋ΔΈ ͍ͨͳΜ͚ͩͲʜ
w ్தͰਓखΛೖΕ͍ͨ w ༏ઌʹΑͬͯॲཧ͢Δॱ ൪Λ੍ޚ͍ͨ͠ w ్தͰ·ͱΊͯόονॲཧ ͍ͨ͠ w ݴޠ3VCZ
՝
w ్தͰਓखΛೖΕ͍ͨ w ༏ઌʹΑͬͯॲཧ͢Δॱ ൪Λ੍ޚ͍ͨ͠ w ్தͰ·ͱΊͯόονॲཧ ͍ͨ͠ w ݴޠ3VCZ
՝
IUUQEIBUFOBOFKQDLBUBZBNB
'MPX'SBNFXPSL3FDJQFT
ʂʂʂ
w ్தͰਓखΛೖΕ͍ͨ w ༏ઌʹΑͬͯॲཧ͢Δॱ ൪Λ੍ޚ͍ͨ͠ w ్தͰ·ͱΊͯόονॲཧ ͍ͨ͠ w ݴޠ3VCZ
՝
جຊҰݸྲྀ͠Ͱॱ൪ʹ
جຊҰݸྲྀ͠Ͱॱ൪ʹ ʮ͓ٸ͗ศʯ ʮ·ͱΊͯൃૹʯ Ͳ͏࣮ݱ͠Α͏ʁ
4JNQMF8PSLqPXͷػೳ
4JNQMF8PSLqPXͷػೳ ΞΫςΟϏςΟͷதͰ ࣗͨͪͰ ࣮͠ͳ͍ͱ͍͚ͳ͍
w ్தͰਓखΛೖΕ͍ͨ w ༏ઌʹΑͬͯॲཧ͢Δॱ ൪Λ੍ޚ͍ͨ͠ w ్தͰ·ͱΊͯόονॲཧ ͍ͨ͠ w ݴޠ3VCZ
՝
"844JNQMF8PSLqPX "DUJWJUZ5BTLΛӬଓԽͰ ͖ΔΑ͏ʹ͢Δ ղܾҊTUFQ
w ͪঢ়ଶͷλεΫΛϝϞϦ ্ʹ͞ͳͯ͘Α͍ w ࣮ࡍʹॲཧ͢Δॱ൪ɺ୯Ґ Λ੍ޚͰ͖Δ ӬଓԽ͕Ͱ͖Δͱʜ
"DUJWJUZ5BTL͔Βඞཁͳ ใΛ+40/ܗࣜͰऔΓग़͠ɺ%# ʹอଘ͓ͯ͘͠ɻλεΫΛྃ ͤ͞Δࡍʹɺͦͷใ͔ΒΦ ϒδΣΫτΛ෮ݩ͢Δɻ "DUJWJUZ5BTLΛ%#ʹอଘ
NZ@BDUJWJUZ@UBTLSC class MyActivityTask < SimpleDelegator! def initialize(original_activity_task)! super original_activity_task! end!
...! def to_json! to_hash.to_json! end! ! def to_hash! {! 'taskToken' => task_token,! 'activityId' => activity_id,! 'startedEventId' => started_event_id,! ! 'activityType' => {! 'name' => activity_type.name,! 'version' => activity_type.version,! },! ! 'workflowExecution' => {! 'workflowId' => workflow_execution.workflow_id,! 'runId' => workflow_execution.run_id,! }! ! ‘task_info' => {! # set custom task_info! }! }! end!
NZ@BDUJWJUZ@UBTLSC class MyActivityTask < SimpleDelegator! ...! def self.create_from_attributes(domain, attributes)! aws_attributes
= attributes.except('task_info')! swf_activity_task = AWS::SimpleWorkflow::ActivityTask.new(! domain,! aws_attributes,! {}! )! ! task = self.new(swf_activity_task)! ! if task_info = attributes['task_info']! # set custom task_info! end! ! task! end! end
1SPEVDFS$POTVNFS ύλʔϯΛద༻ͯ͠ɺ࣮ࡍͷ ॲཧॱ൪ͷ੍ޚɺόονॲ ཧΛ࣮͢Δɻ ղܾҊTUFQ
http://www.hyuki.com/dp/dpinfo.html#ProducerConsumer
"8448"DUJWJUZ5BTL $PMMFDUJPOQPMM·ͨ QPMM@TJOHMF@UBTLΛ͍ɺ 48'͔ΒλεΫΛऔಘͯ͠%# ʹอଘ͢Δ͚ͩɻ 1SPEVDFS
BDUJWJUZ@UBTL@QSPEVDFS@CBTFSC class ActivityTaskProducerBase! ...! def process_next_task!! activity_task = activity_task_list.poll_for_single_task! !
process!(MyActivityTask.new(activity_task))! end! ! def process!(my_activity_task)! MyTaskMode.create(! task_info: my_activity_task.to_json,! # other attributes! )! end! end
λεΫΛҙͷॱ൪ɺ·ͱ· ΓͰॲཧΛߦ͍ɺ"84 48"DUJWJUZ5BTLDPN QMFUFΛݺͼग़͠ɺλεΫΛ ࣍ਐΊΔɻ $POTVNFS
TBNQMF@DPOTVNFSSC
"DUJWJUZ5BTLΛӬଓԽ͢Δ ͜ͱͰɺ48'ͱͷΠϯλ ϑΣʔεʹ1SPEVDFS $POTVNFSύλʔϯΛద༻ ͠ɺࠓճͷ՝ղܾͰ͖· ͨ͠ɻ ·ͱΊ
w ్தͰਓखΛೖΕ͍ͨ w ༏ઌʹΑͬͯॲཧ͢Δॱ ൪Λ੍ޚ͍ͨ͠ w ్தͰ·ͱΊͯόονॲཧ ͍ͨ͠ w ݴޠ3VCZ
՝
ϫʔΫϑϩʔͷ్தͰਓखΛೖΕΔ ͚ͩͰ͋Ε'MPX'SBNFXPSL Λ͏͜ͱͰ؆୯ʹ࣮ݱͰ͖·͕͢ɺ ్தͰόονॲཧΛڬΉ߹ɺॲ ཧ͢Δॱ൪ΛೖΕସ͍͑ͨͱ͍͏༻ ͕݅͋Δ߹ࣗલͰ࣮͢Δඞཁ ͕͋Γ·͢ɻ ·ͱΊ
&OKPZ$PEJOH