Slide 1

Slide 1 text

3VCZPO-BNCEBͰมΘΔ
 େن໛αʔϏεͷཪଆ Sansanגࣜձࣾ &JHIUࣄۀ෦1MBUGPSN6OJU6OJU-FBEFS݉&OHJOFFSJOH.BOBHFS ౻Ҫ༸ଠ࿠ "844FSWFSMFTT5FDIࣄྫηϛφʔ

Slide 2

Slide 2 text

- ౻Ҫ༸ଠ࿠(Fujii Yotaro) - 1989೥ੜ·Ε(30ࡀ) - ɹɹɹɹɹ (ݸਓ޲໊͚ࢗΞϓϦ) - 2014೥4݄ʹ৽ଔͱͯ͠ೖࣾ - Platform Unit / ج൫νʔϜ - Unit Leader ݉ Engineering Manager ࣗݾ঺հ

Slide 3

Slide 3 text

Eight ͷ঺հ

Slide 4

Slide 4 text

໊ࢗͰͭͳ͕ΔɺϏδωεͷͨΊͷSNS

Slide 5

Slide 5 text

໊ࢗͰͭͳ͕ΔɺϏδωεͷͨΊͷSNS ໊ࢗ؅ཧ ਓࣄ৘ใΛ௨஌ ؔ࿈͢Δاۀͷχϡʔε ϝοηʔδ

Slide 6

Slide 6 text

ࠃ಺ͰߦΘΕ͍ͯΔ໊ࢗަ׵ͷ10%Ҏ্ΛσʔλԽ Ϣʔβ਺ 
 200ສਓ ࠃ಺໊ࢗަ׵ 
 10%Ҏ্

Slide 7

Slide 7 text

։ൃ؀ڥ(ݴޠ/ϑϨʔϜϫʔΫ/αʔϏε)

Slide 8

Slide 8 text

Eight Ͱར༻͍ͯ͠Δ AWSαʔϏε AWS100αʔϏεͷ͏ͪͷ൒਺Ҏ্Λར༻ D I D KPI D D N B P P A B/ I N W D W Recommendation Feed XPSLFS

Slide 9

Slide 9 text

ຊ୊ / ࠓ೔͓࿩͢Δ͜ͱ

Slide 10

Slide 10 text

େن໛ͳόονॲཧΛ Ruby on LambdaͰ͍͍ײ͡ʹ͢Δ(͍ͨ͠)࿩

Slide 11

Slide 11 text

େن໛ͳόονॲཧ?

Slide 12

Slide 12 text

- ໊ࢗը૾ - χϡʔεϑΟʔυ্ͷը૾ - ϓϩϑΟʔϧը૾ - ը૾ϝϞ - etc… EightͰ͸༷ʑͳը૾Λѻ͏

Slide 13

Slide 13 text

- αϜωΠϧը૾ - ෳ਺αΠζͷαϜωΠϧը૾Λ༻ҙ͠ɺ֤දࣔ৔ॴͰ͸ඞཁ࠷௿ݶͳα Πζͷը૾Λ࢖͏͜ͱͰɺΞϓϦͷߴ଎ԽΛਤ͍ͬͯΔ - ΅͔͠ը૾ - Ӿཡݖݶ͕ແ͍Ϣʔβؒͷ৔߹ɺ΅͔͠ը૾Λදࣔ͢ΔΑ͏ʹ - webpϑΥʔϚοτରԠ - JPEGͱൺֱ͠໿30%ϑΝΠϧαΠζ͕খ͘͢͞Δ͜ͱ͕Ͱ͖Δ ମݧ޲্΍ϓϥΠόγʔ؍఺ʹ͓͚Δ༷ʑͳը૾ॲཧΛߦ͏

Slide 14

Slide 14 text

1ຕͷ໊͔ࢗΒ࡞ΒΕΔαϜωΠϧɺ΅͔͠ը૾ 1ຕͷ໊ࢗऔΓࠐΈ αΠζ - ද×ཪ - jpeg × webp Λߟ͑Δͱ20छఔ౓ඞཁʹ ΦϦδφϧ(ද) ΦϦδφϧ(ཪ) αϜωΠϧ(ද) ΅͔͠αϜωΠϧ(ද) … … … … αϜωΠϧ(ཪ) ΅͔͠αϜωΠϧ(ཪ) jpeg webp

Slide 15

Slide 15 text

