Slide 1

Slide 1 text

HashΛΊ͙Δ๯ݥ Codenize.toolsͷࠓ·Ͱͱ͜Ε͔Βɺͱ͔ Genki Sugawara

Slide 2

Slide 2 text

$ whoami Author of Codenize.tools github: winebarrel twitter: @sgwr_dts ܙൺणͷํͰಇ͍͍ͯ·͢ Codnize.toolsʹݶΒͣ RubyɾAWSؔ࿈πʔϧΛ࡞͍ͬͯ·͢

Slide 3

Slide 3 text

ΞδΣϯμ • Codenize.toolsʹ͍ͭͯ • ίʔυԽʹ͍ͭͯ • Codenize.toolsͷ͜Ε͔Β

Slide 4

Slide 4 text

Codenize.toolsʹ͍ͭͯ

Slide 5

Slide 5 text

Ξϯέʔτ!

Slide 6

Slide 6 text

Codenize.tools (ҰԠɺ঺հ) • https://codenize.tools/ • AWSͳͲͷίʔυԽπʔϧू • Datadog΍MySQLͷπʔϧ΋͋Γ·͢ • ۀ຿ͰࠔͬͨλΠϛϯάͰద౰ʹ࡞੒

Slide 7

Slide 7 text

Benefits • ঢ়ଶ؅ཧͷ؆қԽ • ΦϖϨʔγϣϯͷ؆қԽ • Gitͱͷ࿈ܞͱϫʔΫϑϩʔ

Slide 8

Slide 8 text

ྫ: Route53 RoadworkerʹΑΔίʔυԽ hosted_zone "example.com." do rrset "example.com.", "A" do ttl 300 resource_records( "127.0.0.1" ) end end

Slide 9

Slide 9 text

Demo or Cut✂

Slide 10

Slide 10 text

࡞੒ͷܦҢ 2013/7 Roadworker first commit

Slide 11

Slide 11 text

࡞੒ͷܦҢ • ΦϖϛεͰMXϨίʔυ͕ਧͬඈͿ • ChefͬΆ͘DNSΛ؅ཧ͍ͨ͠ • Roadworker࡞੒ • ͍Ζ͍Ζ࡞੒

Slide 12

Slide 12 text

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

Slide 13

Slide 13 text

πʔϧͷϙϦγʔ • εςʔτΛ࣋ͨͳ͍ • ΤΫεϙʔτͰ͖Δ

Slide 14

Slide 14 text

εςʔτΛ࣋ͨͳ͍ • ϫʔΫϑϩʔ͕γϯϓϧʹͳΔ • ੠͕͚ɾS3ɾJenkinsෆཁ • ஗͍ɾRate exceededʢWebαʔϏεʹ͍ͭͯ͸ʣ • ࠷ۙɺIAMͷAPIίʔϧ੍ݶ͕ݫͯͭ͘͠Β͍

Slide 15

Slide 15 text

ΤΫεϙʔτͰ͖Δ • GUIͰ΋͍͡Γ͍ͨ • AWS͸উखʹIAMɾSGΛ௥Ճ͢Δ

Slide 16

Slide 16 text

Ͱ͖Δ͚ͩγϯϓϧͳ΋ͷΛ ໨ࢦ͍ͯ͠·͢

Slide 17

Slide 17 text

Roadmap • ALB༻πʔϧͷ࡞੒ • ࡶEMR༻πʔϧͷ࡞੒ • PiculetͷϦϑΝΫλϦϯά • CIͷվળʢ஗͍ɾ͚͜Δʣ

Slide 18

Slide 18 text

΍͍͖ͬͯ·͢!

Slide 19

Slide 19 text

ίʔυԽʹ͍ͭͯ

Slide 20

Slide 20 text

ίʔυԽʹ͍ͭͯ ͍͍ͩͨ̎छྨ͘Β͍ͷ ҙຯ͕͋Δͱࢥ͍·͢

Slide 21

Slide 21 text

ίʔυԽʹ͍ͭͯ • ςΩετͰঢ়ଶΛ؅ཧ • ႈ౳ੑ →ੈؒతʹΞάϦʔ

