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
定期料金と従量課金を組み合わせたサブ スクリプション型サービスを作る/jp-stripe-02
Search
Serverless Operations
June 09, 2021
Technology
630
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
定期料金と従量課金を組み合わせたサブ スクリプション型サービスを作る/jp-stripe-02
Serverless Operations
June 09, 2021
More Decks by Serverless Operations
See All by Serverless Operations
2026年、知っておくべき最新 サーバレスTips10選/serverless-10-tips
slsops
13
5.8k
「うまく言えない」検索を叶える ― OpenSearchと生成AIで作る 類似プロジェクト検索
slsops
1
86
2026年、サーバーレスの現在地 -「制約と戦う技術」から「当たり前の実行基盤」へ- /serverless2026
slsops
3
580
Lambdalithアーキテクチャにより大きく進化するWeb APIの世界/lambdalith
slsops
5
1.3k
ITベンダーから見る内製化支援の本質/in-house-dev
slsops
1
860
Case Study for Repurposing Video Content With Generative AI / AWS Community Day Taiwan 2024
slsops
0
530
サーバーレスなユーザー認証認可の考慮事項と実践的プラクティス紹介 / slsdays-tokyo-2024
slsops
11
4.6k
サーバーレスで負荷試験を行う必要性と実践的プラクティスの紹介/slsdays-tokyo-2023
slsops
4
2.8k
Serverless Web Hosting Strategy For Modern Front-end Application
slsops
0
510
Other Decks in Technology
See All in Technology
Claude Codeとハーネスについて考えてみる
oikon48
13
6k
product engineering with qa
nealle
0
140
Mastraエージェント、どのクラウドにデプロイする?
minorun365
PRO
2
140
10x Speed With QA Agent Platform - How we scaled adoption from individual effort to organizational capability
lycorptech_jp
PRO
0
120
背中から、背中へ /paying forward to community
naitosatoshi
0
210
そこにあるから地図ができる~位置を示す"モノ"を愉しむ~ - Interface 2026年6月号GPS特集オフ会 / interface_202606_GPS_offline
sakaik
1
190
AWS Summit Japan 2026の振り返りと2027へ向けて / AWS Summit Japan 2026 Recap and Prospects for 2027
kaminashi
1
180
MySQL & MySQL HeatWave Report - June 2026
freshdaz
0
300
RAGの精度向上とエージェント活用
kintotechdev
2
120
AWS Summit 2026で見えたSIerにとっての Amazon Quickの位置づけ
maf_0521
0
160
“全部コピーしない”ファイルデータの活用 : — FSx for ONTAP × S3 Tables × Icebergで作るメタデータカタログ
yoshiki0705
0
330
Why is RC4 still being used?
tamaiyutaro
0
280
Featured
See All Featured
Rails Girls Zürich Keynote
gr2m
96
14k
Money Talks: Using Revenue to Get Sh*t Done
nikkihalliwell
0
270
Lightning talk: Run Django tests with GitHub Actions
sabderemane
0
210
A Soul's Torment
seathinner
6
3k
The Illustrated Guide to Node.js - THAT Conference 2024
reverentgeek
1
400
What's in a price? How to price your products and services
michaelherold
247
13k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
128
56k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
666
130k
Being A Developer After 40
akosma
91
590k
Unlocking the hidden potential of vector embeddings in international SEO
frankvandijk
0
860
We Have a Design System, Now What?
morganepeng
55
8.2k
It's Worth the Effort
3n
188
29k
Transcript
Serverless Operations / Sonu Kim ఆظྉۚͱैྔ՝ۚΛΈ߹Θͤͨαϒ εΫϦϓγϣϯܕαʔϏεΛ࡞Δ
ϓϩϑΟʔϧ ۚɹઋ༏Kim Sonu ʮ͍Λ͙͢ʹܗʹͰ͖Δʯ͜ͱͰ ɹαʔόʔϨεʹίϛοτ͍ͯ͠Δ ϑϩϯτΤϯυʗόοΫΤϯυΛΘͣɺ ָ͘͠αʔϏεΛ࡞Δͷ͕ੜ͖͕͍
αʔόʔϨεͰ ΫϥυͷՁΛ࠷େݶʹ Serverless Operations ͜Ε·ͰάϩʔόϧͷୈҰઢͰ ഓ͖ͬͯͨΫϥυٕज़ʢ"84ʵΞϚκϯΣϒαʔϏεʣͷ ๛ͳ࣮ͱݟΛ׆͔͠ɺ͓٬͞·ͷαʔόʔϨε ʹؔ͢Δ͞·͟·ͳ՝Λղܾ͠·͢ɻ ձࣾհ serverless.co.jp
ຊͷςʔϚ ఆظྉۚͱैྔ՝ۚΛΈ߹ΘͤͨྉۚମܥΛ4USJQFΛͬ ࣮ͯݱ͢Δํ๏Λ۩ମతʹհ "84ͰͷαʔόʔϨεͳγεςϜߏͷύλʔϯΛհ
࣮ݱ͍ͨ͜͠ͱͷ֓ཁʢαϒεΫϦϓγϣϯʴैྔ՝ۚʣ #BTJDϓϥϯ݄ "EWBODFEϓϥϯ݄ &OUFSQSJTFϓϥϯ݄ "1*ݺͼग़͠ճ ʢ"1*6TBHFʣ
࣮ݱ͍ͨ͜͠ͱͷ֓ཁʢαϒεΫϦϓγϣϯʴैྔ՝ۚʣ &OUFSQSJTFϓϥϯ݄ "1*ݺͼग़͠ճ ʢ"1*6TBHFʣ ຖ݄ܾ·ͬͨྉۚΛٻ "1*ͷݺͼग़͠ճʹԠͯ͡ ྉۚΛܭࢉͯ͠ٻ #BTJDϓϥϯ݄ "EWBODFEϓϥϯ݄
࣮ݱ͍ͨ͜͠ͱͷ֓ཁʢαϒεΫϦϓγϣϯʴैྔ՝ۚʣ &OUFSQSJTFϓϥϯ݄ "1*ݺͼग़͠ճ ʢ"1*6TBHFʣ ຖ݄ܾ·ͬͨྉۚΛٻ "1*ͷݺͼग़͠ճʹԠͯ͡ ྉۚΛܭࢉͯ͠ٻ #BTJDϓϥϯ݄ "EWBODFEϓϥϯ݄ αϒεΫ͚ͩͰͳ͘ɺ
ैྔ՝ۚ·Ͱूܭͯ͠ ٻʹөͤ͞ΔΑ͏ͳ ࣮ରԠ͕ඞཁʹͳͬͯ͘Δ αʔϏε։࢝·Ͱྉۚମܥ͕ ֬ఆ͠ͳ͍ɺޙ͔Βॊೈʹ ՝ۚϞσϧΛมߋͰ͖ΔΑ͏ʹ͍ͨ͠
࣮ݱ͍ͨ͜͠ͱͷ֓ཁʢαϒεΫϦϓγϣϯʴैྔ՝ۚʣ #BTJDϓϥϯ݄ "EWBODFEϓϥϯ݄ &OUFSQSJTFϓϥϯ݄ "1*ݺͼग़͠ճ ʢ"1*6TBHFʣ ຖ݄ܾ·ͬͨྉۚΛٻ "1*ͷݺͼग़͠ճʹԠͯ͡ ྉۚΛܭࢉͯ͠ٻ 料金体系
→ ”継続” として商品登録 ・段階的/数量ベースの料金体系として商品登録 ・Stripeへ使用量を報告し、毎月の請求に反映させる
αϯϓϧͷΛొ͢Δ ᶃ4BOECPYr#BTJD1MBOɿҰൠతͳఆظߪೖ͚ͷΛొ ᶄ4BOECPYr"1*6TBHFɿ"1*ݺͼग़͠ճɺैྔ՝͚ۚͷΛొ
αϯϓϧͷΛొ͢Δ ᶃ4BOECPYr#BTJD1MBOɿҰൠతͳఆظߪೖ͚ͷΛఆ 料金体系モデル: “標準の料金体系” “継続”
αϯϓϧͷΛొ͢Δ ᶄ4BOECPYr"1*6TBHFɿ"1*ݺͼग़͠ճɺैྔ՝͚ۚͷΛొ 料金体系モデル: “段階的な料金体系” ैྔ՝͚ۚͷྉۚମܥͱͯ͠ ʮஈ֊తʯͱʮྔϕʔεʯͷ ̎छྨ͕͋Δ 具体的な従量課金の料金体系を設定
αϯϓϧͷΛొ͢Δ ᶄ4BOECPYr"1*6TBHFɿ"1*ݺͼग़͠ճɺैྔ՝͚ۚͷΛొ 料金体系モデル: “段階的な料金体系” 具体的な従量課金の料金体系を設定 ैྔ՝͚ۚͷྉۚମܥͱͯ͠ ʮஈ֊తʯͱʮྔϕʔεʯͷ ̎छྨ͕͋Δ 例えば1ユニットあたりの金額を算定する方式として 「1-100回目は◦◦円、101-200回目は◦◦円」と段階的に
異なる料金を積み上げていく(段階式) 「合計回数100回以下の場合◦◦円、合計回数200回以下の場合は ◦◦円、合計回数が201回以上の場合は◦◦円」と 合計数ベースで単価を決める(数量ベース)
༻ྔΛܭଌ͢ΔΦϓγϣϯΛ༗ޮԽ ᶄ4BOECPYr"1*6TBHFɿ"1*ݺͼग़͠ճɺैྔ՝͚ۚͷΛొ 「Usage is metered(使用量が計測されます)」にチェック 「Charge for metered usage by(計測された使用量に基づく請求)」
→ 適宜システム仕様に合わせて選択
༻ྔΛܭଌ͢ΔΦϓγϣϯΛ༗ޮԽ ᶄ4BOECPYr"1*6TBHFɿ"1*ݺͼग़͠ճɺैྔ՝͚ۚͷΛొ 「Usage is metered(使用量が計測されます)」にチェック 「Charge for metered usage by(計測された使用量に基づく請求)」
→ 適宜システム仕様に合わせて選択 ˞ޙ΄Ͳઆ໌͢Δʮ༻ྔͷใࠂʯ ͕Ͱ͖ΔΑ͏ʹͳΔ ˞࣮ࡍʹ֤Ϣʔβʔͷ༻ྔΛTUSJQF ͷ"1*ܦ༝ͰϨϙʔτ͢Δ͚ͩͰɺ ొ࣌ʹઃఆͨ͠ྉۚςʔϒϧʹ߹ Θͤͯ՝ֹ͕ۚٻॻʹө͞ΕΔ
ސ٬ٴͼαϒεΫϦϓγϣϯͷొ ސ٬ɺࢧใɺαϒεΫϦϓγϣϯΛొ ˞͓ࢼ͠Ͱܾࡁొը໘ͷσϞΛ࡞ͬͯΈ͍ͨ߹ɺެࣜͷ$IFDLPVUαϯϓϧ͕ศར e// https://github.com/stripe-samples/checkout-single-subscription e// server/node/server.js L.50 - econst
session = await stripe.checkout.sessions.create({ mode: 'subscription', payment_method_types: [ 'card' ], line_items: [ { price: '{PRICE_ID_PLAN}', quantity: 1 }, { price: '{PRICE_ID_API_USAGE}' } ], // ...
ސ٬ٴͼαϒεΫϦϓγϣϯͷొ 先程登録した2つの商品 (定額課金・従量課金)が 表示されている ˞Χʔυ൪߸TUSJQFςετϞʔυ ઐ༻ͷ൪߸Λ༻
αϒεΫϦϓγϣϯొޙʹٻΛ֬ೝ͢Δͱɾɾɾ ˞ఆظྉۚʢ#BTJD1MBOʣͷྉ͕ۚө͞Ε͍ͯΔ
ैྔ՝ۚͷ༻ྔΛใࠂ͢Δɹ e[request sample] ePOST /v1/subscription_items/:subscription_item_id/usage_records eauthorization: Bearer {SECRET_API_KEY} econtent-type: application/x-www-form-urlencoded
etimestamp=1614752111&quantity=250&action=set e[response sample] e200 OK e{ e "subscription_item": "xxx", e "quantity": 250, e "timestamp": 1615097751, e // ... e} ैྔ՝ۚ .FUFSFE #JMMJOH ͷֹۚΛөͤ͞ΔͨΊʹɺސ٬͕ར༻ͨ͠ྔ Ϣ χοτ Λͱͯ͠4USJQFʹૹ৴ʢ˞6TBHF3FDPSET"1*ʣ ˞1BUIύϥϝʔλʹސ٬ͷఆظࢧͷ μογϡϘʔυը໘͔ΒऔಘͰ͖Δ ʮαϒεΫϦϓγϣϯΞΠςϜ*% ʢTJ@YYYʣʯΛࢦఆͯ͠ྔΛૹ৴ ˞4USJQF"1*ʹ3BUF-JNJU͕͋ΔͷͰҙ ʢMJWFNPEFͰSFBE XSJUFQFSTFDPOEʣ IUUQTTUSJQFDPNEPDTSBUFMJNJUT
ैྔ՝ۚͷ༻ྔΛใࠂ͢Δ ༻ྔΛใࠂͨ͠ޙͷٻใΛ֬ೝ
ΞυϗοΫʹٻ߲ͱֹۚΛՃ͢Δํ๏͋Δ αϒεΫϦϓγϣϯͷظؒதʹ࣍ճͷٻ߲Λਵ࣌ՃͰ͖Δ"1*͋Δ ݮֹՄೳͰɺΞυϗοΫʹ࣍ճٻͷֹۚΛௐઅɾਫ਼ࢉ͢Δͱ͍͍ͬͨํ͕Ͱ͖ͦ͏ IUUQTTUSJQFDPNEPDTCJMMJOHJOWPJDFT TVCTDSJQUJPOBEEJOHVQDPNJOHJOWPJDFJUFNT
(FPMPOJB ΦϯϥΠϯਤαʔϏε ͷࣄྫ ྉۚମܥ͕ྲྀಈతͩͬͨΓɺैྔ՝ۚΛεΫϥονͰ։ൃ͢Δෛ୲͕͋ͬͨ ˠมߋՄೳͰॊೈͳΈͷ࣮ݱͱ࣮ෛ୲Λܰݮ ΧϜϯϲε ĖຌᲦό⑲τ ܭଌσʔλͷ&5-ॲཧΛܦͯ%ZOBNP%#อଘ ᑿᠭᅗΤᏄຓ -BNCEB
"QQMJDBUJPO 4 "UIFOB 'BSHBUF %ZOBNP%# -BNCEB 4 %ZOBNP%# 4USFBNT e{ e “subject_id”: "...", e “subscription_item”: "...", e "quantity": 100, e "timestamp": 1615097751, e // … e} ˞ࣄྫհهࣄͪ͜ΒIUUQTTFSWFSMFTTDPKQCMPH
"84αʔόʔϨεͳγεςϜߏͷྫ ܭଌϩάʢNFUSJDMFWFMʣΛऩू͠ɺ&5-ॲཧΛܦͯ%ZOBNP%#ʹ֨ೲɺ %ZOBNP%#4USFBNTΛར༻ͯ͠ॱ࣍༻ྔΛૹ৴͢Δ ΧϜϯϲε ĖຌᲦό⑲τ ܭଌσʔλͷ&5-ॲཧΛܦͯ%ZOBNP%#อଘ ᑿᠭᅗΤᏄຓ -BNCEB "QQMJDBUJPO 'BSHBUF
%ZOBNP%# -BNCEB 4 %ZOBNP%# 4USFBNT ,JOFTJT'JSFIPTF e{ e “subject_id”: "...", e “subscription_item”: "...", e "quantity": 100, e "timestamp": 1615097751, e // … e}
·ͱΊ ఆظྉۚͷͱैྔ՝ۚͷΛ྆ํొ͠ɺαϒεΫϦϓγϣϯ͢Δ ैྔ՝ۚͷ༻ྔΛܭଌ͢ΔΦϓγϣϯΛ༗ޮԽ͠ɺ "1*ܦ༝Ͱ༻ྔΛใࠂ͢Δͱٻʹө͞ΕΔ ैྔ՝ۚʹ͏՝ۚϩδοΫΛࣗલͰ࣮͢Δඞཁ͕ͳ͘ɺ4USJQFΛ͍͜ͳͦ͏ αʔόʔϨεͷྑ͞Λ׆͔ͯ͠ॊೈͳઃܭΛࢦ͠·͠ΐ͏ ˞ຊͷ͓ͪ͜Βͷϒϩάهࣄͷ༰Λݩʹ͍ͯ͠·͢ɻ߹Θͤͯ͝ࢀߟ͍ͩ͘͞ɻ IUUQTTFSWFSMFTTDPKQCMPH
serverless.co.jp