໊ࢗը૾ͷαϜωΠϧ & ΅͔͠ॲཧϑϩʔ

Slide 16

Slide 16 text

- σΠϦʔͰ਺ेʙ਺ඦສͷը૾ॲཧδϣϒ ͕ൃੜ - ೔தʹϐʔΫ͕๚ΕΔ͕ɺ
 όονॲཧػߏͷؔ܎Ͱ༰қʹεέʔϧ͕Ͱ͖ͳ͍ - ॲཧ͕଺ཹ͠ɺαϜωΠϧը૾͕४උͰ͖͍ͯͳ͍ͱɺ
 ը૾औಘAPIͰ on-the-fly ʹը૾ੜ੒ΛߦΘͳ͚Ε͹ͳΒͣɺ
 ϨεϙϯεྼԽʹͭͳ͕ͬͯ͠·͏… αʔϏε֦େʹͭΕɺεέʔϥϏϦςΟͷ໰୊͕ൃੜ

Slide 17

Slide 17 text

ը૾ॲཧΩϡʔͷ enqueue / dequeue ঢ়گͰݟͯΈΔ னա͗ͷϐʔΫ࣌ʹεέʔϧͰ͖͍ͯͳ͍ɻ εέʔϧΞ΢τ͢Δʹ͸όοναʔόʔΛ૿΍ ͠RailsϓϩηεΛ্ཱͪ͛ͳ͚Ε͹͍͚ͳ͍ ݱঢ়͸։ൃऀ͕खಈͰରԠ" ͔͠͠ɺ࣍ୈʹ࿛গ೥ঢ়ଶʹ… ྲྀೖ͕མͪண͍ͯ΋ɺॲཧྔ͸ߴ͍ঢ়ଶͰுΓ෇ ͍͍ͯΔɻ਺࣌ؒ଺ཹ/஗Ԇͯ͠͠·͍ͬͯΔɻ → ը૾औಘAPIͷύϑΥʔϚϯεྼԽʹͭͳ͕Δ enqueue dequeue

Slide 18

Slide 18 text

ΠϕϯτۦಈͰॲཧ͍ͨ͠…! ref: αʔόʔϨεύλʔϯ / ܗͰߟ͑ΔαʔόʔϨεઃܭ https://aws.amazon.com/jp/serverless/patterns/serverless-pattern/

Slide 19

Slide 19 text

- ͕ɺEight ʹͱͬͯ RubyͰॻ͚ͳ͍͜ͱ͕େ͖ͳ໰୊ Lambda ʹߦ͚Ε͹޾ͤͩͱ͍͏͜ͱ͸Θ͔͍ͬͯΔ - ໊ࢗը૾पΓͷॲཧ͸ຊମαʔϏεʹີ઀ʹඥ෇͍͍ͯΔ - ಉظతʹ໊ࢗը૾Λ৮Βͳ͍ͱ͍͚ͳ͍έʔε͕͋ΓɺϩδοΫͷଟॏ؅ཧʹ - Ϣʔβؒͷؔ܎ੑ΍ެ։εςʔλεʹΑ໊ͬͯࢗը૾औಘՄ൱΍݁Ռ͕ҟͳΔɻ - ը૾αʔϏε(?)ͷΑ͏ʹαʔϏεΛ੾Γग़͢ͷ͸ɺݱঢ়͔ͳΓՙ͕ॏ͍ - ͦΜͳதɺଞͷݴޠΛ࢖ͬͯͷ Lambda ࣮૷͸ϝϯςφϯεੑʹ೉͋Γ…

Slide 20

Slide 20 text

ͦΜͳ͜ͱΛߟ͑ͳ͕Β͸΍਺೥ɺ͍ͭʹ Lambda ͕ Ruby Λαϙʔτʂ EightνʔϜ ɹɹ׻تʂ ฐࣾࢀՃϝϯόʔ͔Β଎ใ͕ʂ

Slide 21

Slide 21 text

- ໊ࢗը૾Λѻ͏ίΞϩδοΫΛGemͳͲʹ੾Γग़͢͜ͱ͕Ͱ͖Ε͹ɺ
 ຊମαʔϏεͰ΋ར༻Ͱ͖Δ͠ɺLambda͔Β΋ར༻Ͱ͖Δ - ଟॏ؅ཧ͕ෆཁʂ Ruby on LambdaͰมΘΔ!?Eightͷඇಉظ(όον)ॲཧ ௿ίετͳରԠͰεέʔϥϏϦςΟΛ֬อͰ͖Δʂʁ