Slide 22

Slide 22 text

ίʔυԽʹ͍ͭͯ • ઃఆΛಈతʹ͢Δ →ࢍ൱྆࿦

Slide 23

Slide 23 text

ίʔυԽʹ͍ͭͯ େ·͔ʹ෼͚Δͱ… • εΠεΞʔϛʔφΠϑࢮ͢΂͠೿ • σʔλهड़ݴޠDSL • ΍ΘΒ͔ઃఆେ޷͖೿ • ൚༻ݴޠDSL جຊతʹલऀ͕ϚδϣϦςΟͩͱࢥ͍·͢

Slide 24

Slide 24 text

σʔλهड़ݴޠDSL • yamlɾjsonɾhcl • ࠷ۙͩͱtomlʁ

Slide 25

Slide 25 text

σʔλهड़ݴޠDSL Pros • Մಡੑ͕ߴ͘ͳΔ • ϓϩάϥϚҎ֎ʹ΋ॻ͚Δ • ΤϥʔՕॴ͕Θ͔Γ΍͘͢ͳΔʢͱࢥ͏ʣ

Slide 26

Slide 26 text

σʔλهड़ݴޠDSL Cons • ϑϩʔ੍ޚͳͲ͕hackyʹͳΔ • yaml++͕Ͱ͖Δ • ςϯϓϨʔτΛ࢖͏ͱຒΊࠐΈεΫϦϓτʹΩϝϥײ

Slide 27

Slide 27 text

൚༻ݴޠDSL • Ruby…Ҏ֎Կ͔͋Γ·͔͢Ͷ…ʁ • chefɾitamae

Slide 28

Slide 28 text

൚༻ݴޠDSL Pros • ԿͰ΋Ͱ͖Δ • γʔϜϨεͳϑϩʔ੍ޚ

Slide 29

Slide 29 text

൚༻ݴޠDSL Cons • ཚ༻͠΍͍͢ • ΍Γա͗ΔͱʰઃఆϑΝΠϧʱ͔Βҳ୤ • ϓϩάϥϚҎ֎ʹ͸ॻ͖ʹ͍͘ʁ • Θ͔Γʹ͍͘Τϥʔ • method_missing': undefined local variable or method 'foo'

Slide 30

Slide 30 text

ίʔυԽʹ͍ͭͯ εΠεΞʔϛʔφΠϑࢮ͢΂͠೿ͷ࠷ӈཌྷͰ͋ΔCFn͕ Fn::JoinΛ༻ҙ͍ͯ͠Δͱ͜ΖΛݟΔͱɺ͋Δఔ౓ͷಈత͞ʹ ͍ͭͯ͸ੈؒతʹΞάϦʔʁ

Slide 31

Slide 31 text

ίʔυԽʹ͍ͭͯ ͨͿΜΈΜͳ΍Γ͍ͨͷ͸ • ܁Γฦ͠ • ৚݅෼ذ • ม਺ • ͪΐͬͱͨؔ͠਺ • ؀ڥม਺औಘͳͲ

Slide 32

Slide 32 text

ίʔυԽʹ͍ͭͯ ͦͷҰઢΛӽ͑Δͱɺࢍ൱྆࿦ • EC2ΠϯελϯεҰཡ͔ΒDNS࡞੒ • IPϦετΛμ΢ϯϩʔυͯ͠SGઃఆ ͳͲͳͲ

Slide 33

Slide 33 text

ίʔυԽʹ͍ͭͯ • Codenize.tools͸΍ΘΒ͔೿Ͱ͢ʂ • ͩͬͯˣͷΑ͏ʹॻ͖͍ͨ͠… instances.each do |i| resource_records i.name + ".example.com" do • ͱ͸͍͑Τϥʔʹ͍ͭͯ͸Կͱ͔͍ͨ͠…

Slide 34

Slide 34 text

গ͠࿩͕ͦΕ·͢

Slide 35

Slide 35 text

