Pro Yearly is on sale from $80 to $50! »

Webアプリエンジニアに贈る アプリケーション開発におけるサーバーレス流の考え方 / The concept of serverless in application development

Webアプリエンジニアに贈る アプリケーション開発におけるサーバーレス流の考え方 / The concept of serverless in application development

昨今、アプリケーションをつくるのに、様々な手段があります。「フルサーバーレス」はその一つで、マネージドサービスを駆使し効率的にアプリケーション開発を行うことができます。とはいえ、「アプリ開発」とひとことでいっても、必要な作業は多岐に渡ります。本セッションでは、Amazon EC2 に Play Framework + Scala で Webアプリ を構築する流れを比較対象の例にとり、サーバーレスで開発する場合の「考え方」を話します。言語や実装パターンの話よりも、典型的なWebアプリの開発手法がサーバーレスにおいても適用できるのか、またはまったく考え方を変えなければいけないのか、という議論が焦点です。

664b6e8ebe272fcfa5dbd6070eaf3cd4?s=128

Yusuke Wada

March 27, 2019
Tweet

Transcript

  1. 8FCΞϓϦΤϯδχΞʹଃΔ ΞϓϦέʔγϣϯ։ൃʹ͓͚ΔαʔόʔϨεྲྀͷߟ͑ํ "844FSWFSMFTT5FDIηϛφʔ

  2. ࣗݾ঺հ   ࿨ా༞հ Ϋϥεϝιουגࣜձࣾ αʔόʔϨε։ൃ෦ΤϯδχΞ XBEEZ@V

  3. खஈઌߦͷ෦ॺ͕Ͱ͖͔ͯΒ೥൒ʜ   ͳͥαʔόʔϨεͰ΍Δͷ͔Λߟ͑ΔΑΓ͸ɺ
 αʔόʔϨεͰ΍ͬͯΈͯͲ͏͔ʹॏ఺Λஔ͍͍ͯΔ෦Ͱ͢
 ͳΜͱ͔ੜ͖࢒͍ͬͯ·͢ ։ൃऀࢹ఺ͰɺαʔόʔϨε։ൃͷ ັྗΛ఻͑ʹདྷ·ͨ͠

  4. ͝஫ҙ   • εϥΠυ͸ެ։͠·͢ • ։ൃऀ޲͚Ͱ͢ • ίϯςφͷ࿩͸͠·ͤΜ •

    EC2 vs αʔόʔϨε ͱ͍͏ߏਤ͕ग़͖ͯ·͢ ͕ɺྑ͠ѱ͠ΛޠΔ΋ͷͰ͸ͳ͘ɺൺֱࡐྉͰ͢
  5. લఏɿαʔόʔϨεͷఆٛ   Ծ૝Խ Ϋϥ΢υ FaaS Ϛωʔδυ αʔϏε ΞϓϦέʔγϣϯ ϥϯλΠϜ

    ϛυϧ΢ΣΞ OS Ծ૝Խج൫ ϋʔυ΢ΣΞ Ϣʔβʔ Ϣʔβʔ Ϋϥ΢υϕϯμʔ Ϣʔβʔ Ϋϥ΢υϕϯμʔ Ϋϥ΢υϕϯμʔ αʔϏε੹೚Ϟσϧ
  6. લఏɿαʔόʔϨεͷఆٛ   Ծ૝Խ Ϋϥ΢υ FaaS Ϛωʔδυ αʔϏε ΞϓϦέʔγϣϯ ϥϯλΠϜ

    ϛυϧ΢ΣΞ OS Ծ૝Խج൫ ϋʔυ΢ΣΞ Ϣʔβʔ Ϣʔβʔ Ϋϥ΢υϕϯμʔ Ϣʔβʔ Ϋϥ΢υϕϯμʔ Ϋϥ΢υϕϯμʔ αʔϏε੹೚Ϟσϧ ͜ΕΒΛ૊Έ߹ΘͤΔ͜ͱ
  7. ຊൃදͰલఏͱ͍ͨ͠ίϯςΩετ   αʔόʔϨε։ൃεΩϧ͸։ൃऀʹͱͬͯັྗత Ձ஋ʹ௚݁͢Δ࡞ۀʹूத͠΍͍͢ 8FC"1*։ൃʹͱͲ·ΒͣɺϑϩϯτΤϯυ·Ͱ։ൃҙཉ ্ཱ͕ͪΔ ։ൃऀͱͯ͠ϨϕϧΞοϓͰ͖Δ

  8. ࣗ෼ޠΓͰັྗΛ఻͑Δ   2016/03 ΫϥϝιೖࣾɺαʔόʔαΠυAPI։ൃ 2017/01 AWS Lambda ʹ;ΕΔ 2017/10

    αʔόʔϨε։ൃ෦ઃཱ 2018/04 αʔόʔϨε։ൃ෦΁సଐ 2018/09 Serverlessconf Tokyo Ͱొஃ
  9. ࣗ෼ޠΓͰັྗΛ఻͑Δ   2016/03 ΫϥϝιೖࣾɺαʔόʔαΠυAPI։ൃ 2017/01 AWS Lambda ʹ;ΕΔ 2017/10

    αʔόʔϨε։ൃ෦ઃཱ 2018/04 αʔόʔϨε։ൃ෦΁సଐ 2018/09 Serverlessconf Tokyo Ͱొஃ 4DBMB 1MBZ'SBNFXPSL &$
  10. ࣗ෼ޠΓͰັྗΛ఻͑Δ   2016/03 ΫϥϝιೖࣾɺαʔόʔαΠυAPI։ൃ 2017/01 AWS Lambda ʹ;ΕΔ 2017/10

    αʔόʔϨε։ൃ෦ઃཱ 2018/04 αʔόʔϨε։ൃ෦΁సଐ 2018/09 Serverlessconf Tokyo Ͱొஃ "84 "OHVMBS J04
  11.   αʔόʔϨε։ൃ͸ɺ ʮ͜͜·Ͱཪଆ࡞ͬͨͳΒը໘΋࡞Γ͍ͨΘʯ ͱͳΔຐྗ͕͋Δ ։ൃऀͱͯ͠ϨϕϧΞοϓͰ͖Δ

  12. ຊൃදͷഎܠ   αʔόʔϨεʹ͍ͭͯͷٞ࿦ લఏɿ"84-BNCEBͱϚωʔδυαʔϏεͰΞϓϦΛ࡞Δ ٞ࿦ɿͲͷΑ͏ʹ։ൃ͢Δ͔ %ZOBNP%#ͷςʔϒϧઃܭΛ࢝Ίͱͨ͠ɺαʔϏε͝ͱͷ۩ମతͳ ࢖͍ํ͸͔ͳΓ৘ใ͕ॆ࣮͖ͯͨ͠ ҰํɺΞϓϦέʔγϣϯΛϑϧαʔόʔϨεͰ։ൃ͢Δͱ͖ͷࢦ਑ ΍ߟ͑ํɺૺ۰͕ͪ͠ͳ՝୊ʹର͢Δߟ࡯͕ੈʹग़͍ͯͳ͍

    ݱ৔ Ͱղܾ͍ͯ͠Δ ͱ͍͏ҹ৅
  13. ໨తͱΞϓϩʔν   ຊൃදͷ໨తɿ αʔόʔϨεͷಛੑΛ஌Δ 8FCΞϓϦΛϑϧαʔόʔϨεͰ։ൃ͢Δͱ͖ͷ՝୊Λग़͢ ՝୊ͷղܾࡦΛߟ࡯͢Δ αʔόʔϨεྲྀͷlߟ͑ํzΛಋ͘ ՝୊ղܾͷΞϓϩʔνɿ αʔόʔϨεͷಛੑΛߟྀͭͭ͠ɺ&$্ͰɺϑϨʔϜϫʔΫΛ࢖ͬͯ։

    ൃ͢Δ৔߹ͱൺֱ͢Δ
  14. ࿩͢಺༰ w αʔόʔϨεͷಛੑΛ஌Δ w αʔόʔϨε։ൃ;Γ͔͑Γͱ՝୊ w ՝୊ղܾ w αʔόʔϨεྲྀߟ͑ํͷ੔ཧ 

     NJO NJO NJO NJO
  15. ࿩͢಺༰ w αʔόʔϨεͷಛੑΛ஌Δ w αʔόʔϨε։ൃ;Γ͔͑Γͱ՝୊ w ՝୊ղܾ w αʔόʔϨεྲྀߟ͑ํͷ੔ཧ 

     NJO NJO NJO NJO
  16. αʔόʔϨεͷಛੑ    ϏδωεՁ஋ͱ੒Ռ෺ΛҰகͤ͞΍͍͢  ϒϨΠΫεϧʔ͕ԕ͍  αʔϏε੍ݶͱ͏·͘෇͖߹͑͹ɺԸܙΛଘ෼ʹಘ ΒΕΔ

  17. ϏδωεՁ஋ͱ੒Ռ෺ΛҰகͤ͞΍͍͢   -BNCEB'VODUJPOͱαʔϏεͷ૊Έ߹ΘͤͰ࣮૷͢ ΔͨΊɺಈ͔͢·Ͱͷख͕ؒஈҧ͍ʹগͳ͍ ͜Ε͸ɺಈ͔ͯ͠ΈΔ·ͰͲΜͳ੍໿ʹͿ͔ͭΔ͔Θ͔ Βͳ͍ɺαʔϏεΛͲ͏࢖͏ͷ͔΍ͬͯΈͳ͍ͱΠϝʔ δ͕༙͔ͳ͍ͱ͍͏ଆ໘ͱදཪҰମ ΢ΥʔλʔϑΥʔϧతͳਐΊํͰ͸ͳ͘ ࣗવͱػೳ͝ͱʹ։ൃ͢ΔྲྀΕʹͳΔ

  18. ϒϨΠΫεϧʔ͕ԕ͍   ܦݧଇ͔ΒֶशۂઢͷԾઆΛͨͯͯΈͨ

  19. ֶशۂઢͷԾઆ˞8FCΞϓϦͷ৔߹   ։ൃʹैࣄͨ࣌ؒ͠ ֶश཰ ϑϨʔϜϫʔΫར༻ EC2 αʔόʔϨε

  20. ֶशۂઢͷԾઆ˞8FCΞϓϦͷ৔߹   ։ൃʹैࣄͨ࣌ؒ͠ ֶश཰ ୈϑΣʔζɿ αʔόʔϨεͷҖྗΛ஌Δ

  21. ୈϑΣʔζɿ αʔόʔϨεͷ՝୊Λײ͡Δ ˞ࠓ೔࿩͢՝୊΋͜ͷ෦෼Ͱग़ͯ͘Δ΋ͷ͕΄ ͱΜͲͰ͢ ֶशۂઢͷԾઆ˞8FCΞϓϦͷ৔߹   ։ൃʹैࣄͨ࣌ؒ͠ ֶश཰

  22. ֶशۂઢͷԾઆ˞8FCΞϓϦͷ৔߹   ։ൃʹैࣄͨ࣌ؒ͠ ֶश཰ ୈϑΣʔζɿ ϒϨΠΫεϧʔ͕དྷΔ͸ͣ

  23. ϒϨΠΫεϧʔ͕ԕ͍   ൃදऀͷ৔߹ɿ  αʔόʔϨε։ൃॳظɺͰ͖Δ͜ͱͷ๛෋͞ʹײಈ  ൒೥ʙ೥ޙɺ੒ख़͍ͯ͠ͳ͍ΤίγεςϜͱ֨ಆɺ αʔϏε੍ݶͷߟྀͰເඳ͍ͨ΄ͲΞ΢τϓοτ͕ग़ ͤͳ͍

     αʔόʔϨεͷͨΊʹҰਓͰຉ૸͢ΔͷͰ͸ͳ͘ɺप ΓΛר͖ࠐΉͱ΋͏Ұஈ֊ޮ཰͕͕͋Δ͜ͱʹؾͮ͘
  24. αʔϏε੍ݶͱ͏·͘෇͖߹͏   ҰൠతͳαʔόʔϨεͷ࿩ͱͯ͠Α͘ฉ͘ɿ Ϧιʔεͷ্ݶ΍ػೳతͳ੍ݶΛड͚ೖΕΔ୅ΘΓʹɺεέʔ ϥϏϦςΟΛ͸͡Ίͱͨ͠αʔϏεͱͯ͠ͷϝϦοτΛڗडͰ ͖Δɻ ։ൃऀͱͯ͜͠ͷ࿩ΛͲ͏ࢥ͏͔ɿ ࣄ࣮ɻͨͩ͠ɺαʔϏεͱͯ͠ͷ੍ݶࣄ߲͕μΠϨΫτʹཁ݅ ΍࢓༷ʹӨڹ͢ΔɻυϝΠϯΤΩεύʔτΛר͖ࠐΜͰɺͲΜ

    ͳϏδωεՁ஋ΛੜΈग़͍͔ͨ͠Λఆٛ͢Δ࡞ۀ͕ඞਢɻ
  25. αʔϏε੍ݶͱ͏·͘෇͖߹͏   ҰൠతͳαʔόʔϨεͷ࿩ͱͯ͠Α͘ฉ͘ɿ Ϧιʔεͷ্ݶ΍ػೳతͳ੍ݶΛड͚ೖΕΔ୅ΘΓʹɺεέʔ ϥϏϦςΟΛ͸͡Ίͱͨ͠αʔϏεͱͯ͠ͷϝϦοτΛڗडͰ ͖Δɻ ։ൃऀͱͯ͜͠ͷ࿩ΛͲ͏ࢥ͏͔ɿ ࣄ࣮ɻͨͩ͠ɺαʔϏεͱͯ͠ͷ੍ݶࣄ߲͕μΠϨΫτʹཁ݅ ΍࢓༷ʹӨڹ͢ΔɻυϝΠϯΤΩεύʔτΛר͖ࠐΜͰɺͲΜ

    ͳϏδωεՁ஋ΛੜΈग़͍͔ͨ͠Λఆٛ͢Δ࡞ۀ͕ඞਢɻ Կ͕͍͔ͨ͠ʁͱ͍͏࿩͕͋ͬͯ͸͡Ίͯɺ ͜ͷαʔϏε͕߹͏͔ʁ ੍ݶ͕ड͚ೖΕΒΕΔ͔ʁ ͷٞ࿦͕Ͱ͖Δ͔Β
  26. ࿩͢಺༰ w αʔόʔϨεͷಛੑΛ஌Δ w αʔόʔϨε։ൃ;Γ͔͑Γͱ՝୊ w ՝୊ղܾ w αʔόʔϨεྲྀߟ͑ํͷ੔ཧ 

     NJO NJO NJO NJO
  27. αʔόʔϨεͷৼΓฦΓ   $BTF AWS Lambda ʹ৮ΕΔ $BTF σʔλऩूج൫ͷPoC։ൃ $BTF

    iOSΞϓϦͷҐஔ৘ใΛ׆༻ͨ͠CMS $BTF εϚʔτ୐഑ϙετ ͷIoT αʔόʔ
  28. ɹɹɹɹ"84ͱαʔόʔϨεͱ๻   2016/03 ΫϥϝιೖࣾɺαʔόʔαΠυAPI։ൃ 2017/01 AWS Lambda ʹ;ΕΔ 2017/10

    αʔόʔϨε։ൃ෦ઃཱ 2018/04 αʔόʔϨε։ൃ΁సଐ 2018/09 Serverlessconf Tokyo Ͱొஃ ͜ͷ࿩ $BTF
  29. ΋ͱ΋ͱ&$Ͱ8FC"1*։ൃΛ΍͍ͬͯͨ   Ծ૝௨՟؅ཧγεςϜͷ όοΫΤϯυ

  30.   ӡ༻։࢝ͯ͠ฏ࿨ͳ೔ʑʹಥવͷΞϥʔτ

  31.   ϩάΠϯϑΥʔϜ͕DoS߈ܸΛड͚͍ͯΔ

  32. ϩάΠϯϑΥʔϜʹ%P4   ϩάͳͲΛݟͯΈΔͱ࣮ମ͸ύεϫʔυϦετ߈ܸΆ͍ ෛՙ͕Ұؾʹ্ঢɺ"VUP4DBMJOH(SPVQͷ࠷େ୆਺ Λͱ͍ͯͨͨ͠ΊϦιʔεރׇɺҰൠར༻ऀʹӨڹ $MPVE'SPOU 8"'Λઃஔ͠*1ΞυϨεͰϒϩοΫ
 ౰࣌͸"-#ʹ8"'ΛઃஔͰ͖ͳ͔ͬͨ 

    ͱ͜Ζ͕߈ܸऀ͸͙͢͞·*1ΞυϨεΛมߋɺΠλνͬ͝ ͜ʹ
  33. "848"'ͷ*1ΞυϨεϒϩοΫΛࣗಈઃఆ͢Δ   ᶃ WAF Λؔ࿈෇͚ ᶄ fluentd Ͱ nginx

    ͷ
 ɹϩάΛS3ʹू໿ ※౰࣌͸WAFͷϨʔτϦϛοτͳ͠ ᶅ ϧʔϧʹج͖ͮ
 ɹIPϒϩοΫ
  34. "848"'ͷ*1ΞυϨεϒϩοΫΛࣗಈઃఆ͢Δ   ᶃ WAF Λؔ࿈෇͚ ᶄ fluentd Ͱ nginx

    ͷ
 ɹϩάΛS3ʹू໿ ※౰࣌͸WAFͷϨʔτϦϛοτͳ͠ ᶅ ϧʔϧʹج͖ͮ
 ɹIPϒϩοΫ ਓ͕͔Γɺ೔Ͱߏங ࣍ͷ೔ʹຊ൪ద༻
  35.   ͋Ε…αʔόʔϨε͘͢͝Ͷʁ

  36. ͜͜Ͱग़ͨ՝୊   ͳ͠ ଈޮੑͱεέʔϥϏϦςΟ Կ΋ͳ͍ͱ͖͸Կ΋͠ͳ ͍ ͕ٻΊΒΕΔϝϯςφϯεෆཁͳγεςϜʹαʔόʔ Ϩε͸͏͚ͬͯͭ ͍·΋ݩؾʹಈ͍͍ͯ·͢

  37. ɹɹɹɹɹσʔλऩूج൫ͷ1P$։ൃ   αʔόʔϨε։ൃ෦΁ సଐͯ͠࠷ॳͷ։ൃ Ͳ͏ಈ͘ͷ͔ݟ͍ͨ ͱ͍͏͜ͱͰ41"΋ ࡞ͬͨ αʔόʔଆ"1*
 ϑϩϯτଆ8FC


    ͱ͍͏ߏ੒ $BTF
  38. ͜͜Ͱग़ͨ՝୊   ͦ΋ͦ΋Ͳ͏΍ͬͯ-BNCEB'VODUJPOΛ։ൃ͢Ε͹ ྑ͍ͷ͔ʁ w "84ίϯιʔϧͰ1ZUIPOΛॻ͍ͨ w "84ίϯιʔϧ͸͙͢ʹ࣮ߦͰ͖ɺ͙͢ʹमਖ਼Ͱ͖ Δ఺Ͱ༏ल

    w ͨͩ͠ɺόʔδϣϯ؅ཧͳ͠ɺϑΝΠϧʹ͢΂ͯͷ ॲཧɺίʔυͷݟ௨͕͠ѱ͍ঢ়گʹͳͬͨ
  39. J04ΞϓϦͷҐஔ৘ใΛ׆༻ͨ͠$.4   ෳ਺ͷೖྗιʔεɺ ෳ਺ͷग़ྗઌɺ 4UFQ'VODUJPOTͷ ׆༻ αʔόʔଆ"1*
 ϑϩϯτଆ8FC J04

    
 AWS Cloud Mobile App Amazon Kinesis Data Firehose Amazon Kinesis Data Streams Amazon Cognito device table report table Amazon Pinpoint AWS Identity and Access Management (IAM) content location log Amazon Rekognition report api user files update location register report Center UI Create and push mission Center UI View result analysis & store create / push api AWS Step Functions 1. targeting location 2. create segment 3. order push list report get analysis result get reports of a mission login / signup stream gps report mission report image / movie push notification $BTF
  40. ͜͜Ͱग़ͨ՝୊   ΞϓϦέʔγϣϯઃܭɻೖྗιʔεͱग़ྗઌΛͲ͏දݱ ͢Δ͔ʁ w ͜͏ͳΔͱ"84ίϯιʔϧͰͷ։ൃ͸ෆՄೳ w -BNCEB'VODUJPOTͷ෼ׂͱσϓϩΠΛߟ͑Δඞ ཁ͕͋Γͦ͏

  41. ͜͜·Ͱ   ։ൃʹैࣄͨ࣌ؒ͠ ֶश཰ ୈϑΣʔζɿ αʔόʔϨεͷҖྗΛ஌Δ

  42. ୈϑΣʔζɿ αʔόʔϨεͷ՝୊Λײ͡Δ ˞ࠓ೔࿩͢՝୊΋͜ͷ෦෼Ͱग़ͯ͘Δ΋ͷ͕΄ ͱΜͲͰ͢ ͔͜͜Β   ։ൃʹैࣄͨ࣌ؒ͠ ֶश཰

  43. גࣜձࣾ-*9*-༷εϚʔτ୐഑ϙεταʔόʔ   $BTF

  44.   "84*P5ͷར༻ ূ໌ॻͷδϟετΠ ϯλΠϜొ࿥ *P55PQJDTܦ༝Ͱͷ "84-BNCEBىಈ νʔϜ։ൃ ਓ 

    ֎෦ϕϯμʔͱͷ݁ ߹ࢼݧ גࣜձࣾ-*9*-༷εϚʔτ୐഑ϙεταʔόʔ $BTF
  45.   αʔόʔϨεͭΒ͍

  46. ͜͜Ͱग़ͨ՝୊   w εςʔδ؀ڥͱຊ൪؀ڥͰσϓϩΠΛ෼͚͍ͨ৔߹Ͳ ͏͢Ε͹͍͍ΜͰ͔͢ʁ w Ͳ͜ΛͲ͏ςετ͢Ε͹ྑ͍ΜͰ͔͢ʁ w ಥવإΛग़͢"84αʔϏε੍ݶ

    w Α͠νʔϜ։ൃͩʂͰɺͲ͏΍ͬͯ෼୲͢Δͷʁ
  47. σϓϩΠͲ͏͢Ε͹͍͍ͷ   ؀ڥΛ۠ผ͢Δέʔε͕ҟͳΔ ಉ͡"84ΞΧ΢ϯτʹ։ൃ༻Ϧιʔεɺຊ൪༻ϦιʔεΛ໊ લͰ۠ผͯ͠σϓϩΠ͍ͨ͠έʔε ։ൃ༻"84ΞΧ΢ϯτɺຊ൪༻"84ΞΧ΢ϯτͱ෼͚ͯσ ϓϩΠ͍ͨ͠έʔε ؀ڥ͝ͱʹར༻͍ͨ͠ύϥϝʔλ͕͋Δ

  48. Ͳ͜ΛͲ͏ςετ͢Ε͹ྑ͍ͷ   ͱΓ͋͑ͣϢχοτςετ΍Ζ͏ "1*(BUFXBZͷೖྗΛϞοΫԽɺ%ZOBNP%#ͷ(FU*UFNΛ ϞοΫԽ +40/ͷม׵ॲཧΛςετ͍ͯ͠Δ͚ͩʜ ͍͟σϓϩΠ࣮ͯ͠ߦͯ͠ΈͨΒ*".ͷݖݶෆ଍Ͱ "DDFTT%FOJFEΤϥʔൃੜʗ ?P?

    ʘ
  49. ௚໘͢Δ"84αʔϏε੍ݶ   ಈ࡞֬ೝதɺ%ZOBNP%#ͰṖͷΤϥʔൃੜ 1SPWJTJPOFE3FBE$BQBDJUZ6OJUΛΦʔόʔ͍ͯͨͨ͠Ί *P55PQJDTͷΞΫγϣϯͰΫϥΠΞϯτূ໌ॻͷ $MJFOU*Eऔಘࣦഊ )5514ϓϩτίϧͩͱূ໌ॻͷ$MJFOU*E͕औಘͰ͖ͳ͍࢓ ༷ ઃܭ΁ख໭Γ͢ΔཁҼͱͳͬͯ͠·ͬͨ

  50. νʔϜ։ൃͷ෼୲Ͳ͏͢Δͷʁ   αʔόʔ୲౰ɺ41"୲౰ɺސ٬૭ޱʁ ػೳ͝ͱʹ૭ޱʹ΋ͳͬͯαʔόʔ͔Β41"·Ͱ΍Δͷ ͕ྑ͍ʁ

  51.   ৼΓฦΓͰग़͖ͯͨ՝୊Λ੔ཧ

  52. ;Γ͔͑ΓͰग़͖ͯͨ՝୊Λ੔ཧ͢Δ   Ͳ͏΍ͬͯίʔυΛॻ͔͘ ͲͷΑ͏ʹίʔυઃܭ͢Δ͔ Ͳ͏σϓϩΠ͢Δ͔ ςετͷॏ఺ΛͲ͜ʹஔ͔͘ ϓϩδΣΫτͷਐΊํͱνʔϜ։ൃํ๏

  53.   ՝୊੔ཧฤɾ׬ʂ ղܾࡦΛߟ͍͑ͯ͘

  54. ࿩͢಺༰ w αʔόʔϨεͷಛੑΛ஌Δ w αʔόʔϨε։ൃ;Γ͔͑Γͱ՝୊ w ՝୊ղܾ w αʔόʔϨεྲྀߟ͑ํͷ੔ཧ 

     NJO NJO NJO NJO
  55. ;Γ͔͑ΓͰग़͖ͯͨ՝୊Λ੔ཧ͢Δ   Ͳ͏΍ͬͯίʔυΛॻ͔͘ ͲͷΑ͏ʹίʔυઃܭ͢Δ͔ Ͳ͏σϓϩΠ͢Δ͔ ςετͷॏ఺ΛͲ͜ʹஔ͔͘ ϓϩδΣΫτͷਐΊํͱνʔϜ։ൃํ๏ Ͳ͔͜Ͱݟͨ͜ͱ͕͋ΔΑ͏ͳ಺༰ ΘΕΘΕ͕&$ͰΞϓϦΛ։ൃ͢Δͱ͖ʹ௨ͬͨ

    &$Λ࢖͏৔߹͸Ͳ͏͢Δ͔͕ࢀߟʹͳΔͷͰ͸
  56. Ͳ͏΍ͬͯίʔυΛॻ͔͘   ։ൃऀͷ࡞ۀޮ཰͕Ұ൪ྑ͍؀ڥΛ༻ҙ͢Δ ࢖͍׳Εͨ*OFMMJKΛ࢖͍ɺϩʔΧϧ؀ڥͰ։ൃ͢Δ ϩʔΧϧ࡞ۀ͕ऴΘͬͨΒ"84$PEF%FQMPZ΍DBQJTUSBOP ͰσϓϩΠ͢Δ (JU)VCͰόʔδϣϯ؅ཧ͢Δ &$

  57. Ͳ͏΍ͬͯίʔυΛॻ͔͘   -BNCEB'VODUJPOΛ։ൃ͢Δ৔߹΋ಉ͡ lίʔυΛॻ͘zͱ͍͏࡞ۀʹ͓͍ͯ͸ɺϩʔΧϧͰ࢖͍ ׳Εͨ؀ڥͷ΋ͱߦ͏ͷ͕ޮ཰ྑ͍ *OUFMMJKΛར༻ͯ͠5ZQF4DSJQU OPEFKT ΍1ZUIPOΛ ॻ͘

    "NB[PO$PEF$PNNJUΛ࢖ͬͯόʔδϣϯ؅ཧ "84$-*΍$MPVE'PSNBUJPOΛ࢖ͬͯσϓϩΠʢޙड़ʣ αόϨε
  58. ͲͷΑ͏ͳίʔυઃܭΛߦ͏͔   ϑϨʔϜϫʔΫͷઃܭํ਑ʹै͏ ΫϦʔϯΞʔΩςΫνϟͳͲͷಋೖʹΑΔυϝΠϯϩδο Ϋͷ෼཭ &$

  59. ͲͷΑ͏ͳίʔυઃܭΛߦ͏͔   -BNCEB'VODUJPOͷίʔυͰ΋ಉ͡ߟ͑ํ͕ద༻Ͱ͖Δ υϝΠϯϩδοΫΛ෼཭͢Δ͜ͱͰԿ͕͍ͨ͠ͷ͔Λදݱ Ͱ͖Δ ·ͨɺ୭͕-BNCEB'VODUJPOΛىಈͯ͠ɺ-BNCEB 'VODUJPO͕ͲͷαʔϏεΛݺͼग़͢ͷ͔ΛΘ͔Γ΍͘͢ ͓ͯ͘͠ ϨΠϠԽΞʔΩςΫνϟ͕Ϛονͦ͠͏

    αόϨε
  60. ઃܭྫ   αόϨε IBOEMFST EPNBJOT JOGSBTUSVDUVSFT BQJHXVTFS report.ts FWFOUDPOUFOU

    report-put.ts EZOBNPEC report.ts T content.ts
  61. ઃܭྫ   αόϨε IBOEMFST EPNBJOT JOGSBTUSVDUVSFT BQJHXVTFS report.ts FWFOUDPOUFOU

    report-put.ts EZOBNPEC report.ts T content.ts VTFS޲͚ͷ"1*(BUFXBZ ͔Βىಈ͞ΕΔ SFQPSUϦιʔεʹؔ࿈͢Δॲ ཧ
  62. ઃܭྫ   αόϨε IBOEMFST EPNBJOT JOGSBTUSVDUVSFT BQJHXVTFS report.ts FWFOUDPOUFOU

    report-put.ts EZOBNPEC report.ts T content.ts %ZOBNP%#ʹର͢Δॲཧ SFQPSUςʔϒϧΛૢ࡞͢Δ
  63. ͲͷΑ͏ͳίʔυઃܭΛߦ͏͔   ͦ͏͸ݴͬͯ΋θϩ͔ΒϓϩδΣΫτϑΥϧμ࡞Δͷ͸ͪΐͬͱେ มɺςϯϓϨʔτ͕΄͍͠ (JU)VCͰߏ੒ҊΛެ։͍ͯ͠·͢ 1ZUIPO QZUIPOMBNCEBUFNQMBUFIUUQTHJUIVCDPNDNXBEBZVTVLF QZUIPOMBNCEBUFNQMBUF 5ZQF4DSJQU

    UTBTIUUQTHJUIVCDPNDNXBEBZVTVLFUTBT αόϨε
  64. Ͳ͏΍ͬͯσϓϩΠ͢Δ͔   ΞϓϦέʔγϣϯʢ+"3ʣ "OTJCMF 1BDLFSͰ(PMEFO ".*Λͭ͘Δ3BLFpMFΛ༻ҙ ؀ڥͷҧ͍͸SBLF࣮ߦ࣌ͷίϚϯυϥΠϯม਺Ͱ۠ผ ؀ڥύϥϝʔλͷҧ͍͸؀ڥ͝ͱͷ஋Λ4ͳͲʹ͓͍͓ͯ ͖ɺ"OTJCMF࣮ߦ࣌ʹ&$ͷ؀ڥม਺΁ల։͢Δ

    ઃఆϑΝΠϧ εΫϦϓτͰσϓϩΠͰ͖ΔΑ͏ʹ͢Δ ؀ڥͷࠩ෼͸ผ్ύϥϝʔλ༻ϑΝΠϧʹ੾Γग़͢ &$
  65. Ͳ͏΍ͬͯσϓϩΠ͢Δ͔   &$ʹσϓϩΠ͢Δͱ͖ͱಉ͡ߟ͑ํ͕ద༻Ͱ͖Δ ઃఆϑΝΠϧ $MPVE'PSNBUJPOϕʔεͷ:".-ϑΝΠϧ εΫϦϓτ "84$-*ɺ4FSWFSMFTT'SBNFXPSLͳͲ ؀ڥࠩ෼ ؀ڥ͝ͱʹύϥϝʔλΛ༻ҙ

    αόϨε
  66. ͦΕͰ΋ʜ   $MPVE'PSNBUJPOςϯϓϨʔτΛ࢖ͬͯ؀ڥผʹσϓϩΠ͠Α ͏ͱࢥ͏ͱɺύϥϝʔλͷऔΓճ͠Ͱ޻෉͕ඞཁ σϓϩΠͨ͠ޙʹ&&ςετ͠Α͏ͱࢥ͏ͱɺ࣮ࡍʹར༻͍ͯ͠ Δύϥϝʔλ͕ඞཁ ؀ڥ͝ͱͷύϥϝʔλΛ4ZTUFNT.BOBHFS1BSBNFUFS 4UPSFʹ͋͛ͯ࢖͏ܰྔͳσϓϩΠπʔϧΛ࡞Γ·ͨ͠ʢએ఻ʣ αόϨε

  67. ͜͜·Ͱ੔ཧ   Ͳ͏΍ͬͯίʔυΛॻ͔͘ ࢖͍׳ΕͨΤίγεςϜΛ׆༻͢Δ ͲͷΑ͏ʹίʔυઃܭ͢Δ͔ -BNCEB'VODUJPO͕Ͳ͔͜Βىಈ͞ΕɺͲͷαʔϏεΛݺͼग़͔͢Λ໌ ࣔ͢Δ Ͳ͏σϓϩΠ͢Δ͔ ઃఆϑΝΠϧ

    εΫϦϓτ $MPVE'PSNBUJPOςϯϓϨʔτ "84$-*
  68. ςετͷॏ఺ΛͲ͜ʹஔ͔͘   ॻ͍ͨίʔυ͕ΞϓϦέʔγϣϯͷ΄΅͢΂ͯ )551ϦΫΤετ΍σʔλϕʔεॲཧΛϞοΫԽɺॻ͍ ͨίʔυΛ໢ཏ͢Δ ϩʔΧϧʹ.Z42-΍μϛʔαʔϏεΛىಈ͠ɺ֤छ֎ ք΁ͷॲཧͷJNQMFNFOUBUJPO͕ҙਤͲ͓Γʹಈ࡞͠ ͍ͯΔ͜ͱΛ֬ೝͰ͖Δͱͳ͓Α͍ &$

  69. ςετͷॏ఺ΛͲ͜ʹஔ͔͘   &$ΞϓϦέʔγϣϯͷςετͱ͸ߟ͑ํ͕ҟͳΔ αʔόʔϨεͷ৔߹ɺػೳ͝ͱͷ&&ςετʹॏ఺Λஔ͘ ࣮ࡍʹ"84ʹσϓϩΠͯ͠ಈ͔ͯ͠Έͳ͍ͱΘ͔Βͳ͍͜ͱ͕ ଟ͍ͨΊ *".ɺϦτϥΠॲཧͳͲʜ  ҎԼͷྲྀΕ

    -BNCEB'VODUJPOͱ"84ϦιʔεΛ࣮ࡍʹσϓϩΠ͢Δ
 1BSBNFUFS4UPSF͔Βςετର৅ͱͳΔ؀ڥͷύϥϝʔλΛಡΈग़͢
 ϢʔεέʔεʹԊ࣮ͬͯࡍʹϦΫΤετΛߦ͍ςετ͢Δ αόϨε
  70. ςετͷྫ QZUFTU   αόϨε @pytest.fixture(scope='session', autouse=False) def ssm_parameters(request) ->

    SsmParameters: env = request.config.getoption('--env') yield make_parameters(env) def make_parameters(env) -> SsmParameters: # from SSM function_args = { 'Path': f'/{env}', 'Recursive': True, 'WithDecryption': True, 'MaxResults': 10, } response = SSM.get_parameters_by_path(**function_args) current_batch, next_token = extract_result(response) result = current_batch while next_token is not None: #࠶औಘ parameters_from_ssm = \ {extract_parameter_name(parameter): parameter['Value'] for parameter in result} ssm_parameters = SsmParameters(parameters_from_ssm) return ssm_parameters 1BSBNFUFS4UPSF͔Βσʔ λΛऔಘ͠ΦϒδΣΫτੜ੒ ϑΟΫενϟͱͯ͠ఆٛ͢Δ ͜ͱͰ֤ςετͰύϥϝʔλ ͕ར༻Ͱ͖Δ
  71. νʔϜ։ൃ   γεςϜͷڥքͱ։ൃϝϯόʔͷ୲౰ڥք͕Ұக͕ͪ͠ ސ٬૭ޱ
 αʔόʔʢ"1*ɺόονʣ୲౰
 8FCը໘୲౰
 ϞόΠϧΞϓϦ୲౰ ֤୲౰ɺಛʹαʔόʔαΠυ͸ߟ͑Δ͜ͱ͕ଟ͍ &$

  72. αʔόʔαΠυ։ൃͰߟྀ͢Δ͜ͱ   εέʔϧઃܭ σϓϩΠखॱͷ੔ཧ ΞʔΩςΫνϟઃܭɾϩδοΫ૊Έ্͛ 3VCZPO3BJMTͩͱ8FCը໘Λ࡞Δ͜ͱ΋ ϩάઃܭʢूੵɾΞϥʔτઃఆʣ &$ ଞʹख͕ճΒͳ͍

  73. νʔϜ։ൃ   &$ΞϓϦέʔγϣϯͷνʔϜ։ൃͱ͸ߟ͕͑ҟͳΔ ػೳϏδωεՁ஋͝ͱʹཁ݅ௐ੔ɾαʔόʔɾϑϩϯ τΛҰਓͷ։ൃऀ͕୲౰͢Δͱޮ཰͕ྑ͍ αʔόʔϨε։ൃͰࢧ഑తͳίϛϡχέʔγϣϯΦʔόʔ ϔουͷ࡟ݮʹͳΔʢޙड़ʣ αʔόʔαΠυʹશ౤ೖͤ͟ΔΛಘͳ͔ͬͨ։ൃऀͷϦ ιʔεΛɺϏδωε΍ผͷίϯϙʔωϯτʹׂ͚Δ

    αόϨε
  74. ϓϩδΣΫτͷਐΊํ   &$ͱൺֱ͢Δ΋ͷͰ͸ͳ͍͕ɺ͜Ε·Ͱͱ͸ߟ͑ํΛม ͑Δඞཁ͕͋Δ͔΋͠Εͳ͍ ఻౷తͳϓϩδΣΫτͷਐΊํ ཁ݅ௐ੔
 ࢓༷ௐ੔
 ։ൃ
 ςετ


    σϓϩΠ
 ϦϦʔεɺӡ༻ αόϨε
  75. ͜ΕΛαʔόʔϨε։ൃͰ΍Δ৔߹   ͢΂ͯͷ"84αʔϏεͷ੍ݶࣄ߲Λ೺Ѳ͓ͯ͘͠ ͢΂ͯͷ"84αʔϏεͷػೳΛ೺Ѳ͓ͯ͘͠ ཁ݅ͷ࣮ݱՄ൱Λ൑அ͢Δ ࢓༷ͷଥ౰ੑΛ൑அ͢Δ ͍͟։ൃ΁ αόϨε

  76.   ແཧ

  77. ϓϩδΣΫτͷਐΊํ   ݱ࣮తͳαʔόʔϨε։ൃͷεςοϓ ཁ݅ௐ੔"84ར༻αʔϏεબఆݕূཁ݅֬ఆ ࢓༷ௐ੔ΞʔΩςΫνϟઃܭ1P$։ൃ࢓༷֬ఆ ։ൃ ςετ σϓϩΠ ϦϦʔεɺӡ༻

    αόϨε × ػೳ
  78. ϓϩδΣΫτͷਐΊํ   ݱ࣮తͳαʔόʔϨε։ൃͷεςοϓ ཁ݅ௐ੔"84ར༻αʔϏεબఆݕূཁ݅֬ఆ ࢓༷ௐ੔ΞʔΩςΫνϟઃܭ1P$։ൃ࢓༷֬ఆ ։ൃ ςετ σϓϩΠ ϦϦʔεɺӡ༻

    αόϨε ͜͜ʹؔΘΔਓ਺͕ଟ͚Ε͹ ଟ͍΄Ͳίετ͕രൃ͢Δ υϝΠϯΤΩεύʔτͱ։ൃऀ ͷਓମ੍͕ཧ૝
  79. αʔόʔϨε։ൃ੒ޭͷΧΪ   ཁ݅ௐ੔"84ར༻αʔϏεબఆݕূཁ݅֬ఆ ࢓༷ௐ੔ΞʔΩςΫνϟઃܭ1P$։ൃ࢓༷֬ఆ ͜ͷεςοϓ͕ͦ΋ͦ΋ඞཁͰ͋Δ͜ͱΛεςʔΫϗϧ μʔʹཧղͯ͠΋Β͏ ͜ͷεςοϓͷͨΊͷظؒΛઃ͚Δ ։ൃऀ͕ϏδωεΛ೺Ѳ͠ɺ͜ͷεςοϓΛޮ཰Խɾল ྗԽ͢Δ

    αόϨε
  80. ՝୊ղܾฤͷ੔ཧ   ߟ͑ํ ίʔσΟϯά؀ڥ ࢖͍׳ΕͨΤσΟλ όʔδϣϯ؅ཧ ࢖͍׳ΕͨΤσΟλ όʔδϣϯ؅ཧ ಉ͡

    ίʔυઃܭ υϝΠϯϩδοΫ෼཭ ϨΠϠԽ ಉ͡ σϓϩΠ "OTJCMF 1BDLFS  3BLFλεΫ $MPVE'PSNBUJPO "84$-* 4FSWFSMFTT'SBNFXPSL ಉ͡ ςετͷॏ఺ ΞϓϦέʔγϣϯ ίʔυ ࣮ݱ͍ͨ͠ػೳ ҟͳΔ νʔϜ։ൃํ๏ γεςϜڥքͰ෼୲ ࣮ݱ͍ͨ͠ػೳͰ෼୲ ҟͳΔ ϓϩδΣΫτͷਐΊํ  ػೳ͝ͱʹσϓϩΠαΠΫϧ Λճ͢  &$ αόϨε
  81. ࿩͢಺༰ w αʔόʔϨεͷಛੑΛ஌Δ w αʔόʔϨε։ൃ;Γ͔͑Γͱ՝୊ w ՝୊ղܾ w αʔόʔϨεྲྀߟ͑ํͷ੔ཧ 

     NJO NJO NJO NJO
  82. αʔόʔϨεྲྀͷߟ͑ํ   ม͑ͳͯ͘ྑ͍΋ͷɺม͑Δͱޮ཰্͕͕Δ΋ͷΛ஌Δ खஈઌߦͱϕϯμʔϩοΫΠϯΛڐ༰͢Δ ·ΘΓΛר͖ࠐΜͰҰॹʹ։ൃͯ͠΋Β͏

  83. ม͑ͳͯ͘ྑ͍΋ͷɺม͑Δͱޮ཰্͕͕Δ΋ͷΛ஌Δ   αʔόʔϨε։ൃΛଓ͚͍ͯΔͱɺগͳ͔ΒͣนʹͿͪ͋ ͨΔ͜ͱʹͳΔ ͜Ε·Ͱഓ͖ͬͯͨϝλ஌͕ࣝ໾ʹཱͭ ͳʹ͔՝୊͕ग़ͨΒɺ͜Ε·Ͱ͸Ͳ͏͍͔ͯͨ͠ɺͳͥ͜ Ε·Ͱ͸՝୊Ͱ͸ͳ͔ͬͨͷ͔ͱ͍͏ࢥߟ࣮ݧ͕ޮՌత ୲౰ྖҬ͕ਫฏʹ޿͕ΔͷͰɺ ʢϏδωεՁ஋ͷߟ࡯ɺϑϩϯτΤϯυʣ

    ՝୊ʹ௚໘͢Δͷ͸౰ͨΓલ
  84. खஈઌߦͱϕϯμʔϩοΫΠϯΛڐ༰͢Δ   αʔόʔϨε։ൃ͸͔ͨ͠ʹಘҙͳྖҬɺۤखͳྖҬ͸͋Δ ͕ɺϦεΫΛආ͚ͯ෦෼తͳద༻ʹͷΈऴ͍࢝ͯͯ͠͸εΩ ϧΞοϓ͸๬Ίͳ͍ Α͘Θ͔ΒΜ͚ͲͱΓ͋͑ͣϑϧαʔόʔϨεͰɺ"84αʔ Ϗε͚ͩΛ࢖ͬͯ΍Δͧʂͱ͍͏૊৫୯ҐͰͷࢥ͍੾Γ΋࣌ ʹ͸ඞཁ ৽͍͠ύϥμΠϜ΁ͷ౤ࢿ͕

    ։ൃऀͱͯ͠ͷεΩϧΞοϓʹͭͳ͕Δ
  85. ·ΘΓΛר͖ࠐΜͰҰॹʹ։ൃͯ͠΋Β͏   ϓϩμΫτΦʔφʔ΍Ϛωʔδϟʔ͕ϝοηϯδϟʔʹͳͬͯཁ݅ɾ ࢓༷ɾ࣮ݱՄ൱Λ΍ΓͱΓ͍ͯ͠Δঢ়گͰ͸αʔόʔϨε։ൃ͸ෆՄೳ ։ൃऀ͕Ϗδωεͷ͜ͱΛ஌ΓɺϓϩμΫτΦʔφʔ΍υϝΠϯΤΩε ύʔτ͕"84αʔϏεͷ͜ͱΛ஌Δ Կ͕͍͔ͨ͠ɺϢʔβʔʹͲ͏ͳͬͯ΄͍͔͠Λৗʹ໰͍ଓ͚Δ ϏδωεϢʔεέʔεΛ"84ʹϑΟʔυόοΫ͢Δ ϢʔβʔʹՁ஋Λಧ͚Δͱ͍͏఺Ͱ

    αʔόʔϨε͸࠷଎
  86. ࢀߟॻ੶ɾར༻ͨ͠πʔϧ   w DODGXHTFSWFSMFTT$/$'4FSWFSMFTT8(IUUQTHJUIVCDPNDODGXHTFSWFSMFTT w "844".IUUQTEPDTBXTBNB[PODPNKB@KQMBNCEBMBUFTUEHTFSWFSMFTT@BQQIUNM w .BLF(/61SPKFDUIUUQTXXXHOVPSHTPGUXBSFNBLF w

    QZUFTUEPDVNFOUBUJPOIUUQTEPDTQZUFTUPSHFOMBUFTU w DNXBEBZVTVLFUTBTUIUUQTHJUIVCDPNDNXBEBZVTVLFUTBT w "844FSWJDF-JNJUT"NB[PO8FC4FSWJDFTIUUQTEPDTBXTBNB[PODPNHFOFSBMMBUFTUHS