Slide 22

Slide 22 text

[ཧ૝Πϝʔδ] ڞ௨ॲཧΛࣗલͷgemͱͯ͠੾Γग़ͤ͹͍͍ײ͡ʹʁ eight_card_image_processor gem ɾը૾ͷอଘɾߋ৽ɾ࡟আ ɾαϜωΠϧը૾ੜ੒ ɾ΅͔͠ը૾ੜ੒ ɾjpegม׵αϙʔτ ɾwebpม׵αϙʔτ ໊ࢗը૾ʹؔ͢Δ ڞ௨ॲཧΛࣗ࡞Gemͱͯ͠੾Γग़͢ bundle install bundle install

Slide 23

Slide 23 text

ͱ͍͏͜ͱͰ ໊ࢗը૾ॲཧΛߦ͏LambdaΛಈ͔͢·ͰͷಓͷΓ

Slide 24

Slide 24 text

- ᶃ gemΛ࢖ͬͨ Lambda Λ࡞Δ - ᶄ native extensionsʹґଘ͢ΔgemΛ࢖ͬͨ Lambda Λ࡞Δ - ᶅ ࣮ߦόΠφϦΛؚΊͨ Lambda Λ࡞Δ - ᶆ Lambda LayersΛར༻࣮ͯ͠ߦόΠφϦΛFunction͔Β੾Γ཭͢ - ᶇ FrameworkΛར༻ͨ͠ϩʔΧϧ࣮ߦ؀ڥͱσϓϩΠ؀ڥ - ᶈ CI / CD؀ڥͷߏங εςοϓ

Slide 25

Slide 25 text

- bundle install ࣌ʹ࡞ۀσΟϨΫτϦ௚Լͷ vendor/bundle ʹΠϯετʔϧ͞ ΕΔΑ͏ʹ͠ɺlambda function(rubyίʔυ)ͱҰॹʹΞοϓϩʔυ͢Ε͹'
 - σΟϨΫτϦߏ੒ྫ 1. Ruby on Lambda Ͱ Gem Λར༻͢Δ bundle install --path vendor/bundle

Slide 26

Slide 26 text

- workσΟϨΫτϦ௚Լͷ vendor/bundle Ͱಈ͘ཧ༝
 Lambda࣮ߦ؀ڥͷ؀ڥม਺(GEM_PATH)ʹσϑΥϧτͰ௥Ճ͞Ε͍ͯΔͨΊ 1. Ruby on Lambda Ͱ Gem Λར༻͢Δ https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/current-supported-versions.html

Slide 27

Slide 27 text

- Lambda ͷ࣮ߦ؀ڥͱಉ౳ͷ؀ڥͰbundle(Ϗϧυ)͢Δඞཁ͕͋Δ 2. native extension ʹґଘͨ͠ gem ͷ৔߹ lambci/lambda:build-ruby2.5 
 lambci dockerΠϝʔδΛ࢖Θͤͯ΋Β͏ https://github.com/lambci/docker-lambda lambci # rmagickͳͲnative extensionsΛඞཁͱ͢ΔgemΛGemfileʹهड़ $ vi Gemfile # docker container্Ͱbundle install. volumeϚ΢ϯτ͠ϗετ্ͷ vendor/bundle ʹΠϯετʔϧ
 $ docker run -v `pwd`:/var/task -it lambci/lambda:build-ruby2.5 bundle install --path vendor/bundle # lambda_handler.rb, vendor/bundleΛzipԽͯ͠Ξοϓϩʔυ $ zip -r zip_function ./*

Slide 28

Slide 28 text

- Eightͷը૾ॲཧͰ͸ߴ଎ԽͷͨΊʹ webp ϑΥʔϚοτม׵Λߦ͍ͬͯΔ - ͕ɺ௨ৗͷLambda࣮ߦ؀ڥͷImageMagick͸ webp ରԠ͍ͯ͠ͳ͍…orz 3. ࣮ߦόΠφϦΛؚΊͨ Lambda ͷ࡞੒ ## ImageMagickͷversion֬ೝ $ convert -version
 Version: ImageMagick 6.7.8-9 2016-06-22 Q16 http://www.imagemagick.org Copyright: Copyright (C) 1999-2012 ImageMagick Studio LLC Features: OpenMP ## ରԠը૾ϑΥʔϚοτͷ֬ೝɻ $ convert -list format … VST* TGA rw- Truevision Targa image WBMP* WBMP rw- Wireless Bitmap (level 0) image WMF* WMF r-- Windows Meta File … dockerίϯςφ্ͰImageMagickΛ֬ೝ webp͕ରԠϦετʹແ͍

