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
現場の課題を解決するために大事にしていること
Search
Arashi
August 03, 2023
Technology
0
650
現場の課題を解決するために大事にしていること
自社プロダクトの構想から開発・運用・改善の一連の流れを経験しました。
その中で、エンジニア組織としてビジネスインパクトを最大限に創出するために、何をなぜ大切にしているかをまとめました。
Arashi
August 03, 2023
Tweet
Share
Other Decks in Technology
See All in Technology
Windows Server 2025 Pay as you Go ライセンスを試す
murachiakira
0
120
オープンソースAIとは何か? --「オープンソースAIの定義 v1.0」詳細解説
shujisado
13
1.7k
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
1
180
電話を切らさない技術 電話自動応答サービスを支える フロントエンド
barometrica
2
1.5k
静的解析で実現した効率的なi18n対応の仕組みづくり
minako__ph
2
2k
Is Go A Good Language to Build Compilers?
kennethanceyer
0
110
Entra ID の基礎(Japan Microsoft 365 コミュニティ カンファレンス 2024)
murachiakira
1
220
Postman Flowsで作るAPI連携LINE Bot
miura55
0
200
'24/11月開催 Visual Studio CodeのDev Containersを使って開発環境構築してみよう
devops_vtj
0
110
Storybook との上手な向き合い方を考える
re_taro
5
4.1k
EventHub Startup CTO of the year 2024 ピッチ資料
eventhub
0
130
Entra ID の多要素認証(Japan Microsoft 365 コミュニティ カンファレンス 2024 )
murachiakira
0
190
Featured
See All Featured
Into the Great Unknown - MozCon
thekraken
33
1.5k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
42
9.3k
Rails Girls Zürich Keynote
gr2m
94
13k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
38
1.8k
Being A Developer After 40
akosma
87
590k
Measuring & Analyzing Core Web Vitals
bluesmoon
4
140
Documentation Writing (for coders)
carmenintech
65
4.4k
What's in a price? How to price your products and services
michaelherold
243
12k
Happy Clients
brianwarren
98
6.7k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
329
21k
5 minutes of I Can Smell Your CMS
philhawksworth
202
19k
Building Better People: How to give real-time feedback that sticks.
wjessup
364
19k
Transcript
ݱͷ՝Λղܾ͢ΔͨΊʹ େࣄʹ͍ͯ͠Δ͜ͱ CloudNative Days Fukuoka 2023/08/03 @_arstkn 1
ࣗݾհ ໊લ : ∁ ཛྷ ॴଐ : QUANDO,Inc. ৬ :
ςοΫϦʔυ 𝕏 : _arstkn ΫΞϯυҰے7ʂ 2
ݱʹಛԽͨ͠ϦϞʔτίϛϡχέʔγϣϯπʔϧ SynQ Remote ʮ͋ΕɾͦΕɾ͜Εʯ͕؆୯ʹΘΔ - ඞͣಉ͡ө૾ΛࢀՃऀશһ͕ݟΔ - ը໘ΛλοϓʢΫϦοΫʣͰϙΠϯλΛදࣔ ௨৴ڥ͕ѱͯ͘Ͱ͖ΔݶΓߴը࣭ -
શһ͕ݟ͍ͯΔө૾ͷΈ͕ ৴͞ΕΔΑ͏੍ޚ ΞϓϦΠϯετʔϧ͚ͩͰར༻Մೳ - ಛघͳෆཁ - ΞϓϦΛΠϯετʔϧ͢Δ͚ͩ 3
ࠓ͍ͨ͜͠ͱ 4
5 ݱʢΤϯυϢʔβʔʣͷ՝ղܾʹ ΠϯύΫτ͕͋Δͱ͜Ζʹ ϦιʔεΛ͔͚Δ͜ͱ͕Ͱ͖ΔΑ͏ʹߏங͢Δ͜ͱ େࣄͩͱࢥ͏͜ͱ
ϦϦʔεॳ ΤϯδχΞͷເͱر͕٧·͍ͬͯͨ 6
ΤϯδχΞͷເͱر ٕज़తح৺ 7
ͲΜͳເͱر͔ͩͬͨ ϕϯμʔϩοΫΠϯΛආ͚ΔͨΊOSSΛͬͯ ϚΠΫϩαʔϏεͰ࡞Γ͍ͨ 8
ٕज़ελοΫ 9 Kubernetes ίϯςφΦʔέετϨʔ γϣϯΛϕϯμʔʹґଘͤ ͣʹӡ༻͍ͨ͠ ElasticSearch ϩάج൫Λϕϯμʔʹґଘ ͤͣʹӡ༻͍ͨ͠
10 ηϧϑϚωʔδυʹ͕͗ͨͨ͢͠Ίʹ ӡ༻͢Δ͜ͱʹίετ͕͔͔͍ͬͯͨ
ݱͷ՝ 11 ߴྸԽ ਓखෆ ಠΓཱͪʹ ͕͔͔࣌ؒΔ
ٕज़ελοΫ 12 Kubernetes ίϯςφΦʔέετϨʔ γϣϯΛϕϯμʔʹґଘͤ ͣʹӡ༻͍ͨ͠ ElasticSearch ϩάج൫Λϕϯμʔʹґଘ ͤͣʹӡ༻͍ͨ͠
Kubernetesฤ 13
14 ϝΠϯͷػೳʹؔͯ͠ KubernetesͰͷӡ༻ΛࣙΊͨ ݱࡏ
Kubernetesӡ༻ʹ͓͚Δ࠴ ίϯςφԽ͞ΕͨΞϓϦέʔγϣϯ͕ಈ͘ͱ͍͏͜ͱΛ อূͯ͘͠ΕΔΘ͚Ͱͳ͍ 15 Kubernetes͕֤ίϯςφΛͲ͏ಈ͔͔͢Λ ࣗࣾͷͰదʹઃܭ͢Δඞཁ͕͋Δ
దʹઃܭ͢Δ͜ͱ͕Ͱ͖Ε ϕϯμʔϩοΫΠϯΛආ্͚ͨͰ ίϯςφΛಈ͔͢͜ͱ͕Մೳ 16
ฐࣾϦϦʔεॳͳ͘ίϯςφ͕ಈ͍͍ͯ·ͨ͠ 17
1ਓͷઋਓ͕Kubernetesͷӡ༻Λʹͳͬͯ͘Ε͍͔ͯͨΒ 18
͜ͷ··্ख͍͔͘͘ͳͱࢥ͍ͬͯͨઌʹɺ ͜ͷઋਓ͕৫ΛΕΔ͜ͱʹͳΓ·ͨ͠ 19
৽͍͠ՁͷఏڙͷͨΊ ৽نػೳͷ։ൃͱϦϦʔε ຖճόλόλɾ෮چʹ͕͔͔࣌ؒΔ 20
Kubernetes → Azure App Service 21 Azure App Service Web
ΞϓϦ API Λ݅ʹ߹ΘͤͯਝʹߏஙɺσϓϩΠɺεέʔϦϯάͰ͖· ͢ɻίϯςφʔɺWindows ·ͨ Linux ্Ͱ࣮ߦ͞Ε͍ͯΔ .NETɺ .NET Coreɺ Node.jsɺ Javaɺ Pythonɺ·ͨ PHP Λૢ࡞Ͱ͖·͢ɻ1 ͋ͨΓ 600 ԯ݅Λ͑ΔཁٻΛॲཧ͢Δ৴པੑʹ༏Εͨϑϧ Ϛωʔδυ αʔϏεΛ͏͜ͱ ͰɺΤϯλʔϓϥΠζ Ϋϥεͷݫ͍͠ύϑΥʔϚϯεɺηΩϡϦςΟɺ͓Αͼί ϯϓϥΠΞϯεཁ݅ʹରԠͰ͖·͢ɻ
22 ίϯςφΦʔέετϨʔγϣϯͱ͍͏࠴Λ AzureʹݞΘΓͯ͠Β͏ ͭ·Γ
CDͷҠߦ 23 App Service × Container Registry Azure Container Registry
ͯ͢ͷ OCI ՌΛαϙʔτ͢ΔɺDocker Πϝʔδͱ Open Container Initiative (OCI) ΠϝʔδͷϨδετϦɻ
CDͷҠߦ App ServiceͷҙͷContainer RegistryͷλάΛࢹͯ͠ มߋΛݕ͢Δͱࣗಈతʹ৽͍͠DockerΠϝʔδΛσϓϩΠ͢Δػೳ → Ϗϧυͨ͠Πϝʔδʹରͯ͠versionλάͱlatestλάΛ͚ɺ Container RegistryʹPush͠ɺlatest͕ߋ৽͞Εͨ߹ʹσϓϩΠ͞ΕΔ
Α͏ͳઃఆΛߦ͍ӡ༻͠·ͨ͠ɻ 24
25 ӡ༻ͷෛՙ͕ܰݮ ϏδωεϩδοΫʹूத ։ൃͷεϐʔυ্͕
ͳͥઋਓʹґଘ͔ͨ͠ 26
27 ߏͱͯ͠ ίετ͕͔͔Δ෦ Ձఏڙ͍ͯ͠Δ෦ ࢿ͕ૄ͔ʹͳΔ ࠷ѱӡ༻ͷةػʁ
ݱࡏͷKubernetesͷར༻༻్ 28
29 ըػೳͷͨΊʹར༻ ར༻༻్
௨ػೳ WebRTCΛར༻࣮ͯ͠ WebRTC࣮ίετ͕ߴ͍ → Twilio Programmable VideoΛར༻ 30
Composition API Twilio Programmable VideoͷըੜAPI ύϒϦογϡ͞Εͨө૾ͱԻͷه͔Β ҙͷө૾ͱͦͷஔΛܾΊ ҙͷԻͱ݁߹͠ಈըΛੜ
31
ϙΠϯλػೳ WebRTCͷσʔλνϟωϧΛհͯ͠ ʮࠓͲ͜Λࢦ͍ࠩͯ͠Δ͔ʯ ͱ͍͏ใͷΓऔΓΛ࣮ͯ͠ݱ 32
Composition APIͰ݁߹Ͱ͖Δͷ ө૾ͱԻͷΈͰσʔλνϟωϧͦͦه͞Εͳ͍ → ʮ͋ΕɾͦΕɾ͜Εʯͱݴ͍ͳ͕Βձͯ͠ϙΠϯλ͕ه ͞Ε͍ͯͳ͚Εɺ͋ͱ͔Βݟͨ࣌͠ʹԿʹ͍ͭͯ͠ ͍ͯΔ͔͕͔Βͳ͍ 33
Ͳ͏͍ͬͯΔ͔ botΛ௨ʹࢀՃͤ͞ ԾͷϒϥβʹϨϯμϦϯάͤͨ͞ͷΛ GstreamerͰऩ 34
Kubernetesʹͨ͠ཧ༝ ө૾ͷॲཧΛ͢ΔͨΊॏ͘ ͍ͭ࢝·Γ͍ͭऴྃ͢Δ͔͔Βͳ͍ॲཧ ΛޮΑ࣮͘ߦͰ͖ͦ͏͔ͩͬͨΒ 35
ElasticSearchฤ 36
ϩάج൫ӡ༻ͷ՝ ϩάج൫ʹৗʹେྔͷϦΫΤετ͕ඈΜͰ͖ͯ ϚγϯϦιʔεཧ͕ෳࡶ 37
ฐࣾͷ߹ Kubernetes্ͰElasticSearchΛӡ༻͍ͯͨ࣌͠ʹ શͯͷίϯςφ͕Pending → શͯͷαʔϏεͷϩάΛऔಘ͠Α͏ͱ͍ͯͨͨ͠Ί ɹ ElasticSearch͕ϝϞϦΛ৯͍௵͠
ɹ ଞͷίϯςφΛىಈͰ͖ͳ͍ 38
͋͘·Ͱϩάج൫Λӡ༻͢Δ͜ͱ͕తͰͳ͍ 39
ElasticSearch → Azure Application Insights 40 "[VSF"QQMJDBUJPO*OTJHIUT "QQMJDBUJPO*OTJHIUT"[VSF.POJUPSͷ֦ுػೳͰ͋ΓɺΞϓϦέʔγϣϯ ύϑΥʔϚϯεࢹ "1.
ػೳΛఏڙ͠·͢ɻ"1.πʔϧɺ࣍ͷํ๏Ͱɺ ։ൃɺςετɺӡ༻ڥ͔ΒΞϓϦέʔγϣϯΛࢹ͢Δͷʹཱͪ·͢ɻ
App Insightsͷ౷߹ 41 "QQMJDBUJPO*OTJHIUTΛ&OBCMFEʹ͠ Ͳͷ"QQ*OTJHIUTʹϩάΛૹ৴͢Δ͔બ͢Δ͚ͩͰઃఆ͕ྃ
ΞϓϦέʔγϣϯϚοϓ ෳͷApp Service͔ΒಉҰͷApplication Insightsʹ ϩάΛૹ৴͢ΔΑ͏ʹઃఆ͢Δ͚ͩ 42
τϥϯβΫγϣϯͷݕࡧ 43
ϕϯμʔϩοΫΠϯΛڐ༰ͨ͜͠ͱʹΑΓ ϩάͷऩू͔Βੳػೳͷߏங·ͰϫϯετοϓͰྃ εϐʔυײखܰ͞ͳͲͷԸܙ 44
45 ϩάج൫ͷӡ༻ʹ಄Λ·͢ඞཁੑ͕ݱ ϏδωεϩδοΫʹूத ։ൃͷεϐʔυ্͕
͜͜·Ͱ 46
ϕϯμʔʹґଘ͠ͳ͍ ՁఏڙͰͳ͍෦Ͱ ӡ༻ͷͨΊʹϦιʔεΛׂ͍ ͍ͯͨߏ ϕϯμʔʹґଘ ӡ༻ʹඞཁͳϦιʔεΛܰݮ ػೳͷ։ൃʹϦιʔεΛूத Ͱ͖ΔΑ͏ʹߏΛมߋ 47
ٕज़తح৺ʹΛ͚ΔͷͰͳ͘ ݱͷ՝ʹΛ͚Δ 48
OSSಋೖͷऔΓΈ 49
ԿΛ͠Α͏ͱ͍ͯ͠Δ͔ʁ Relation-Based Access ControlʢReBACʣΛ͢ΔͨΊʹ OpenFGAͱ͍͏OSSΛ࠾༻͠Α͏ͱ͍ͯ͠·͢ɻ 50
OpenFGAͱ • OpenFGAReBACΛ؆୯ʹߏங͠ར༻Ͱ͖ΔOSS • CNCFͷSandBoxͷϓϩδΣΫτ • GoogleͷೝՄج൫Ͱ͋ΔZanziberͷจΛͱʹ Auth0͕࣮͠OSSͱͯ͠ެ։ 51
52 ݱ͔Βͷχʔζ͕͋Δ ReBACΛ࣮ݱ͢ΔͨΊͷαʔϏε͕ͳͦ͞͏ ͳͥOpenFGAʁ
ݱͷχʔζ 53 🏭 ݱ 👤 Ϣʔβʔ 👤 Ϣʔβʔ 🏭 ݱ
👤 Ϣʔβʔ ऀ ࢀՃऀ ऀ ήετ
OpenFGAͰͷReBAC 1. DSLͰσʔλϞσϧΛఆٛ 2. Relation TupleΛ࡞ 3. ݖݶΛ͍࣋ͬͯΔ͔Ͳ͏͔ΫΤϦ 54
DSLͰσʔλϞσϧΛఆٛ 55
Relation TuppleΛ࡞ 56
ݖݶΛ͍࣋ͬͯΔ͔Ͳ͏͔ΫΤϦ 57
ΫΤϦͷྫ • anneࢿྉZʹରͯ͠ӾཡݖݶΛ͍࣋ͬͯΔ͔ʁ • anne͕ӾཡݖݶΛ͍࣋ͬͯΔࢿྉʁ 58
anneZʹରͯ͠ӾཡݖݶΛ͍࣋ͬͯΔ͔ʁ 59
anne͕ӾཡݖݶΛ͍࣋ͬͯΔࢿྉʁ 60
OpenFGAͷظ • ؔͱσʔλͷ͕ਐΉ͜ͱͰ֤ϚΠΫϩαʔϏεͷ࣮ ΑΓσʔλʹରͯ͠ूதͰ͖Δ • DSLͰݖݶϞσϧΛҰݩཧͰ͖ΔͷͰɺݖݶͷʹΑ ΔηΩϡϦςΟϦεΫܰݮ 61
ݱͷ՝Λղܾ͢Δ্Ͱ ඞཁੑΛײ͡Δ߹ ੵۃతʹνϟϨϯδ͍ͯ͘͠ελϯε 62
Ϣʔβʔͷ՝ղܾʹΠϯύΫτ͕͋Δͱ͜Ζʹ ϦιʔεΛ͔͚Δ͜ͱ͕Ͱ͖ΔΑ͏ʹ ߏங͢Δ͜ͱ͕େࣄͩͱࢥ͍ͬͯ·͢ 63
͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠ 64