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
プロダクトだけじゃない、社内プロセスにおける自動化・省力化ノススメ
kakehashi
PRO
1
580
しぶいSRE: サーバから見えない障害にどう向き合うか。ラストワンマイルのデバッグ実践 / Shibui SRE
kanny
10
3k
Why is RC4 still being used?
tamaiyutaro
0
300
AIペネトレーションテスト・ セキュリティ検証「AgenticSec」紹介資料
laysakura
2
8k
次世代ランサムウェア対策の考察 / 20260704 Mitsutoshi Matsuo
shift_evolve
PRO
5
1.7k
背中から、背中へ /paying forward to community
naitosatoshi
0
220
環境凍結という Toil を倒す -セルフサービス型 Ephemeral テスト環境の 設計と実践
shirouz
1
340
「ちゃんとやっている」は独りよがりだった ― 不安に寄り添うインシデント対応へ / Towards incident response that addresses anxieties
chmikata
1
1.7k
Terraform共通モジュールをチーム横断で“変えられる”運用へ ― リリースと適用の分離
kekke_n
0
550
AI駆動開発におけるQAエンジニアの役割事例 〜AI駆動開発の現場から〜
kobayashiyorimitsu
0
330
アラート調査向けAIエージェントの本番導入とその後/AI Agents for Alert Investigation: Production Deployment and After
taddy_919
1
390
事業価値を⽣み出すSREへ SREが担うべき意思決定の5層
kenta_hi
1
520
Featured
See All Featured
HU Berlin: Industrial-Strength Natural Language Processing with spaCy and Prodigy
inesmontani
PRO
0
440
AI in Enterprises - Java and Open Source to the Rescue
ivargrimstad
0
1.4k
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
Navigating Algorithm Shifts & AI Overviews - #SMXNext
aleyda
1
1.3k
Hiding What from Whom? A Critical Review of the History of Programming languages for Music
tomoyanonymous
3
890
How to train your dragon (web standard)
notwaldorf
97
6.7k
The Curious Case for Waylosing
cassininazir
1
420
We Are The Robots
honzajavorek
0
270
Product Roadmaps are Hard
iamctodd
55
12k
Scaling GitHub
holman
464
140k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
32
3.6k
コードの90%をAIが書く世界で何が待っているのか / What awaits us in a world where 90% of the code is written by AI
rkaga
62
44k
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