Slide 29

Slide 29 text

- ࣮ߦόΠφϦΛؚΊͯLambdaؔ਺ΛύοέʔδϯάԽ͢Δͷ͕ਖ਼߈๏✅ - native extensionsΛ࢖͏ࡍͱಉ༷ɺLambdaͷDocker؀ڥͰ࣮ߦόΠφϦΛϏϧυ - Ϗϧυ͢ΔࡍͷΠϯετʔϧσΟϨΫτϦ͸஫ҙ͕ඞཁɻϥΠϒϥϦݕࡧύεΛ֬ೝ͢Δ͜ͱ - Lambda࣮ߦ؀ڥͷσϑΥϧτͷϥΠϒϥϦݕࡧύεͷ؀ڥม਺͸ҎԼ - ඞཁʹԠͯ͡ɺLambdaʹ؀ڥม਺Λ༩͑Δ(্ॻ͘͜ͱ΋)Մೳ 3. ࣮ߦόΠφϦΛؚΊͨ Lambda ͷ࡞੒ https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/current-supported-versions.html

Slide 30

Slide 30 text

- WebP compatibleͳImageMagickΛϏϧυ͢Δࡍͷ࣮ߦྫ 3. ࣮ߦόΠφϦΛؚΊͨ Lambda ͷ࡞੒ ## Lambdaؔ਺͕ల։͞ΕΔσΟϨΫτϦͰ࡞ۀ cd /var/task ## libwebpͷinstall curl -sLO https://storage.googleapis.com/downloads.webmproject.org/releases/webp/ libwebp-1.0.0.tar.gz \ && tar zxvf libwebp-1.0.0.tar.gz \ && cd libwebp-1.0.0 && ./configure --prefix=/var/task && make && make install \ && rm -rf ../libwebp-1.0.0.tar.gz ../libwebp-1.0.0 ## webp compatibleͳImageMagickͷϏϧυ curl -sLO https://www.imagemagick.org/download/releases/ImageMagick-6.9.10-34.tar.gz \ && tar zxvf ImageMagick-6.9.10-34.tar.gz \ && cd ImageMagick-6.9.10-34 && ./configure --prefix=/var/task --with-webp=yes \ && make && make install \ && rm -rf ../ImageMagick-6.9.10-34.tar.gz ../ImageMagick-6.9.10-34 - /var/task ҎԼͷϑΝΠϧ(*.rb, vendor/bundle, bin/, lib/, etc…)Λશͯύοέʔδϯά(zipԽ)͢Ε͹OK lambci dockerίϯςφ্ͰϏϧυ࡞ۀ

Slide 31

Slide 31 text

- ͔͠͠ɺ࣮ߦόΠφϦ(ImageMagick౳)ΛؚΊͨΞοϓϩʔυ͸஍ຯʹਏ͍ ࣮ߦόΠφϦΛʮؚ·ͳ͍ʯ৔߹ (*.rb, vendor/bundle ͷΈ) ࣮ߦόΠφϦΛʮؚΉʯ৔߹ (*.rb, vendor/bundle, bin/, lib/, …) ໿5MB ໿50MB! - ࣮ߦόΠφϦࣗମΛߋ৽͢Δස౓͸ଟ͘ͳ͍͸͕ͣͩɺ
 ؔ਺Λमਖ਼͢Δͨͼʹຖճύοέʔδϯά & σϓϩΠ͠ͳ͚Ε͹ͳΒͳ͍ - ؅ཧ͢ΔLambda͕ҰͭͰ͋Ε͹·ͩɺͳΜͱ͔ͳΔ͔΋͠Εͳ͍͕…? ਏ͍͜ͱʹ͸มΘΒͳ͍ 3. ࣮ߦόΠφϦΛؚΊͨ Lambda ͷ࡞੒

Slide 32

Slide 32 text

- re:Invent 2018 Ͱ Ruby Support ͱҰॹʹϦϦʔε͞ΕͨʮLambda Layersʯ 4. Lambda LayersΛ࢖ͬͯσϓϩΠίετΛ࡟ݮ͢Δ

