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
CNDF2023前夜祭 - 玄界灘のクラウドネイティブなデータ基盤運用の実践
Search
Kazuhiko Yamashita
August 02, 2023
Technology
1
750
CNDF2023前夜祭 - 玄界灘のクラウドネイティブなデータ基盤運用の実践
CNDF2023前夜祭で話したデータ基盤のSREに関連する話です。
Kazuhiko Yamashita
August 02, 2023
Tweet
Share
More Decks by Kazuhiko Yamashita
See All by Kazuhiko Yamashita
新しい職場の CI が 20 分かかっていたらあなたならどうする?
pyama86
1
1.3k
事業を差別化する技術を生み出す技術
pyama86
4
1.7k
Re:Define 可用性を支える モニタリング、パフォーマンス最適化、そしてセキュリティ
pyama86
9
8.4k
AI時代におけるSRE、 あるいはエンジニアの生存戦略
pyama86
6
1.8k
Tuning GraphQL on Rails
pyama86
2
2k
ttlcacheのここがスゴい
pyama86
1
170
クラウドサービスの 利用コストを削減する技術 - 円安の真南風を感じて -
pyama86
3
640
実践ARMアーキテクチャ移行
pyama86
2
2.5k
リモートワーク時代の守護神 PHP開発者のためのセキュリティ強化術
pyama86
3
1.3k
Other Decks in Technology
See All in Technology
手動からの解放!!Strands Agents で実現する総合テスト自動化
ideaws
3
400
Kiroから考える AIコーディングツールの潮流
s4yuba
1
470
Microsoft Learn MCP/Fabric データエージェント/Fabric MCP/Copilot Studio-簡単・便利なAIエージェント作ってみた -"Building Simple and Powerful AI Agents with Microsoft Learn MCP, Fabric Data Agent, Fabric MCP, and Copilot Studio"-
reireireijinjin6
1
170
激動の時代、新卒エンジニアはAIツールにどう向き合うか。 [LayerX Bet AI Day Countdown LT Day1 ツールの選択]
tak848
0
610
会社もクラウドも違うけど 通じたコスト削減テクニック/Cost optimization strategies effective regardless of company or cloud provider
aeonpeople
2
400
クマ×共生 HACKATHON - 熊対策を『特別な行動」から「生活の一部」に -
pharaohkj
0
230
MCPに潜むセキュリティリスクを考えてみる
milix_m
1
890
Amazon CloudWatchのメトリクスインターバルについて / Metrics interval matters
ymotongpoo
3
290
私とAWSとの関わりの歩み~意志あるところに道は開けるかも?~
nagisa53
1
140
Expertise as a Service via MCP
yodakeisuke
1
160
Wasmで社内ツールを作って配布しよう
askua
0
150
完璧を目指さない小さく始める信頼性向上
kakehashi
PRO
0
120
Featured
See All Featured
Principles of Awesome APIs and How to Build Them.
keavy
126
17k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
130
19k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
50
5.5k
Site-Speed That Sticks
csswizardry
10
730
Building a Modern Day E-commerce SEO Strategy
aleyda
42
7.4k
The Language of Interfaces
destraynor
158
25k
KATA
mclloyd
30
14k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
31
1.3k
Fantastic passwords and where to find them - at NoRuKo
philnash
51
3.3k
How STYLIGHT went responsive
nonsquared
100
5.7k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
507
140k
Being A Developer After 40
akosma
90
590k
Transcript
ݰքṗͷΫϥυωΠςΟϒͳ σʔλج൫ӡ༻ͷ࣮ફ ʙॵ͍ʂʂՆͩʂʂʂૣ͘ϏΞΨʔσϯߦ͖͍ͨʂʂ̍ฤʙ
ࢁԼ!QZBNB (.0ϖύϘٕज़ج൫νʔϜ γχΞɾϓϦϯγύϧ ɹΩϟϯϓɺཱྀߦɺώϧτϯ८ΓɺιϫχΤ८Γ ($1ɺ"JS fl PXɺ1VC4VCɺ%BUB fl PX
ࠓ͢͜ͱ γεςϜ֓ཁ ͦ͜ʹ͋ͬͨ՝ ͲͷΑ͏ʹղܾͨ͠ͷ͔
ϗεςΟϯάࣄۀ &$ࢧԉࣄۀ ϋϯυϝΠυɾͦͷଞࣄۀ
γεςϜߏ Ingest Pipeline DataFlow CloudComposer Extract Analytics ML BigQuery Vertex
AI source monitor Cloud Logging Cloud Monitoring DBσʔλɺϩάΛBigQueryʹू Pub/Sub
σʔλج൫ͷར׆༻ ྨࣅը૾ݕࡧ ਪન ੜ࢈ੑࢦඪͷଌఆ
ͳ͕ͥʁʁʁ
https://note.com/udzura/n/n5c8647d38 ff f ΑΓҾ༻
ͦ͜ʹ͋ͬͨ՝ མͪଓ͚ΔDAGͱຫੑతͳτΠϧ ΤϯυϢʔβʔ͔ΒͷϑΟʔυόοΫͰݦࡏԽ͢Δো ޮͷѱ͍։ൃ
མͪଓ͚ΔDAGͱ ຫੑతͳτΠϧ
γεςϜߏ Ingest Pipeline DataFlow CloudComposer Extract Analytics ML BigQuery Vertex
AI source monitor Cloud Logging Cloud Monitoring DBσʔλɺϩάΛBigQueryʹू Pub/Sub
མͪଓ͚ΔDAGͱຫੑతͳτΠϧ DAG = Directed Acyclic Graph = ༗ඇ८ճάϥϑ https://air fl
ow.apache.org/docs/apache-air fl ow/stable/core-concepts/dags.html ΑΓҾ༻
DAGͷࣦഊཁҼ 1.༷ʑͳλΠϜΞτ 2.࿈ٳʹΑΔσʔλͷܽଛ 3.ιʔεͷσʔλߏͷมߋɺଐੑ 4.มߋʹΑΔΤϯόά
τΠϧͨΔॴҎ 1.༷ʑͳλΠϜΞτ → ϦτϥΠɺλΠϜΞτᮢมߋ 2.࿈ٳʹΑΔσʔλͷܽଛ → ϦτϥΠɺεΩοϓ 3.ιʔεͷσʔλߏɺଐੑͷมߋ → มߋ͓ͯ͠͠·͍
4.มߋʹΑΔΤϯόά → मਖ਼͓ͯ͠͠·͍
None
ॳख SLI/SLOͷࡦఆ
SLO/SLOͷࡦఆ ʮͳʹ͔ΒΔ͔ʁʯ - վળͷ༏ઌॱҐ ʮͲΕ͘Β͍Δ͔ʯ - Ͱվળͷ߹͍ΛܾΊΔ ·ͣࢦඪΛ࡞Δ͜ͱͰɺۦಈͰҙࢥܾఆͰ͖Δ
SLO/SLOͷࡦఆ SREϫʔΫϒοΫ - Ch 13. Data Processing Pipelines ͲͷΑ͏ʹܾΊΔ͔ʁ https://sre.google/workbook/data-processing/
https://cloud.google.com/stackdriver/docs/solutions/slo-monitoring/sli-metrics/data-proc-metrics?hl=ja Google Cloud ΦϖϨʔγϣϯεΠʔτ σʔλॲཧαʔϏε
SLO/SLOͷࡦఆ GrafanaͰ؆୯ʹμογϡϘʔυԽͰ͖Δ
SLO/SLOͷࡦఆ 1.DAGͷޭ 2.DataFlowδϣϒʹ͓͚ΔΤϥʔͷൃੜ 3.DataFlowδϣϒͷεςοϓʹ͓͚Δσʔλͷ
վળͷଧͪख λΠϜΞτͷཁҼͱͳΔɺԆΛऔΓআ͘ɺՁ؍Λৢ͢Δ λΠϜΞτʹ͍ͭͯɺϝτϦΫε͔Βଥͳ͔Λ֬ೝ͢Δ 1. ༷ʑͳλΠϜΞτ
վળͷଧͪख holiday-jpΛ׆༻ͯ͠ɺ࿈ٳ࣌ͷॲཧΛ࣮ BigQuery͔ΒUDFͰ࿈ٳͷ݅ΛఆٛͰ͖ΔΑ͏ʹͨ͠ 2.࿈ٳʹΑΔσʔλͷܽଛ
վળͷଧͪख DebeziumͰDDLΛݕͨ͠ΒSlack௨͢Δ σʔλͷNULLൺ͕૿͑ͨΒ௨͢Δ 3.ιʔεͷσʔλߏɺଐੑͷมߋ https://github.com/pyama86/debezium-ddl-noti fi er/
վળͷଧͪख ຖશDAGΛޕલɺޕޙʹ࣮ߦͯ͠ɺຊ൪࣮ߦΑΓ σʔλͷෆ߹ͳͲΛૣ͘ݕ Ϣχοτςετͷ֦ॆ 4. มߋʹΑΔΤϯόά
࠷͓ۙئ͍ͯ͠ɺTABΛԡ͚ͩ͢ͷࣄͰ͢ ## ೖྗ༷ - Air fl owͷDAGͷϑΝΠϧΛೖྗͱ͠·͢ ## αϯϓϧ࣮1 ```python
{sample1} ``` ## αϯϓϧ࣮2 ```python {sample2} ``` ## ࢦࣔ - ೖྗͱͯ͠͞ΕͨDAGͷςετίʔυΛpytestΛ༻͍࣮͍ͯͯͩ͘͠͞ɻ - Ϋϥεʹ͍ͭͯspymockΛ༻͍ͯϞοΫԽ͍ͯͩ͘͠͞ɻ - 2ͭͷαϯϓϧ࣮Λࣔ͠·͢ɻͦΕΛࢀߟʹ͍ͯͩ͘͠͞ɻ - ͋ͳ͕ͨੜͨ͠ςετͦͷ··ϑΝΠϧʹอଘͯ͠ɺ࣮ߦ͠·͢ɻग़ྗ༰ͷઆ໌ͳͲෆཁͰ͢ɻ ## ೖྗ ϑΝΠϧ໊:{dag_ fi le_path} ```python {dag_ fi le_content} ``` ... $ poetry run python bin/test_generator.py dags/example.py
ΤϯυϢʔβʔ͔Βͷ ϑΟʔυόοΫͰݦࡏԽ͢Δো
ʁʁʁʮࠓͷσʔλ͕ೖͬͯͳ͍Έ͍ͨ ͳΜͰ͚͢ͲɺͳΜ͔͋Γ·ͨ͠ʁʯ
ͳΜͱɺࢹ͕ ΄ͱΜͲͳ͍ͷͰ͋Δ (؆қతͳσʔλ߹ੑͷςετ͕͋Δ͚ͩ)
γεςϜߏ Ingest Pipeline DataFlow CloudComposer Extract Analytics ML BigQuery Vertex
AI source monitor Cloud Logging Cloud Monitoring DBσʔλɺϩάΛBigQueryʹू Pub/Sub
ࢹࣾձ AWSͰECS͍ͬͯΔͱ͜ΖMackerel Container Agentಋೖ Cloud MonitoringͷΞϥʔτఆٛΛSLIʹ߹ΘͤͯTerraformͰ࣮ GCPͱൺͯར༻ن͕খ͍ͨ͞ΊɺશࣾͰར༻͞Ε͍ͯΔMackerelΛར༻͢Δ͜ͱͰ ֶशɺಋೖίετͷݮ
σʔλύΠϓϥΠϯͷࢹ ΰʔϧσϯσʔλͷೖ <source> @type dummy @label @INPUT tag example dummy
{ "accessed_at": "2022-01-01T00:00:00Z", "account_id": 1, "client_id": "12345abcde", "event": "example_event", } </source> https://docs. fl uentd.org/v/0.12/input/dummy ຖඵμϛʔσʔλΛ ύΠϓϥΠϯʹྲྀ͠ɺ ΤϯυϙΠϯτͰࢹ
ޮͷѱ͍։ൃ
γεςϜߏ Ingest Pipeline DataFlow CloudComposer Extract Analytics ML BigQuery Vertex
AI source monitor Cloud Logging Cloud Monitoring DBσʔλɺϩάΛBigQueryʹू Pub/Sub
։ൃڥͱۚͱݖྗ Cloud ComposerͷڥͰ݁߹ςετΛ࣮ߦ͢ΔͨΊʹɺ ςετ༻ͷڥΛຖேࣗಈ࡞ɺຖ൩ࣗಈআ ίετͱνʔϜߏΛؑΈͯɺຖே̎ڥ࡞ͯ͠ɺڞ༻
։ൃڥͱۚͱݖྗ Cloud ComposerͷڥͰ݁߹ςετΛ࣮ߦ͢ΔͨΊʹɺ ςετ༻ͷڥΛຖேࣗಈ࡞ɺຖ൩ࣗಈআ → ো࣌ɺ࣌ؒ֎ʹ͑ͳ͍ ίετͱνʔϜߏ͔Β̎ڥ࡞ͯ͠ɺڞ༻ → ςετͪͷൃੜɺग़ྗ݁Ռͷࠞ߹
I'm Kubernetes Rock Star ΦϯϓϨϛεͷKubernetes্ͰPR͝ͱʹ࣮ߦڥΛ࡞ https://tech.pepabo.com/2023/07/07/data-platform-ci/
ਓͱνΣοΫϦετ DAG A DAG B ࣮ͷ֬ೝΛਓ͕͍ͬͯͨ EmptyOperator( taks_id="external_task_sensor_target )
ྲྀΕͷRuby Rock Star ʮͦΕASTݟͨΒ͍͍͡ΌΜʯ
Abstract Syntax Tree from air fl ow.operators.empty import EmptyOperator EmptyOperator(task_id="child_task3")
% python -m ast example.py Module( body=[ ImportFrom( module='air fl ow.operators.empty', names=[ alias(name='EmptyOperator')], level=0), Expr( value=Call( func=Name(id='EmptyOperator', ctx=Load()), args=[], keywords=[ keyword( arg='task_id', value=Constant(value='child_task3'))]))], type_ignores=[]) grepͰͰ͖ͳ͍͜ͱɺ੩తղੳͳΒղܾͰ͖Δ
͜͜·Ͱͨ͜͠ͱ σʔλج൫ͷ։ൃɺӡ༻ʹ͓͚Δ՝Λ SREͷεΩϧͰվળ
Ҿୀࣦഊʂʂ1
શํҐ࠾༻͍ͯ͠·͢ɻ .-ͬͱΓ͍ͨ͠ɺ43&ͬͱ͓͠Ζ͍ͨ͘͠ ࠷৽ͷ࠾༻ใΛνΣοΫˠ !QC@SFDSVJU
ಥવͰ͕͢ɺ ൧ͷΛ͠·͢
झຯιϫχΤΊ͙Γ https://www.web-soigner.jp/magazine_hakata_gourmet_guide/ Α͏ͦ͜Ԭʂʂ̍
ډञ
ར͖ͷ͔ͨࢤ ٬୯Ձ :4000ʙ6000ԁ ॴ: ᷫԂ ਪਓ: 2 - 4ਓ ਪ͠ɿڕ͔Βͳʹ·Ͱɺ͕ͯ͢ඒຯ͍ɺ
ຊञछྨ͕͋Γ๛ɻ ͦͯ͠ɺWEB༧Ͱ͖Δɻ ࢲతNo.1
͍ͤΜ͍ ٬୯Ձ :6000ʙ8000ԁ ॴ: தऱ ਪਓ: 2 - 8ਓ ਪ͠ɿ҆͘ͳ͍͕ɺԿ৯ͯඒຯ͍ɻ
ΤϏϑϥΠ͕৴͡ΒΕͳ͍σΧ͞ͳͷͱ ͠ඒຯ͍ɻ
ḉ ٬୯Ձ :4000ʙ8000ԁ ॴ: தऱ ਪਓ: 2 - 8ਓ ਪ͠ɿͱʹ͔͘ḉͱञɻ
͋Μ·ΓຊभͰ৯Εͳ͍ḉͩͱࢥ͏
ڕࡾಙ ٬୯Ձ :3000ʙ5000ԁ ॴ: ᷫԂ ਪਓ: 2 - 8ਓ ਪ͠ɿڕͱञ͕͍҆ɻͱʹ͔҆ͯ͘͘ɺඒຯ͍
ୋউ ٬୯Ձ :4000ʙ6000ԁ ॴ: தऱ ਪਓ: 2 - 8ਓ ਪ͠ɿ෦ͷ໊લ͕ϗʔΫεͷબखɻ
ΊͪΌඒຯ͍Θ͚͡Όͳ͍͚Ͳɺ ԿͰ͋Δɻศརɻ
ϥʔϝϯ
Ұ ٬୯Ձ :1000ԁ ॴ: ᷫԂɺതଟ ਪ͠ɿಲࠎofಲࠎ ͍͍ͩͨ৯͏ͱ͖ ᬦᬡͯ͠Δ͔Β ࣸਅͳ͔ͬͨ
໊ౡ ٬୯Ձ :1000ԁ ॴ: തଟɺ໊ౡ ਪ͠ɿͦΜͳʹ͍ڧ͘ͳͯ͘ɺ ɹɹɹόϥϯε͕͍͍ɻ͖
݉ދ ٬୯Ձ :1000ԁ ॴ: ఱਆɺതଟ ਪ͠ɿԬͰྲྀߦͬͯΔ͚ͭ໙ɻ ɹɹɹύϧί͕Ұ൪ฒͳ͍͔
φϯόʔϫϯ ٬୯Ձ :1000ԁ ॴ: ఱਆɺതଟɺᷫԂ ਪ͠ɿ͜ͷลͰ৯ΕΔܥͰҰ൪͖ɻ ී௨ͷϥʔϝϯʹމຑͱߚੜᇙ͍Εͯ ৯Δͷ͕͓͢͢Ί
ͦͷଞ
Τετ ٬୯Ձ :1000ԁ ॴ: Ͳ͜Ͱ͋Δ ਪ͠ɿϩʔΧϧ͏ͲΜνΣʔϯɻ ͏ͲΜࡉ໙ʹωΪଟΊ͕͖ɻ ډञͰɺ৴͡ΒΕͳ͍ίεύ
ؒඈߦ ٬୯Ձ :3000-5000ԁ ॴ: തଟ ਪ͠ɿޫʹೖͬͯΔϗςϧόʔɻ Ҝࢠ͕͍͍ͷͱΏͬ͘ΓͤΔɻ ɹɹɹτϫΠϥΠτͱ͍͏ΧΫςϧ͕͖
ϐΤτϩ ٬୯Ձ :1000-3000ԁ ॴ: Ͳ͜Ͱ͋Δ ਪ͠ɿϥϯνͰͰɺεύʔΫϦϯάͱ ɹɹɹύελorϐβͰܹ҆ඒຯ͍
࠷ߴͷCNDF2023ʹ ͠·͠ΐ͏ʂʂʂ