ؓ࿩ ઃఆϑΝΠϧͰಈతͳॲཧΛߦ͏৔߹ ੩తܕ෇͖ݴޠ͕޲͍͍ͯΔؾ͕͠·͢ ઃఆͷద༻ʢධՁʣલʹΤϥʔνΣοΫ͕Ͱ͖ͯ ৺ͷฏԺ͕ΑΓಘΒΕͦ͏ ઃఆͷద༻్தʹϥϯλΠϜΤϥʔ͕ग़ΔͱͭΒ͍

Slide 36

Slide 36 text

ؓ࿩ ͔͠͠ͳ͕Β੩తܕ෇͖ͷ૊ΈࠐΈݴޠ͸ ༨Γݟ͔͚ͳ͍ Golangͷtemplateͱ͔Ͱ΋ {{}} ͷจ๏νΣοΫ͸ͯ͘͠Εͯ΋ ؔ਺ʹ౉͢஋ͷܕ͸࣮ߦ࣌ͷνΣοΫ…

Slide 37

Slide 37 text

ؓ࿩ AngleScriptͱ͍͏੩తܕ෇͖૊ΈࠐΈݴޠ͕͋ͬͨΜͰ͕͢ CScriptBuilder builder; int r = builder.StartNewModule(engine, "MyModule"); if( r < 0 ) { printf("...\n"); return; }

Slide 38

Slide 38 text

ؓ࿩ ͦΕͳΜͯC++ʢry

Slide 39

Slide 39 text

ؓ࿩ ઃఆϑΝΠϧ಺Ͱ੩తܕ෇͖ݴޠΛ࢖͓͏ͱ͓΋ͬͨΒ Ұ෦ͷؔ਺ܕݴޠͷΑ͏ʹ؆ܿͰܕνΣοΫ΋ͯ͠Δ͘ΕΔ ૊ΈࠐΈݴޠ͕ඞཁͳΑ͏Ͱ͢ ݚڀʹ͸஋͠·͕͢ ͬ͘͞ͱ࣮༻ஈ֊ʹ͸Ͱ͖ͳͦ͏…

Slide 40

Slide 40 text

ؓ࿩ٳ୊

Slide 41

Slide 41 text

Codenize.toolsͷ͜Ε͔Β

Slide 42

Slide 42 text

Codenize.toolsͷ͜Ε͔Β ϩʔυϚοϓ͸ઌ΄Ͳ্͛ͨͱ͓Γɻ ͔͠͠໰୊఺͕Ұͭ

Slide 43

Slide 43 text

ർΕͨ!

Slide 44

Slide 44 text

ർΕͨ! • CIͭΒ͍ • ٕज़తͳֶͼ͕গͳ͍

Slide 45

Slide 45 text

CIͭΒ͍ • ओʹAWSͷ࿩Ͱ͢ • CI͸࣮ࡍͷAWSͰςετ • ஗͍ • πʔϧಉ࢜ͷڝ߹ • CI؀ڥ࡞ΓͮΒ͍

Slide 46

Slide 46 text

஗͍ ͋Δఔ౓͸࢓ํͳ͍ΜͰ͕͢ • ૣ͘͢ΔˠRate exceededʹҾ͔͔ͬΔ • ࠷ۙɺͳΜ͔ݫ͘͠ͳͬͨΑ͏ͳ… • ฒྻԽ͢Δˠςετ͕ڝ߹͢ΔͷͰΞΧ΢ϯτ͍ͬͺ͍ඞཁ • ݱࡏɺॴ༗ΞΧ΢ϯτ̎ݸ • ͜ΕҎ্૿΍͢ͷ͸ͭΒ͍!

Slide 47

Slide 47 text

πʔϧಉ࢜ͷڝ߹ • roadworker CI • ελϒͱͯ͠ELBͳͲ΋ඞཁ • kelbim CI • ELBશ෦ফ͢ • miam CI • IAM શ෦ফ͢ ಉ͡ΞΧ΢ϯτͰฒྻͰςετ΍Δͱഁ໓

Slide 48

Slide 48 text