Slide 33

Slide 33 text

- Lambda Layers : ෳ਺ͷLambdaؔ਺ͰϥΠϒϥϦΛڞ༗Ͱ͖Δ࢓૊Έ
 ৄࡉ͸ https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/configuration-layers.html 4. Lambda LayersΛ࢖ͬͯσϓϩΠίετΛ࡟ݮ͢Δ - Point - Layerͷίʔυ͸ /opt ҎԼʹల։͞ΕΔ - /opt ҎԼͷύε͸ϥΠϒϥϦݕࡧύεʹ
 σϑΥϧτͰؚ·Ε͍ͯΔ ref: https://qiita.com/t_okkan/items/394a15577bd1aad46ec3

Slide 34

Slide 34 text

- Dockerίϯςφ্ͰWebP Compatible ImageMagick LayerΛ࡞Δ 4. Lambda LayersΛ࢖ͬͯσϓϩΠίετΛ࡟ݮ͢Δ # Lambda Layer͕ల։͞ΕΔ /opt ҎԼͰ࡞ۀ cd /opt ## libwebpͷinstall curl -sLO https://storage.googleapis.com/downloads.webmproject.org/releases/webp/ libwebp-1.0.0.tar.gz \ && tar zxvf libwebp-1.0.0.tar.gz \ && cd libwebp-1.0.0 && ./configure --prefix=/opt && make && make install \ && rm -rf ../libwebp-1.0.0.tar.gz ../libwebp-1.0.0 ## webp compatibleͳImageMagickͷϏϧυ curl -sLO https://www.imagemagick.org/download/releases/ImageMagick-6.9.10-34.tar.gz \ && tar zxvf ImageMagick-6.9.10-34.tar.gz \ && cd ImageMagick-6.9.10-34 && ./configure --prefix=/opt --with-webp=yes \ && make && make install \ && rm -rf ../ImageMagick-6.9.10-34.tar.gz ../ImageMagick-6.9.10-34 - /opt ҎԼͷϑΝΠϧ(bin/, lib/, etc…)Λύοέʔδϯά͠LayersʹΞοϓϩʔυ͢Ε͹OK ΠϯετʔϧσΟϨΫτϦͷࢦఆΛ /var/task ͔ΒLayer͕ల։͞ΕΔ /opt ҎԼʹมߋ

Slide 35

Slide 35 text

4. Lambda LayersΛ࢖ͬͯσϓϩΠίετΛ࡟ݮ͢Δ - Layerͷ࡞੒ - Lambdaʹ࡞੒ͨ͠
 LayersΛؔ࿈෇͚Δ

Slide 36

Slide 36 text

- , ֎෦ϥΠϒϥϦΛLayersʹҠߦ͢Δ͜ͱͰɺϏδωεϩδοΫͷ։ൃʹूத͠ ΍͘͢ͳΔ - , Lambdaؔ਺ͷσϓϩΠ࣌ʹɺ֎෦ϥΠϒϥϦΛؚΉύοέʔδϯά͕ෆཁʹ ͳΓσϓϩΠίετ͕࡟ݮ - - ҰํͰɺLayersࣗମͷόʔδϣϯ؅ཧ΍ɺLambdaͱͷґଘؔ܎ɾඥ෇͚Λखಈ Ͱߦ͍ͬͯ͘ͷ͸ΑΓෳࡶʹ… - ϑϨʔϜϫʔΫಋೖͷػӡ 4. Lambda LayersΛ࢖ͬͯσϓϩΠίετΛ࡟ݮ͢Δ

Slide 37

Slide 37 text

- LambdaΛؚΉServerlessΞʔΩςΫνϟͷߏ੒؅ཧɺϩʔΧϧ࣮ߦɺσϓϩΠ͕ՄೳͳϑϨʔϜϫʔΫ - AWS SAM(Serverless Application Model) - Serverless Framework ͷ2୒͔ 5. ϑϨʔϜϫʔΫΛར༻͠࠶ݱੑ/ܧଓੑΛߴΊΔ AWS SAM - AWSެࣜͷαʔόʔϨεΞʔΩςΫνϟʹ
 ಛԽͨ͠ϑϨʔϜϫʔΫ - CloudFormationͰ؅ཧ - ϩʔΧϧ࣮ߦ؀ڥΛ੔උ - σϓϩΠखॱ͕एׯෳࡶͳҹ৅ - AWSҎ֎ͷΫϥ΢υʹ΋ରԠ - SAMಉ༷ɺCloudFormationͰ؅ཧ - ։ൃ͕੝Μ(ͳҹ৅) - pluginͳͲ΋๛෋Ͱ͔Ώ͍ͱ͜Ζʹख͕ಧ͘ - ࠓճ͸͢ͰʹEightͰར༻࣮੷ͷ͋Δ Serverless Framework Λ࠾༻

