Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
AWS Glueでリプレースしてみた/gunosy-use-glue
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
aibou
December 25, 2017
Programming
1.1k
4
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
AWS Glueでリプレースしてみた/gunosy-use-glue
aibou
December 25, 2017
More Decks by aibou
See All by aibou
LegalForceの契約データを脅かすリスクの排除と 開発速度の向上をどうやって両立したか
aibou
0
7.4k
LegalForce社での全文検索インフラ活用事例
aibou
0
150
SRE Lounge #7 Gunosy版「SREミッション」策定
aibou
9
7.1k
その接続先情報はどこに
aibou
0
3.9k
gunosy-beer-2016-07-27
aibou
1
860
Other Decks in Programming
See All in Programming
スマートフォンでモールス信号を送受信する 〜スマートフォンのLEDとカメラで作る光通信の設計と実装〜
atsuki_seo
0
210
ハーネス設計入門 〜 基礎知識の整理から実務へのステップアップ 〜
kinopeee
19
19k
JRuby: Past, Present, and Future
headius
0
210
Androidだけじゃない、DroidKaigiで広がった私の技術スタック
akkeylab
0
100
SONY CISC-NEWS NWS-1750 + NWB-225 フレームバッファの NetBSD/news68k ドライバ実装 / OSC2026Hiroshima
tsutsui
0
160
速く作れる。その次は、速く確かめられる開発へ 〜AIネイティブ開発を支える、Shift Down〜 / Can build fast. Next, moving to development where we can verify fast.
rkaga
8
5.2k
GitHubハンズオン講座 — 実務レベルのチーム開発のフローを身につけよう
junhat6
0
110
Streamlitで実現する自然言語データアプリ開発
ayumu_yamaguchi
1
330
海上で動くGoサーバー: goroutineとchannelでさばく航行データストリーム
atsuki_seo
0
1k
巨大モノリシックアプリ モダン化大作戦
ktcryomm
1
1.2k
iOSDCのペンライトを自動制御したい!
akkeylab
0
200
FreeBSDでZabbixを動かす
kenkino
0
340
Featured
See All Featured
The browser strikes back
jonoalderson
0
1.7k
Optimising Largest Contentful Paint
csswizardry
37
4k
Thoughts on Productivity
jonyablonski
76
5.4k
Collaborative Software Design: How to facilitate domain modelling decisions
baasie
1
330
Money Talks: Using Revenue to Get Sh*t Done
nikkihalliwell
0
510
Rebuilding a faster, lazier Slack
samanthasiow
85
9.7k
Building an army of robots
kneath
307
47k
We Are The Robots
honzajavorek
0
380
Ethics towards AI in product and experience design
skipperchong
2
400
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
141
35k
Bioeconomy Workshop: Dr. Julius Ecuru, Opportunities for a Bioeconomy in West Africa
akademiya2063
PRO
1
380
New Earth Scene 8
popppiees
4
2.6k
Transcript
AWS GlueͰ ϦϓϨʔεͯ͠Έͨ גࣜձࣾGunosy ։ൃຊ෦ ྄ี
͓·͑ͩΕ • @aibou • SREνʔϜͰܯۀͬͯ·͢ • ϏοάσʔλະܦݧͰ͢ • Ξϝϑτ؍ઓ͕͖Ͱ͢
ۀ༰ • άϊγʔɾࠂαʔόͷӡ༻ • ࣗಈԽɾলྗԽΛతʹʑ׆ಈ • ίʔυԽ(codenize.tools, terraform) • ʮ͜ΜʹͪΘʔ
ܯͷͷͰ͕͢ʔʯ • OpsWorks, Kinesis3ܑఋ • X-Ray͍͍ͨͳ͊ɾɾɾ
࣍ • GunosyͰGlueΛಋೖͨ͠ʢ͔͠ยखؒͰʣ • AthenaύʔςΟγϣϯ࡞όονΛGlueʹஔ • ࣗલETLόονΛGlueʹஔ • DynamoDBͷϑΥʔϚοτมΛGlueͰ࣮ݱ
ᶃAthenaύʔςΟγϣϯ࡞ όονΛGlueʹஔ
άϊγʔͷࠂϩάͷྲྀΕ ʢͬ͘͟Γʣ CBUDITFSWFS &.3 4QBSL "1*TFSWFST PS "UIFOB ৴ީิ 'JSFIPTF
AthenaͱRedshiftͷ͍͚ • Athena • ՄࢹԽ༻ • ԕ͍աڈظؒͷूܭͰར༻ • Redshift •
ϩδοΫ༻ • ۙͷσʔλ͔Β৴ީิͷੜ • ετϨʔδ༻ϑϧʹͳΔͱRedshiftೖΕସ͑ΔରԠ • ʹݹ͍σʔλΛࣺͯΔ(S3ʹόοΫΞοϓ͋Γ)
Athena • fluent-plugin-s3ͰϩάΛS3ʹΞοϓϩʔυ • tag͝ͱʹ(imp, click) • hive friendly (
/click/year=2017/... ) ͳkeyͰ • ఆ࣌όονͰADD PARTITION͢Δ • MSCK REPAIRͩͱ࣮͕͕͔͔֬ͩ࣌ؒΔ • MSCK REPAIR ≒ 2h, ADD PARTITION < 1s
Athena ύʔςΟγϣϯ࡞όον • ࣾͰԿނ͔ʮશࣗಈ͍͋΅͏ʯͱݺΕ͍ͯΔ • CloudWatch Events + Lambda •
LambdaJava • codenize-tools/monosasi ͰDSLԽ • s3://bucket/path/to/year=2017/month=11/day=24/hour=18/ • ཁ͕͋Είʔυެ։͠·͢ʢ͕ɺGlueͷํ͕ศརΑͶɾɾɾ • FirehoseϑΥʔϚοτʹରԠՄೳ
Glue DataCatalog • AthenaLambdaͰRate limit • ҙࣝͯͣ͠Β͞ͳ͍ͱ͕࣌ؒूத͢Δ • εΩʔϚཧͱCloudWatch Eventsͷཧਏ͍
• ݱঢ়45ςʔϒϧ͙Β͍ɻطʹ͠ΜͲ͍
to Glue Crawler & DataCatalog "1*TFSWFST "-5&35"#-& "%%1"35*5*0/
ॴײ • Lambda͕ෆཁʹͳͬͨʢͬͨͶʣ • 1ΫϩʔϥͰෳͷSource DataStoreʹରԠ • Ϋϩʔϥ͕ཚཱ͠ͳͯ͘ॿ͔Δ • ϩάྔ͕ଟ͍ͱΫϩʔϦϯάʹ͕͔͔࣌ؒΔ
• ͍·ͷͱ͜Ζ6͔͔࣌ؒͬͯΔ
GlueͰͰ͖ͳ͔ͬͨ͜ͱ • ҟϦʔδϣϯͷAthenaʹAdd table • ઌड़ͷύʔςΟγϣϯՃόονͰରԠ • طଘͷAthena Tableʹରͯ͠DataCatalogͷద༻ •
database/tableͷ࡞Γ͠ʢӨڹ͋ΔͷͰ·ͩʣ • Glueͷςʔϒϧ໊ͷࢦఆɾมߋ • ಛҟͳϑΥʔϚοτʹରԠෆՄ ཌ
ᶄࣗલETLόονΛGlueʹஔ
ϩάͱϚελʔͷJOIN • ϩάσʔλɿS3 ɹɹ Redshift • imp, click etc •
ϚελʔσʔλɿRDS • campaign, creative etc • ʮAthenaɾRedshiftͰJOIN͍ͨ͠ʯ • => Digdag + EmbulkͰରԠ͍ͯͨ͠
Embulk + digdag (+ docker) "-5&35"#-& "%%1"35*5*0/
to Glue Crawler & Glue ETL PSFHPOSFHJPO UPLZPSFHJPO SFQMJDB ᶃ
ᶄ ᶄͷNFUBEBUBͰ BEEUBCMF ᶃͷNFUBEBUBͰ &5-
Additional • statsςʔϒϧɿຖͷूܭࡁΈσʔλ • ςʔϒϧશߦͰͳ͘ຖͷσʔλ͚ͩUpload • ETLͷJobͰFilter transform classΛ༻
TUBUTUBCMF TQBUIUPZFBSNPOUIEBZ
Filter transformer class def filter_function(dynamic_record): if dynamic_record["date"].strftime("%Y-%m-%d") == yesterday.strftime("%Y-%m-%d"): return
True else: return False filtered0 = Filter.apply(frame=datasource0, f=filter_function, transformation_ctx="filtered0")
GlueͰΑ͔ͬͨͱ͜Ζ • ETL͕Glue͚ͩͰ݁͢Δ • Lambdaෆཁ • Digdag + Embulkෆཁ •
αʔό(ECS)ෆཁ • ਓ͕ؒςʔϒϧΛྻڍ͠ͳ͍͍ͯ͘ • ࠓ·ͰLambdaͱ͔EmbulkͷઃఆϑΝΠϧͰશ෦ࢦఆͯͨ͠
GlueͰΑ͘ͳ͔ͬͨͱ͜Ζ • CrawlerͰͳ͘ETLଆͰfilter͍ͯ͠Δ • ൃߦ͞ΕΔSQL SELECT * FROM hoge_stats; •
CrawlerଆͰWHEREઃఆ͍ͨ͠ • 18࣌ؒͰऴΘΒͳ͍Job (3ԯϨίʔυ) • JobͷΫϩʔϯ͕Ͱ͖ͳ͍ʢΘΓͱٸ͗Ͱ΄͍͠ʣ • ͍ͭ͘ࣅͨΑ͏ͳͷΛ࡞Δͷʹख͕ؒ
ᶅDynamoDBͷϑΥʔϚοτมΛ GlueͰ࣮ݱ (ϦϓϨʔεͰͳ͍͚Ͳ)
DynamoDBͷσʔλΛੳ͍ͨ͠ • άϊγʔͷλϒฒͼใ • Ͳ͏͍ͬͨϢʔβ͕Ͳ͏͍͏λϒΛϑΥϩʔͯ͠Δ͔ • ಛఆ݅ͰࣗಈՃ͞ΕΔλϒ • ਖ਼͘͠ػೳ͍ͯ͠Δ͔ •
ͲΕ͙Β͍͍Δͷ͔ • ͝ͱʹूܭ͍ͨ͠
DynamoDBͷFull dumpͱFormat • DataPipelineͰFull dump • DynamoDB Stream ࠓޙΔʢئʣ •
σʔλهड़ࢠ -> JSON • ͦͷ··ਏ͍ • (ͳΜͱ͔ͯ͠) convert͢Δ { "Item": { "Age": {"N": "8"}, "Colors": { "L": [ {"S": "White"}, {"S": "Brown"}, {"S": "Black"} ] }, "Name": {"S": "Fido"}, "Vaccinations": { "M": { "Rabies": { "L": [ {"S": "2009-03-17"}, {"S": "2011-09-21"}, {"S": "2014-07-08"} ] }, "Distemper": {"S": "2015-10-13"} } }, "Breed": {"S": "Beagle"}, "AnimalType": {"S": "Dog"} }
Data Pipeline + Glue ETL Amazon DynamoDB %BUB1JQFMJOF w .BQBQQMZ
w UP%'GSPN%'
ETLͷ࣮ݱʹ͋ͨͬͯ • Built-in Transformer class͚ͩͰͳΜͱͳΒͳ͍͕࣌͋Δ • ΑΓෳࡶͳFilterɾMap࣌ • toDF &
fromDFΛ͏ʢී௨ͷpysparkʣ • job bookmarkΛ͏࣌ try & except ඞਢ • toDFͰίέΔʢύʔςΟγϣϯʹ·ͭΘΔͬΆ͍ • job bookmarkͷϢʔεέʔε͕·ͩΘ͔ͬͯͳ͍
ϋϚΓϙΠϯτ • Built-in TransformerΫϥεͷίʔϧόοΫؔͰൃੜͨ͠ExceptionѲΓͭͿ͞ΕΔ • Exception͕ൃੜͨ͠dynamic recordഁغ͞Εɺ࣍ͷϨίʔυॲཧ͕ҠΔ • σόοά͢ΔͳΒίʔϧόοΫؔશମΛtry-except •
RDSΛSource DataStoreʹ͢Δ߹Subnetʹҙ • ͍ΘΏΔʮLambda in VPCʯ • ඞͣNAT Gateway͔VPC EndpointͰS3ʹΞΫηεͰ͖ΔΑ͏ʹ͓ͯ͘͠(Scriptͷ DL) • NWઃఆөʹԿނ͔30͙Β͍͕͔͔࣌ؒΔ
Glueͷॴײ • ࣗલETLόονશ෦ΛGlueʹஔ͖͍͑ͨ • DataCatalogͱ͔࠷ߴ • ͕ɺݱঢ়ͩͱ৭ʑਏ͍ • ࣮ߦ࣌ؒɾಥવࢮɾ։ൃࠔ
Glueʹର͢Δཁ • ԿΑΓߴԽ • DynamoDBΛSource DataStoreͷରʹ • JobεΫϦϓτͷόʔδϣϯཧ • JobͷσόοάΛ༰қʹ(Τϥʔ͕ѲΓͭͿ͞ΕΔ)
• Built-in Transform Classʹ͍ͭͯυΩϡϝϯτͷॆ࣮ • Crawler & ETL jobͷࢹ΄͍͠ • ScalaͰॻ͔ͤͯ͘Ε • EMR(Spark)ͷࢿ࢈Λྲྀ༻͍ͨ͠