CI؀ڥ࡞ΓͭΒ͍ • TravisCI࢖ͬͯ·͢ɻମྗඞཁ • σόοά • Rete exceededରࡦ • ԼखʹΫϨσϯγϟϧΛ͓͚ͳ͍ • encrypt key࢖͑Δ͚ͲPRͰಈ͔ͳ͍ • ಛʹmiam͕΍͹͍

Slide 49

Slide 49 text

CI؀ڥ࡞ΓͭΒ͍ APIݺͼ͗͢ഁ࢈ରࡦ͸์غͯ͠·͢…

Slide 50

Slide 50 text

CIͭΒ͍ ࠓޙʹ͍ͭͯ͸ϞοΫͷςετΛ૿΍ͦ͏ͱࢥͬͯ·͕͢ ΋ͬͱ͍͍ιϦϡʔγϣϯ͋Δͱ͍͍ͳ͊ |ωɾ`ʣνϥ

Slide 51

Slide 51 text

ٕज़తͳֶͼ͕গͳ͍ Codenize.toolsͷ࢓૊Έ

Slide 52

Slide 52 text

Codenize.toolsͷ࢓૊Έ Apply • API→Hash • DSL→Hash • Hashಉ࢜Λൺֱ • ࠩ෼ΛຒΊΔAPIΛͨͨ͘

Slide 53

Slide 53 text

Codenize.toolsͷ࢓૊Έ Export • API→Hash • Hash→DSL

Slide 54

Slide 54 text

ͪΐ͏͔ΜͨΜΜ ʢ಄Λ࢖Θͳ͍ʣ

Slide 55

Slide 55 text

ͩΔ͍ • ຖ౓ಉ͡Α͏ͳΫϥεΛॻ͘ͷ͕ͩΔ͍ • DSLΫϥεॻ͘ͷ͕ͩΔ͍ • όϦσʔγϣϯ͕ͩΔ͍

Slide 56

Slide 56 text

ରͩΔ͍ • DSLʹ͍ͭͯ͸ઐ༻ͷϥΠϒϥϦΛॻ͍ͨ • https://github.com/winebarrel/dslh • DSL→HashɾHadh→DSLͷ૬ޓޓ׵͕Մೳ • ͔͠͠όϦσʔγϣϯ͕Ͱ͖ͳ͍…

Slide 57

Slide 57 text

ରͩΔ͍ • yamlͷόϦσʔλʔ͸͋ͬͨ • Kwalify type: map mapping: "name": type: str required: yes "age": type: int

Slide 58

Slide 58 text

ରͩΔ͍ • Dslh͕ੜ੒ͨ͠Hashʹରͯ͠όϦσʔγϣϯ • όϦσʔγϣϯ࣮૷Ͱ͖ͨ • ͋Εɺ͜Ε΋Ζ΋ΖࣗಈԽͰ͖ΔΜ͡ΌͶʁ

Slide 59

Slide 59 text

https://github.com/ winebarrel/codenize

Slide 60

Slide 60 text

codenize • Codenize.toolsͷ਽ܗΛੜ੒ • API→Hashͷ࣮૷Λ͢Ε͹͍͍ͩͨͰ͖Δ • Ruby DSLͷ࣮૷͸ෆཁ • όϦσʔγϣϯ΋Ͱ͖Δ

Slide 61

Slide 61 text

Demo

Slide 62

Slide 62 text

࣮૷ྫ ecman - EasyCronͷίʔυԽπʔϧ - https://github.com/winebarrel/ecman/commit/ 941555eee0ca59894efc9b3b3b52e8e66b5a63fa

Slide 63

Slide 63 text

Έͳ͞Μ΋ͲΜͲΜ Codenize͢ΔͱΑ͍ͱ ͓΋͍·͢

Slide 64

Slide 64 text

࠷ޙʹ PRɾIssue͓଴ͪͯ͠·͢! • ೔ຊޠͰ΋େৎ෉Ͱ͢ • όάͷ৔߹ɺΤϥʔ؀ڥͱ࠶ݱίʔυ͕͋Δͱॿ͔Γ·͢

Slide 65

Slide 65 text

͓ΘΓ https://suzuri.jp/winebarrel/591154/t-shirt/s/white