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
Hashをめぐる冒険
Search
Genki Sugawara
December 08, 2016
Technology
0
3.9k
Hashをめぐる冒険
Codenize.toolsの今までとこれから、とか
Genki Sugawara
December 08, 2016
Tweet
Share
More Decks by Genki Sugawara
See All by Genki Sugawara
Poolにおける足を止めないシステム基盤構築
winebarrel
3
8.3k
Ruby for Iac
winebarrel
0
770
pt-osc的何かとマイグレーションのすりあわせについて
winebarrel
3
1.2k
Elixir Meetup #2 Plugのモジュールを一通り使ってみた
winebarrel
2
1.1k
Other Decks in Technology
See All in Technology
はじめてのSDET / My first challenge as a SDET
bun913
0
140
ソフトウェア開発現代史: なぜ日本のソフトウェア開発は「滝」なのか?製造業の成功体験とのギャップ #jassttokyo
takabow
3
1.9k
”知のインストール”戦略:テキスト資産をAIの文脈理解に活かす
kworkdev
PRO
9
4k
2025年春に見直したい、リソース最適化の基本
sogaoh
PRO
0
450
アセスメントで紐解く、10Xのデータマネジメントの軌跡
10xinc
0
160
「家族アルバム みてね」を支えるS3ライフサイクル戦略
fanglang
4
640
やさしいMCP入門
minorun365
PRO
145
90k
GitHub MCP Serverを使って Pull Requestを作る、レビューする
hiyokose
2
680
50人の組織でAIエージェントを使う文化を作るためには / How to Create a Culture of Using AI Agents in a 50-Person Organization
yuitosato
6
2.7k
Creating Awesome Change in SmartNews
martin_lover
1
170
SRE NEXT CfP チームが語る 聞きたくなるプロポーザルとは / Proposals by the SRE NEXT CfP Team that are sure to be accepted
chaspy
1
550
Vision Language Modelを活用した メルカリの類似画像レコメンドの性能改善
yadayuki
9
1.4k
Featured
See All Featured
How to Think Like a Performance Engineer
csswizardry
22
1.5k
Statistics for Hackers
jakevdp
798
220k
Designing for Performance
lara
607
69k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
331
21k
Typedesign – Prime Four
hannesfritz
41
2.6k
Large-scale JavaScript Application Architecture
addyosmani
512
110k
Why You Should Never Use an ORM
jnunemaker
PRO
55
9.3k
[RailsConf 2023] Rails as a piece of cake
palkan
53
5.4k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
251
21k
Build The Right Thing And Hit Your Dates
maggiecrowley
35
2.6k
Gamification - CAS2011
davidbonilla
81
5.2k
VelocityConf: Rendering Performance Case Studies
addyosmani
328
24k
Transcript
HashΛΊ͙Δݥ Codenize.toolsͷࠓ·Ͱͱ͜Ε͔Βɺͱ͔ Genki Sugawara
$ whoami Author of Codenize.tools github: winebarrel twitter: @sgwr_dts ܙൺणͷํͰಇ͍͍ͯ·͢
Codnize.toolsʹݶΒͣ RubyɾAWSؔ࿈πʔϧΛ࡞͍ͬͯ·͢
ΞδΣϯμ • Codenize.toolsʹ͍ͭͯ • ίʔυԽʹ͍ͭͯ • Codenize.toolsͷ͜Ε͔Β
Codenize.toolsʹ͍ͭͯ
Ξϯέʔτ!
Codenize.tools (ҰԠɺհ) • https://codenize.tools/ • AWSͳͲͷίʔυԽπʔϧू • DatadogMySQLͷπʔϧ͋Γ·͢ • ۀͰࠔͬͨλΠϛϯάͰదʹ࡞
Benefits • ঢ়ଶཧͷ؆қԽ • ΦϖϨʔγϣϯͷ؆қԽ • Gitͱͷ࿈ܞͱϫʔΫϑϩʔ
ྫ: Route53 RoadworkerʹΑΔίʔυԽ hosted_zone "example.com." do rrset "example.com.", "A" do
ttl 300 resource_records( "127.0.0.1" ) end end
Demo or Cut✂
࡞ͷܦҢ 2013/7 Roadworker first commit
࡞ͷܦҢ • ΦϖϛεͰMXϨίʔυ͕ਧͬඈͿ • ChefͬΆ͘DNSΛཧ͍ͨ͠ • Roadworker࡞ • ͍Ζ͍Ζ࡞
Roadworker - Route53 Piculet - Security Groups Kelbim - ELB
Miam - IAM Kumogata2 - CloudFormation Eipmap - Elastic IP Radiosonde - CloudWatch Alarm Meteorlog - CloudWatch Logs Mappru - VPC Route table Bukelatta - S3 Bucket Policy Repol - ECR Repository Policy Cfdef - CloudFront
πʔϧͷϙϦγʔ • εςʔτΛ࣋ͨͳ͍ • ΤΫεϙʔτͰ͖Δ
εςʔτΛ࣋ͨͳ͍ • ϫʔΫϑϩʔ͕γϯϓϧʹͳΔ • ͕͚ɾS3ɾJenkinsෆཁ • ͍ɾRate exceededʢWebαʔϏεʹ͍ͭͯʣ • ࠷ۙɺIAMͷAPIίʔϧ੍ݶ͕ݫͯͭ͘͠Β͍
ΤΫεϙʔτͰ͖Δ • GUIͰ͍͡Γ͍ͨ • AWSউखʹIAMɾSGΛՃ͢Δ
Ͱ͖Δ͚ͩγϯϓϧͳͷΛ ࢦ͍ͯ͠·͢
Roadmap • ALB༻πʔϧͷ࡞ • ࡶEMR༻πʔϧͷ࡞ • PiculetͷϦϑΝΫλϦϯά • CIͷվળʢ͍ɾ͚͜Δʣ
͍͖ͬͯ·͢!
ίʔυԽʹ͍ͭͯ
ίʔυԽʹ͍ͭͯ ͍͍ͩͨ̎छྨ͘Β͍ͷ ҙຯ͕͋Δͱࢥ͍·͢
ίʔυԽʹ͍ͭͯ • ςΩετͰঢ়ଶΛཧ • ႈੑ →ੈؒతʹΞάϦʔ
ίʔυԽʹ͍ͭͯ • ઃఆΛಈతʹ͢Δ →ࢍ൱྆
ίʔυԽʹ͍ͭͯ େ·͔ʹ͚Δͱ… • εΠεΞʔϛʔφΠϑࢮ͢͠ • σʔλهड़ݴޠDSL • ΘΒ͔ઃఆେ͖ • ൚༻ݴޠDSL
جຊతʹલऀ͕ϚδϣϦςΟͩͱࢥ͍·͢
σʔλهड़ݴޠDSL • yamlɾjsonɾhcl • ࠷ۙͩͱtomlʁ
σʔλهड़ݴޠDSL Pros • Մಡੑ͕ߴ͘ͳΔ • ϓϩάϥϚҎ֎ʹॻ͚Δ • ΤϥʔՕॴ͕Θ͔Γ͘͢ͳΔʢͱࢥ͏ʣ
σʔλهड़ݴޠDSL Cons • ϑϩʔ੍ޚͳͲ͕hackyʹͳΔ • yaml++͕Ͱ͖Δ • ςϯϓϨʔτΛ͏ͱຒΊࠐΈεΫϦϓτʹΩϝϥײ
൚༻ݴޠDSL • Ruby…Ҏ֎Կ͔͋Γ·͔͢Ͷ…ʁ • chefɾitamae
൚༻ݴޠDSL Pros • ԿͰͰ͖Δ • γʔϜϨεͳϑϩʔ੍ޚ
൚༻ݴޠDSL Cons • ཚ༻͍͢͠ • Γա͗ΔͱʰઃఆϑΝΠϧʱ͔Βҳ • ϓϩάϥϚҎ֎ʹॻ͖ʹ͍͘ʁ • Θ͔Γʹ͍͘Τϥʔ
• method_missing': undefined local variable or method 'foo'
ίʔυԽʹ͍ͭͯ εΠεΞʔϛʔφΠϑࢮ͢͠ͷ࠷ӈཌྷͰ͋ΔCFn͕ Fn::JoinΛ༻ҙ͍ͯ͠Δͱ͜ΖΛݟΔͱɺ͋Δఔͷಈత͞ʹ ͍ͭͯੈؒతʹΞάϦʔʁ
ίʔυԽʹ͍ͭͯ ͨͿΜΈΜͳΓ͍ͨͷ • ܁Γฦ͠ • ݅ذ • ม • ͪΐͬͱͨؔ͠
• ڥมऔಘͳͲ
ίʔυԽʹ͍ͭͯ ͦͷҰઢΛӽ͑Δͱɺࢍ൱྆ • EC2ΠϯελϯεҰཡ͔ΒDNS࡞ • IPϦετΛμϯϩʔυͯ͠SGઃఆ ͳͲͳͲ
ίʔυԽʹ͍ͭͯ • Codenize.toolsΘΒ͔Ͱ͢ʂ • ͩͬͯˣͷΑ͏ʹॻ͖͍ͨ͠… instances.each do |i| resource_records i.name
+ ".example.com" do • ͱ͍͑Τϥʔʹ͍ͭͯԿͱ͔͍ͨ͠…
গ͕ͦ͠Ε·͢
ؓ ઃఆϑΝΠϧͰಈతͳॲཧΛߦ͏߹ ੩తܕ͖ݴޠ͕͍͍ͯΔؾ͕͠·͢ ઃఆͷద༻ʢධՁʣલʹΤϥʔνΣοΫ͕Ͱ͖ͯ ৺ͷฏԺ͕ΑΓಘΒΕͦ͏ ઃఆͷద༻్தʹϥϯλΠϜΤϥʔ͕ग़ΔͱͭΒ͍
ؓ ͔͠͠ͳ͕Β੩తܕ͖ͷΈࠐΈݴޠ ༨Γݟ͔͚ͳ͍ Golangͷtemplateͱ͔Ͱ {{}} ͷจ๏νΣοΫͯ͘͠Εͯ ؔʹ͢ͷܕ࣮ߦ࣌ͷνΣοΫ…
ؓ AngleScriptͱ͍͏੩తܕ͖ΈࠐΈݴޠ͕͋ͬͨΜͰ͕͢ CScriptBuilder builder; int r = builder.StartNewModule(engine, "MyModule"); if(
r < 0 ) { printf("...\n"); return; }
ؓ ͦΕͳΜͯC++ʢry
ؓ ઃఆϑΝΠϧͰ੩తܕ͖ݴޠΛ͓͏ͱ͓ͬͨΒ Ұ෦ͷؔܕݴޠͷΑ͏ʹ؆ܿͰܕνΣοΫͯ͠Δ͘ΕΔ ΈࠐΈݴޠ͕ඞཁͳΑ͏Ͱ͢ ݚڀʹ͠·͕͢ ͬ͘͞ͱ࣮༻ஈ֊ʹͰ͖ͳͦ͏…
ؓٳ
Codenize.toolsͷ͜Ε͔Β
Codenize.toolsͷ͜Ε͔Β ϩʔυϚοϓઌ΄Ͳ্͛ͨͱ͓Γɻ ͔͕͠͠Ұͭ
ർΕͨ!
ർΕͨ! • CIͭΒ͍ • ٕज़తͳֶͼ͕গͳ͍
CIͭΒ͍ • ओʹAWSͷͰ͢ • CI࣮ࡍͷAWSͰςετ • ͍ • πʔϧಉ࢜ͷڝ߹ •
CIڥ࡞ΓͮΒ͍
͍ ͋Δఔํͳ͍ΜͰ͕͢ • ૣ͘͢ΔˠRate exceededʹҾ͔͔ͬΔ • ࠷ۙɺͳΜ͔ݫ͘͠ͳͬͨΑ͏ͳ… • ฒྻԽ͢Δˠςετ͕ڝ߹͢ΔͷͰΞΧϯτ͍ͬͺ͍ඞཁ •
ݱࡏɺॴ༗ΞΧϯτ̎ݸ • ͜ΕҎ্૿͢ͷͭΒ͍!
πʔϧಉ࢜ͷڝ߹ • roadworker CI • ελϒͱͯ͠ELBͳͲඞཁ • kelbim CI •
ELBશ෦ফ͢ • miam CI • IAM શ෦ফ͢ ಉ͡ΞΧϯτͰฒྻͰςετΔͱഁ໓
CIڥ࡞ΓͭΒ͍ • TravisCIͬͯ·͢ɻମྗඞཁ • σόοά • Rete exceededରࡦ • ԼखʹΫϨσϯγϟϧΛ͓͚ͳ͍
• encrypt key͑Δ͚ͲPRͰಈ͔ͳ͍ • ಛʹmiam͕͍
CIڥ࡞ΓͭΒ͍ APIݺͼ͗͢ഁ࢈ରࡦ์غͯ͠·͢…
CIͭΒ͍ ࠓޙʹ͍ͭͯϞοΫͷςετΛ૿ͦ͏ͱࢥͬͯ·͕͢ ͬͱ͍͍ιϦϡʔγϣϯ͋Δͱ͍͍ͳ͊ |ωɾ`ʣνϥ
ٕज़తͳֶͼ͕গͳ͍ Codenize.toolsͷΈ
Codenize.toolsͷΈ Apply • API→Hash • DSL→Hash • Hashಉ࢜Λൺֱ • ࠩΛຒΊΔAPIΛͨͨ͘
Codenize.toolsͷΈ Export • API→Hash • Hash→DSL
ͪΐ͏͔ΜͨΜΜ ʢ಄ΛΘͳ͍ʣ
ͩΔ͍ • ຖಉ͡Α͏ͳΫϥεΛॻ͘ͷ͕ͩΔ͍ • DSLΫϥεॻ͘ͷ͕ͩΔ͍ • όϦσʔγϣϯ͕ͩΔ͍
ରͩΔ͍ • DSLʹ͍ͭͯઐ༻ͷϥΠϒϥϦΛॻ͍ͨ • https://github.com/winebarrel/dslh • DSL→HashɾHadh→DSLͷ૬ޓޓ͕Մೳ • ͔͠͠όϦσʔγϣϯ͕Ͱ͖ͳ͍…
ରͩΔ͍ • yamlͷόϦσʔλʔ͋ͬͨ • Kwalify type: map mapping: "name": type:
str required: yes "age": type: int
ରͩΔ͍ • Dslh͕ੜͨ͠Hashʹରͯ͠όϦσʔγϣϯ • όϦσʔγϣϯ࣮Ͱ͖ͨ • ͋Εɺ͜ΕΖΖࣗಈԽͰ͖ΔΜ͡ΌͶʁ
https://github.com/ winebarrel/codenize
codenize • Codenize.toolsͷܗΛੜ • API→Hashͷ࣮Λ͢Ε͍͍ͩͨͰ͖Δ • Ruby DSLͷ࣮ෆཁ • όϦσʔγϣϯͰ͖Δ
Demo
࣮ྫ ecman - EasyCronͷίʔυԽπʔϧ - https://github.com/winebarrel/ecman/commit/ 941555eee0ca59894efc9b3b3b52e8e66b5a63fa
Έͳ͞ΜͲΜͲΜ Codenize͢ΔͱΑ͍ͱ ͓͍·͢
࠷ޙʹ PRɾIssue͓ͪͯ͠·͢! • ຊޠͰେৎͰ͢ • όάͷ߹ɺΤϥʔڥͱ࠶ݱίʔυ͕͋Δͱॿ͔Γ·͢
͓ΘΓ https://suzuri.jp/winebarrel/591154/t-shirt/s/white