Slide 38

Slide 38 text

- Serverlss Framework ͱDockerΛར༻͠ɺLambdaͱLayersΛ؅ཧ͢Δ 5. ϑϨʔϜϫʔΫΛར༻͠࠶ݱੑ/ܧଓੑΛߴΊΔ ΦεεϝͷσΟϨΫτϦߏ੒Ҋ - ᶃ Layers ͷ؅ཧ
 Dockefileʹهड़͠ɺDocker Image಺ʹด͡ࠐΊͯ͠·͏ɻ
 Layers ʹߋ৽͕͋ͬͨ৔߹͸Docker ImageΛ࠶Ϗϧυ͢Δɻ - ᶄ Serverless Framework
 serverless΋Docker಺Ͱ࣮ߦͰ͖ΔΑ͏ʹ - ᶅ Lambdaؔ਺, serverless.yml, vendor/bundleͷ؅ཧ
 ্ड़ͷDockerίϯςφͷ্ཱͪ͛࣌ʹ /var/task ʹ࡞ۀσΟϨΫτϦΛϚ΢ϯ τ͠ɺίϚϯυ࣮ߦ͸Dockerίϯςφ্Ͱߦ͏ɻ - gemͷ௥Ճ/ߋ৽͸͠͹͠͹͋ΔͨΊvendor/bundle͸
 docker imageʹ͸ؚΊͳ͍ & όʔδϣϯ؅ཧ΋͠ͳ͍(.gitignore)

Slide 39

Slide 39 text

- Layers͸ Dockerfile Ͱ؅ཧͯ͠͠·͏ͷ͕٢ 5. ϑϨʔϜϫʔΫΛར༻͠࠶ݱੑ/ܧଓੑΛߴΊΔ LambdaͷDocker ImageΛϕʔεͱͨ͠ ࣗલͷDocker Image༻ҙ FROM lambci/lambda:build-ruby2.5 # ࡞ۀ؀ڥͷߏஙʹඞཁͳ؀ڥม਺ͷఆٛ ENV PKG_CONFIG_PATH /opt/lib/pkgconfig # Lambda layer૬౰ͷ؀ڥΛ࡞੒ WORKDIR /opt ## libwebpͷinstall ... (લड़ͱಉ༷ͷॲཧ) ## webp compatibleͳImageMagickͷϏϧυ ... (લड़ͱಉ༷ͷॲཧ) # serverless frameworkͷΠϯετʔϧ RUN curl -sL https://rpm.nodesource.com/setup_6.x | bash - \ && yum -y install nodejs && yum -y clean all \ && npm install -g serverless WORKDIR /var/task/ CMD ["/bin/bash"] ᶃlambci/lambda:build-ruby2.5 Λ
 ɹϕʔεʹͨ͠Πϝʔδ ᶄ/opt ഑ԼʹAWS Layersʹ૬౰͢Δ
 ɹϥΠϒϥϦΛϏϧυ͠഑ஔ ᶅnodeΛΠϯετʔϧ͠ɺ
 ɹserverless frameworkΛΠϯετʔϧ͢Δ Dockerfileྫ

Slide 40

Slide 40 text

- serverless.yml Ͱͷ layers, functionsͷઃఆྫ 5. ϑϨʔϜϫʔΫΛར༻͠࠶ݱੑ/ܧଓੑΛߴΊΔ … layers: webpimagemagick: path: copy_layers # /opt ͷγϯϘϦοΫϦϯάΛష্ͬͨͰdeploy͢Δ description: WebP compatible ImageMagick functions: func1: handler: func1.execute layers: - {Ref: WebpimagemagickLambdaLayer} events: - s3: card-images func2: handler: func2.execute Lambdaؔ਺Ͱ࢖͏LayerΛ ඥ෇͚ͯ؅ཧ͢Δ͜ͱ͕Մೳ ࢦఆͨ͠bucketʹߋ৽͕͋ͬͨࡍʹ lambda࣮ߦͤ͞Δઃఆ

