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
まさかEC2にインストールなんかしていないよね?~Amazon ESのメリット/デメリット~
Search
NAVITIME JAPAN
PRO
February 07, 2020
Technology
0
32
まさかEC2にインストールなんかしていないよね?~Amazon ESのメリット/デメリット~
2020/2/7(金)に開催された「Amazon Elasticsearch Service & Open Distro for Elasticsearch Meetup」にて発表した資料です。
NAVITIME JAPAN
PRO
February 07, 2020
Tweet
Share
More Decks by NAVITIME JAPAN
See All by NAVITIME JAPAN
つよつよリーダーが 抜けたらどうする? 〜ナビタイムのAgile⽀援組織の変遷〜
navitimejapan
PRO
23
16k
実践ジオフェンス 効率的に開発するために
navitimejapan
PRO
3
810
安全で使いやすいCarPlayアプリの 魅せ方:HIGと実例から学ぶ
navitimejapan
PRO
1
240
見えないユーザの声はログに埋もれている! ~ログから具体的なユーザの体験を数値化した事例紹介~
navitimejapan
PRO
6
3.1k
ユーザーのためなら 『デザイン』 以外にも手を伸ばせる
navitimejapan
PRO
2
1.6k
フツーのIT女子が、 Engineering Managerになるまで
navitimejapan
PRO
3
370
不確実性に打ち勝つOKR戦略/How to manage uncertainty with OKR strategy
navitimejapan
PRO
4
3.7k
アジャイルを小さいままで 組織に広める 二周目 / Agile Transformation in NAVITIME JAPAN iteration 2
navitimejapan
PRO
4
1.4k
変更障害率0%よりも「継続的な学習と実験」を価値とする 〜障害を「起こってはならないもの」としていた組織がDirtの実施に至るまで〜 / DevOps Transformation in NAVITIME JAPAN
navitimejapan
PRO
7
5.7k
Other Decks in Technology
See All in Technology
戦えるAIエージェントの作り方
iwiwi
22
11k
こんな時代だからこそ! 想定しておきたいアクセスキー漏洩後のムーブ
takuyay0ne
3
120
Playwrightで始めるUI自動テスト入門
devops_vtj
0
170
アノテーション作業書作成のGood Practice
cierpa0905
PRO
1
410
ソフトウェア品質を支える テストとレビュー再考 / 吉澤 智美さん
findy_eventslides
1
360
Kotlinで型安全にバイテンポラルデータを扱いたい! ReladomoラッパーをAIと実装してみた話
itohiro73
3
270
How Fast Is Fast Enough? [PerfNow 2025]
tammyeverts
2
270
Raycast AI APIを使ってちょっと便利なAI拡張機能を作ってみた
kawamataryo
1
250
AIで急増した生産「量」の荒波をCodeRabbitで乗りこなそう
moongift
PRO
0
560
開発者が知っておきたい複雑さの正体/where-the-complexity-comes-from
hanhan1978
2
480
AI-ready"のための"データ基盤 〜 LLMOpsで事業貢献するための基盤づくり
ismk
0
120
今のコンピュータ、AI にも Web にも 向いていないので 作り直そう!!
piacerex
0
660
Featured
See All Featured
The Pragmatic Product Professional
lauravandoore
36
7k
Code Reviewing Like a Champion
maltzj
526
40k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
333
22k
Reflections from 52 weeks, 52 projects
jeffersonlam
355
21k
GraphQLとの向き合い方2022年版
quramy
49
14k
A better future with KSS
kneath
239
18k
Become a Pro
speakerdeck
PRO
29
5.6k
Statistics for Hackers
jakevdp
799
220k
GitHub's CSS Performance
jonrohan
1032
470k
Optimizing for Happiness
mojombo
379
70k
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
21
1.2k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
116
20k
Transcript
·͔͞EC2ʹΠϯετʔϧͳΜ͔ͯ͠ͳ͍ΑͶʁ ʙAmazon ESͷϝϦοτ/σϝϦοτʙ גࣜձࣾφϏλΠϜδϟύϯ ాத Ұथ
Who Am I ? ໊લɿాத Ұथ ׂɿCloud Architect ܦྺɿ2013৽ଔೖࣾɻ2017ʙΫϥυܥͷ࡞ۀʹैࣄ ͖ͳAWSαʔϏεɿCloudFormation,
Lambda
Our Company • גࣜձࣾ φϏλΠϜδϟύϯ • ઃཱ 2000 3
݄ 1 • ۀ༰ • φϏήʔγϣϯαΠτɾΞϓϦͷӡӦ։ൃ • ௨৴ΧʔφϏήʔγϣϯࣄۀ • ܦ࿏୳ࡧΤϯδϯͷϥΠηϯεࣄۀ ͳͲ • ैۀһ 540 ໊ (ΤϯδχΞ 80% Ҏ্ʣ
Our Products NAVITIME NAVITIME όεNAVITIME ͜ΈΕΆ ެڞަ௨ υϥΠϒ ΧʔφϏλΠϜ υϥΠϒαϙʔλʔ
τϥοΫΧʔφϏ πʔϦϯά πʔϦϯάαϙʔλʔ ࣗసंNAVITIME Travel/Inbound JapanTravel NAVITIME Transit NAVITIME Travel Plat ϔϧεέΞ ALKOO PC/SP Web
Our Products ΦϯυϝσΟΞ ࠂ / ΞϥΠΞϯε ϏδωεφϏλΠϜ ಈଶཧιϦϡʔγϣϯ ϏδωεφϏλΠϜ ަ௨අਫ਼ࢉύοέʔδ
ςϨϚςΟΫεαʔϏε API / SDK ిమɾόεࣄۀऀ͚ ιϦϡʔγϣϯ ަ௨ίϯαϧςΟϯά ϏδωεφϏλΠϜ ަ௨අਫ਼ࢉύοέʔδ ϏδωεφϏλΠϜ ಈଶཧιϦϡʔγϣϯ ࠂ/ΞϥΠΞϯε ΦϯυϝσΟΞ ަ௨ίϯαϧςΟϯά ిమ/όεࣄۀऀ͚ ιϦϡʔγϣϯ API / SDK ςϨϚςΟΫεαʔϏε
ʲ͢͜ͱʳ • Amazon Elasticsearch Serviceͷࢹ/ӡ༻ํ๏ͷհ • EC2্ͰElasticsearchΛߏஙͨ͠ͱ͖ͷ • UltraWarm for
Amazon Elasticsearch Serviceʹ͍ͭͯຊʹগ͠ ʲ͞ͳ͍͜ͱʳ • Elasticsearchࣗମͷઆ໌ • Elasticsearchࣗମͷվળํ๏
φϏλΠϜαʔϏεͱAWS
2013 Ŗ 2015 Ŗ 2016 Ŗ σʔλੳج൫ͷҰ෦ΛAWSڥͰߏங։࢝ ަ௨ίϯαϧςΟϯάࣄۀɺNAVITIME TransitͰAWSར༻։࢝ φϏλΠϜαʔϏεͷAWSҠߦϓϩδΣΫτελʔτ
NAVITIME͕AWSར༻։࢝ σʔλੳج൫ΛAthena+S3ʹҠߦ ॱ࣍ɺφϏλΠϜαʔϏεΛAWSڥҠߦ ܦ࿏୳ࡧΤϯδϯʹAWSͷGPUΛ࠾༻ ΄΅ͯ͢ͷαʔϏε͕AWS্ͰՔಇ 2017 Ŗ 2019 Ŗ φϏλΠϜδϟύϯͷAWSͷ׆༻
αʔϏεجຊߏ υϥΠϒαϙʔλʔ ΞϓϦέʔγϣϯαʔό APIαʔό ֤छσʔλ(DB) ਤ৴αʔό ܦ࿏୳ࡧαʔό ֤छσʔλ(ES) ֤छσʔλ(Solr)
φϏλΠϜαʔϏεͰͷElasticsearch
Ͳ͜ͰΘΕͯΔͷʁ
Ͳ͜ͰΘΕͯΔͷʁ υϥΠϒαϙʔλʔ ਤΛ։͘ • ओʹυϥΠϒܥͷαʔϏεͰٯδΦίʔσΟϯάͷݕࡧͰར༻
Ͳ͜ͰΘΕͯΔͷʁ υϥΠϒαϙʔλʔ ਤΛ։͘ ਤ্Λԡ͠ • ओʹυϥΠϒܥͷαʔϏεͰٯδΦίʔσΟϯάͷݕࡧͰར༻
Ͳ͜ͰΘΕͯΔͷʁ υϥΠϒαϙʔλʔ ਤΛ։͘ • ओʹυϥΠϒܥͷαʔϏεͰٯδΦίʔσΟϯάͷݕࡧͰར༻ ਤ্Λԡ͠ ͷॅॴ͕දࣔ
Ͳ͜ͰΘΕͯΔͷʁ • ଞʹɺNAVITIME TravelͰͷهࣄݕࡧͳͲͰར༻த NAVITIME Travel
࣮ͣͬͱElasticsearch on EC2ͰՔಇͤͯ͞·ͨ͠ɾɾɾ
աڈͷߏ υϥΠϒαϙʔλʔ ΞϓϦέʔγϣϯαʔό APIαʔό ֤छσʔλ(DB) ਤ৴αʔό ܦ࿏୳ࡧαʔό ֤छσʔλ(Solr) ٯδΦݕࡧ
EC2→Amazon ESҠߦͷܦҢ
v1. ͱΓ͋͑ͣ࡞Γ·ͨ͠ • όϥϯαCLBΛར༻ʢ࣌ࣾͰALB͋·Γͬͯͳ͔ͬͨͷͰʣ • EC2ΛͱΓ͋͑ͣߏஙʢASGͳ͠ʣ • ֤EC2ͰͦΕͧΕͷIPΞυϨεΛอ࣋ʢElasticsearchͷઃఆʹॻ͖ʣ
• ߏங͕͙͢ʹͰ͖ͨʢ׳Εͨߏʣ • Amazon ESʹͳ͍ElasticsearchόʔδϣϯΛ͑ͨ Pros Cons • ෛՙ্ঢ࣌ʹAutoScaleͰ͖ͳ͍ •
Πϯελϯε͕མͪͨͱ͖ʹ෮چʹ͕͔͔࣌ؒΔ
v2. গ͠վળ • ֤EC2ΠϯελϯεʹENIͰݻఆIPΛઃఆ • όϥϯαΛALBʹมߋʢIPΞυϨεͰϔϧενΣοΫ͢ΔͨΊʣ
• Πϯελϯε͕མͪͯಉ͡IPΞυϨεΛ͑Δ Pros Cons • ෛՙ্ঢ࣌ʹAutoScaleͰ͖ͳ͍ • Πϯελϯε͕མͪͨͱ͖ʹ݁ہ෮چʹ͕͔͔࣌ؒΔ
ϦϦʔε·Ͱ࣌ؒແ͘ɺ ಛʹͳ͘Քಇ͍ͯͨͨ͠ΊɺͱΓ͋͑ͣαʔϏεΠϯ
Χ݄ޙɾɾɾ
Χ݄ޙɾɾɾ ʮٯδΦ͏αʔϏε͕૿͑·͢ʂʯ
v2. ૿͢ • ಉ͡ͷΛखಈͰىಈͤ͞ɺେྔϦΫΤετʹରԠɻɻɻ • ϦΫΤετ͕ఆҎԼͷ߹ɺखಈͰΓͯ͠ఀࢭ
v2. ૿͢ • ར༻͞ΕΔυϝΠϯ͝ͱʹ͜ͷߏͰߏங • අ༻/ӡ༻ͱʹ૿େ
ݶ ք
• masterϊʔυ͕ίϩίϩมΘΓɺಛఆͷΠϯελϯεͰ ෛՙ͕ߴ͘ͳΔ • ALBͷ5xxΤϥʔ͕ߴ͘ͳΔ • ϦΫΤετ͕૿͑ΔλΠϛϯάͷΈεέʔϧΞτΛ͕Μ(ry EC2࣌ͷۤ࿑
v3. ݱࡏͷߏ • Amazon ESҠߦ • ΞΫηεVPCΤϯυϙΠϯτܦ༝ υϥΠϒαϙʔλʔ ΞϓϦέʔγϣϯαʔό APIαʔό
֤छσʔλ(DB) ਤ৴αʔό ܦ࿏୳ࡧαʔό ֤छσʔλ(ES) ֤छσʔλ(Solr)
• ΠϯελϯεͷཧΛAWS͕ͬͯ͘ΕΔ • ઐ༻ϚελʔϊʔυΛઃఆ͢Δ͜ͱͰෛՙ͕ܰݮͰ͖Δ • ݁ՌɺΠϯελϯε͕ݮͰ͖ͨ • EC2࣌ΑΓίετ͕3ׂݮ Pros Cons
• Amazon ESͬͯΦʔτεέʔϧͰ͖ͳ͍ • ElasticsearchόʔδϣϯΞοϓ࣌ʹΓ͕ͮ͠͠Β͍ • ઃఆมߋ࣌ʹBlue/GreenσϓϩΠͷΑ͏ͳڍಈʹͳΔ(͕͔͔࣌ؒΔ)
Amazon ESͷࢹ
• CloudWatchμογϡϘʔυ্Ͱࢹ • CloudWatchΞϥʔϜͰͷΤϥʔ௨ Amazon ESͷࢹ
• CloudWatchμογϡϘʔυ • ElasticsearchRequestsɿϦΫΤετ(Sum) • ClusterStatusɹɹɹɹ ɿΫϥελঢ়ଶ(Avg) • Nodesɹɹɹɹɹɹɹɹɿϊʔυ(Avg/Min) •
4xx/5xxErrorɹɹɹɹɹɿΤϥʔ(Sum) • Read/Search LatencyɹɿϨΠςϯγ(Avg/p99) • CPU UtilizationɹɹɹɹɿCPU༻(Avg) • JVMMemoryPressureɹɿJavaώʔϓ%(Max) Amazon ESͷࢹ
Amazon ESͷࢹ
• CloudWatchΞϥʔϜ • 5xxError(Sum) • Search Latency(Avg) Amazon ESͷࢹ
Amazon ESͷӡ༻
AutoScale ͱ Upgrade&Downgrade
• Amazon ESͱ͍͏ΑΓElasticsearchͱͯ͠Φʔτεέʔϧ ʹରԠ͍ͯ͠ͳ͍† • Amazon ESͰσʔλϊʔυͷΛ૿ݮͤ͞Δ͜ͱՄೳ • σʔλϊʔυΛม͑ΔͱϨϓϦΧΛมߋ͢Δඞཁ͕͋Δ Amazon
ESͷӡ༻ ʙAutoScaleʙ † https://www.elastic.co/guide/en/cloud/current/ec-faq.html#faq-autoscale
• Amazon ESͱ͍͏ΑΓElasticsearchͱͯ͠Φʔτεέʔϧ ʹରԠ͍ͯ͠ͳ͍† • Amazon ESͰσʔλϊʔυͷΛ૿ݮͤ͞Δ͜ͱՄೳ • σʔλϊʔυΛม͑ΔͱϨϓϦΧΛมߋ͢Δඞཁ͕͋Δ Amazon
ESͷӡ༻ ʙAutoScaleʙ † https://www.elastic.co/guide/en/cloud/current/ec-faq.html#faq-autoscale LambdaΛ༻͍ͯΦʔτεέʔϧΛྗٕͰ࣮
Amazon ESͷӡ༻ ʙAutoScaleʙ • SearchLatencyΛࢹ
Amazon ESͷӡ༻ ʙAutoScaleʙ • SearchLatencyΛࢹ • SearchLatency͕ѱԽͨ͠ͷΛݕͨ͠Β LambdaΛൃՐ
Amazon ESͷӡ༻ ʙAutoScaleʙ • SearchLatencyΛࢹ • SearchLatency͕ѱԽͨ͠ͷΛݕͨ͠Β LambdaΛൃՐ • Lambda͔ΒAmazon
ESͷσʔλϊʔυΛ૿ Ճͤ͞Δ
Amazon ESͷӡ༻ ʙAutoScaleʙ • SearchLatencyΛࢹ • SearchLatency͕ѱԽͨ͠ͷΛݕͨ͠Β LambdaΛൃՐ • Lambda͔ΒAmazon
ESͷσʔλϊʔυΛ૿ Ճͤ͞Δ • ૿Ճ͕ྃޙɺϨϓϦΧΛมߋ͢ΔϦΫΤ ετΛAmazon ESͷΤϯυϙΠϯτʹରͯ͠ ͛Δ
Amazon ESͷӡ༻ ʙAutoScaleʙ ɹ※ ࣄલʹσʔλϊʔυͱϨϓϦΧͷؔੑΛ ɹɹެࣜԽ͓ͯ͘͠ඞཁ͋Γ ɹ※ Lambdaͷ࣮ߦ࣌ؒʹҙ ɹ※ εέʔϧΠϯಉ͡
• ΞοϓάϨʔυ • ແఀࢭͰElasticsearchͷΞοϓάϨʔυ͕Մೳ • όʔδϣϯΞοϓ͕ͳ͚ΕܧଓతʹΞοϓάϨʔυ ͍͖ͯ͘͠ Amazon ESͷӡ༻ ʙUpgrade&Downgradeʙ
• μϯάϨʔυ • Elasticsearch6ܥˠ7ܥͷΞοϓάϨʔυ࣌ʹϨεϙϯε ͷ༰͕มΘΔมߋ͕ೖͬͨͷʹؾ͔ͮͣΞοϓάϨʔυ -> hits.total is now an
object in the search response† • Amazon ESͷϦΫΤετͰΤϥʔ͕ଟൃ… • μϯάϨʔυํ๏Λࡧ… Amazon ESͷӡ༻ ʙUpgrade&Downgradeʙ † https://www.elastic.co/guide/en/elasticsearch/reference/current/breaking-changes-7.0.html#hits-total-now-object-search-response
• ͙͢ʹͰ͖ΔμϯάϨʔυํ๏ͳ͍ • μϯάϨʔυํ๏ • ݅ɿࣗಈεφοϓγϣοτΛऔ͍ͬͯΔ͜ͱ • ํ๏ɿAWSαϙʔτ࿈བྷ͠ɺ৽نυϝΠϯͰ ɹɹɹɹɹɹεφοϓγϣοτ͔Βͷ෮ݩΛґཔ •
υϝΠϯͷมߋݫ͔ͬͨͨ͠ΊɺϨεϙϯεΛਖ਼͘͠ಡΊΔ Α͏ʹΞϓϦέʔγϣϯΛվम Amazon ESͷӡ༻ ʙUpgrade&Downgradeʙ
ࠓޙͷ՝ • Φʔτεέʔϧ݅ͷݟ͠ • όʔδϣϯΞοϓ࣌ʹSearchLatency͕ѱԽ͢Δ͜ͱ͕͋ ΔͷͰɺSearchLatencyҎ֎ͷ݅ΛࢦఆͰ͖ͳ͍͔ݕ౼ • Elasticsearch on EC2ͷ໓
• ·ͩҰ෦͍ͬͯΔڥ͕͋ΔͷͰݱࡏҠߦத • 2݄தʹαʔϏεར༻தͷͷશҠߦͰ͖ΔݟࠐΈ • OpenDistroࢼͯ͠ΈΔ
·ͱΊ • EC2ͰElasticsearchͷӡ༻ࢭΊ·͠ΐ͏ • Amazon ESͰཧͰ͖ͳ͍෦Elasticsearchଆͷ͋ ΔͷͰɺAWSͷϚωʔδυαʔϏεΛۦͯ͠ΓΓ· ͠ΐ͏ • όʔδϣϯΞοϓʹҙ͠·͠ΐ͏
• Amazon ESΑΓElasticsearchͷ༗ࣝऀΛࣾʹ࡞͍͖ͬͯ ·͠ΐ͏
• VPCΤϯυϙΠϯτʹରͯ͠Route53ͰυϝΠϯΛ͚͍ͭͨ • ઃఆมߋ࣌(ϩάͷઃఆͱ͔)ʹϊʔυ͕Blue/Greenʹͤͣʹม ߋͰ͖ΔΑ͏ʹͯ͠ཉ͍͠ʢ͕͍ͪ࣌ؒʣ • t2ΠϯελϯεϦβʔϒυΠϯελϯεͷରʹͯ͠ཉ͍͠ Amazon ESͷཁ
UltraWarm for Amazon ES
• ΞΫηεසͷগͳ͍σʔλΛUltraWarmετϨʔδҠಈ͞ ͤElasticsearchࣗମͷσΟεΫαΠζΛܰݮ͢Δ ɹɹ※ΠϯελϯελΠϓͱσΟεΫαΠζґଘؔ • ͍ͯΔ(ͱࢥ͏)༻్ • େͳσΟεΫΛ͏߹ • ΠϯσοΫεʹର͢ΔΞΫηεʹภΓ͕͋Δ߹
• ݕࡧ͡Όͳͯ͘ϩάੳϝΠϯ UltraWarm for Amazon ES
φϏλΠϜͷ༻్ͰίετϝϦοτແ͍ͷͰ͏༧ఆ͋Γ·ͤΜ UltraWarm for Amazon ES
UltraWarm for Amazon ES • ઐ༻Ϛελʔϊʔυʹt2ܥ͕͑ͳ͍ • ΫϥελཧΛͯ͠Δ͚ͩͳͷͰݱঢ়t2Ͱे • m5.largeʹεέʔϧΞοϓ͢Δͱʙ2ສԁ/݄ίετΞοϓ
• σΟεΫαΠζ͕TBະຬͳͷͰίετΧοτ΄΅Ͱ͖ͳ͍
©NAVITIME JAPAN