Slide 41

Slide 41 text

- Ϗϧυͨ͠Docker Imageͷίϯςφ্Ͱ։ൃ࡞ۀ - bundle install —path vendor/bundle - gemͷΠϯετʔϧ - bundle exec rspec - rubyίʔυͷࣗಈςετ࣮ߦ - serverless deploy - functionͱlayersͷσϓϩΠ - serverless invoke (local) -f function໊ - Lambda functionͷ(ϩʔΧϧ)࣮ߦ 5. ϑϨʔϜϫʔΫΛར༻͠࠶ݱੑ/ܧଓੑΛߴΊΔ

Slide 42

Slide 42 text

$ sls deploy ...snip Serverless: Uploading service aws-ruby-function.zip file to S3 (4.02 MB)... Serverless: Uploading service webpimagemagick.zip file to S3 (47.44 MB)... ...snip api keys: None endpoints: None functions: func1: eight-image-proccessor-dev-func1 func2: eight-image-proccessor-dev-func2 layers: webpimagemagick: arn:aws:lambda:ap-northeast-1:xxxxx:layer:webpimagemagick:9 Serverless: Removing old service artifacts from S3... 5. ϑϨʔϜϫʔΫΛར༻͠࠶ݱੑ/ܧଓੑΛߴΊΔ - deployίϚϯυΛୟ͚ͩ͘Ͱɺlambdaͱlayersͷύοέʔδϯά&σϓϩΠ͕Ͱ͖Δ - serverless(sls) deploy functionͱlayer͕ͦΕͧΕύοέʔδϯά σϓϩΠ׬ྃͨ͠functionsͱlayersͷ৘ใ

Slide 43

Slide 43 text

def hello(event:, context:) { statusCode: 200, body: JSON.generate('Go Serverless v1.0! Your function executed successfully!’) } end 5. ϑϨʔϜϫʔΫΛར༻͠࠶ݱੑ/ܧଓੑΛߴΊΔ - ϩʔΧϧ؀ڥͰͷlambdaͷಈ࡞֬ೝ΋Ͱ͖Δ - serverless(sls) invoke local -f function໊ $ sls invoke local -f hello {"statusCode":200,"body":"\"Go Serverless v1.0! Your function executed successfully!\""}

Slide 44

Slide 44 text

- CircleCIͰࣗಈςετ࣮ߦ & 
 ಛఆͷϒϥϯνʹϚʔδ͞ΕͨΒɺࣗಈͰ֤AWS؀ڥʹDeployment - serverlessͷdeployίϚϯυͷstage optionΛ࢖͏͜ͱͰɺσϓϩΠͷ੾Γ෼͚͕Մೳ 6. ࠷ޙʹCI / CD؀ڥͷߏங

Slide 45

Slide 45 text

ཧ૝ͱ͍ͯͨ͠ߏ੒ʹ, eight_card_image_processor gem ɾը૾ͷอଘɾߋ৽ɾ࡟আ ɾαϜωΠϧը૾ੜ੒ ɾ΅͔͠ը૾ੜ੒ ɾjpegม׵αϙʔτ ɾwebpม׵αϙʔτ ໊ࢗը૾ʹؔ͢Δڞ௨ॲཧΛ੾Γग़ͨࣗ͠࡞Gem bundle install bundle install deploy

Slide 46

Slide 46 text

- gem(vendor/bundle)ɺnative extensions΍֎෦ϥΠϒϥϦͷϏϧυɺlayer ԽΛߦ͏͜ͱͰෳࡶͳཁ݅ͷLambdaؔ਺Λ࡞Δ͜ͱ͕Մೳ - Docker؀ڥ΍ϑϨʔϜϫʔΫΛ༗ޮʹ׆༻͠ɺLambda Function΍Layers Λ؅ཧ͢Δ - ϒϥϯνઓུΛ޻෉͠ɺϑϨʔϜϫʔΫͱ࿈ܞͤ͞Δ͜ͱͰCI/CDΛ༰қ ʹ࣮ݱՄೳʹ ͜͜·Ͱͷ੔ཧ

Slide 47

Slide 47 text

ӡ༻໘

Slide 48

Slide 48 text

- ݻఆͰ༻ҙ͍ͯͨ͠EC2ΠϯελϯεΛ؅ཧ͢Δඞཁ͕ͳ͘ͳͬͨ. - ໷ؒଳͷδϣϒ͕গͳ͍࣌ؒଳ͸ΞΠυϧλΠϜ͕ଟ͘ແବͳίετ͕͔ ͔͍͕ͬͯͨɺLambdaʹҠߦͨ͜͠ͱͰίετ໘Ͱ΋࠷దԽ͞Εͨ มΘͬͨ͜ͱ ΞΠυϧ࣌ؒͰ΋ෆཁͳίετ͕͔͔Βͳ͘ͳͬͨ

Slide 49

Slide 49 text

- ϐʔΫλΠϜͰ΋ Lambda ͕ࣗಈͰεέʔϧ͠଺ཹ͕΄΅0ʹ - ͜Ε·Ͱӡ༻ऀ͕खಈͰ΍͍ͬͯͨӡ༻ίετ΋΄΅0ʹ - ຖ೔ϐʔΫ࣌ʹൃੜ͍ͯͨ͠
 Ξϥʔτ & εέʔϦϯάۀ຿͔Βͷ։์ . - ଺ཹ͕ͳ͘ͳΔ = APIύϑΥʔϚϯε΋޲্ - ଺ཹ࣌ʹൃੜͯ͠͠·͏ಉظతͳը૾ม׵ॲཧʹ͔͔͍ͬͯͨ
 ਺ेʙ਺ඦ ms / req ͕ൃੜ͠ͳ͘ͳͬͨ✨ มΘͬͨ͜ͱ ࣗಈͰεέʔϧΞ΢τ/Πϯ

Slide 50

Slide 50 text

- Lambda ΍։ൃ؀ڥͷϝϯςφϯε - ࠓճͷΑ͏ͳ Ruby on Lambda ͷ։ൃ؀ڥΛҰ౓࡞ͬͯ͠·͑͹ɺ
 ࠓޙͷLambda Functionͷ௥Ճɾमਖ਼ɾ࡟আ͸༰қ , - εέʔϥϏϦςΟ͕ωοΫͰରԠͰ͖ͳ͔ͬͨػೳվળ΋͠΍͘͢ - ը૾ϑΥʔϚοτ΍αΠζͷ֦ு - ը૾ͷ඼࣭ͷ࠷దԽͳͲ มΘͬͨ͜ͱ

Slide 51

Slide 51 text

- ۀ຿ͰRubyΛϝΠϯʹ৮͍ͬͯΔํ͸ Lambda ͸ͥͻ࢖͏΂͠ - ڞ௨ॲཧΛGemԽ͢Δ͜ͱͰɺඇಉظॲཧ౳Λ༰қʹLambdaʹ͍͚࣋ͬͯΔɻ - Serverless Framework ΍ AWS SAM Λར༻͢Δ͜ͱͰίετΛॻ͚ͣʹ
 αʔόʔϨεͳ։ൃɾCI/CD؀ڥΛߏஙͰ͖Δɻ - Native extentionʹґଘ͢Δgem΍֎෦ϥΠϒϥϦΛར༻͢Δ৔߹͸ Lambda ͱಉ ౳ͷ࣮ߦ؀ڥͰϏϧυ͠σϓϩΠ͢Δɻ - `lambci/lambda` Λϕʔεʹͨ͠Docker؀ڥͷߏஙΛ͢Δ͜ͱΛΦεεϝ͠·͢ ·ͱΊ

Slide 52

Slide 52 text

[ࢀߟ] EightͰͷ͜Ε·ͰͷServerlessࣄྫ

Slide 53

Slide 53 text

ϦΞϧλΠϜϦίϝϯσʔγϣϯػߏ JAWS Days 2017 : https://www.slideshare.net/YotaroFujii/jaws-days-2017eight AWS Dev Day Tokyo 2017 : https://speakerdeck.com/yas/awsgazhi-erueightrikomendesiyonenzinfalseli-ce

Slide 54

Slide 54 text

χϡʔεϑΟʔυը૾ͷѹॖ / Ωϟογϡػߏ EightͷཪଆΛࢧ͑Δٕज़ : https://buildersbox.corp-sansan.com/entry/cto_interview_1-1

Slide 55

Slide 55 text

͓ΘΓ 55

Slide 56

Slide 56 text

No content