$30 off During Our Annual Pro Sale. View Details »

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

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

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

Yusuke Wada

March 27, 2019
Tweet

More Decks by Yusuke Wada

Other Decks in Programming

Transcript

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

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

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

    ϛυϧ΢ΣΞ OS Ծ૝Խج൫ ϋʔυ΢ΣΞ Ϣʔβʔ Ϣʔβʔ Ϋϥ΢υϕϯμʔ Ϣʔβʔ Ϋϥ΢υϕϯμʔ Ϋϥ΢υϕϯμʔ αʔϏε੹೚Ϟσϧ ͜ΕΒΛ૊Έ߹ΘͤΔ͜ͱ
  4. ࣗ෼ޠΓͰັྗΛ఻͑Δ   2016/03 ΫϥϝιೖࣾɺαʔόʔαΠυAPI։ൃ 2017/01 AWS Lambda ʹ;ΕΔ 2017/10

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

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

    αʔόʔϨε։ൃ෦ઃཱ 2018/04 αʔόʔϨε։ൃ෦΁సଐ 2018/09 Serverlessconf Tokyo Ͱొஃ "84 "OHVMBS J04
  7. αʔόʔϨεͷৼΓฦΓ   $BTF AWS Lambda ʹ৮ΕΔ $BTF σʔλऩूج൫ͷPoC։ൃ $BTF

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

    αʔόʔϨε։ൃ෦ઃཱ 2018/04 αʔόʔϨε։ൃ΁సଐ 2018/09 Serverlessconf Tokyo Ͱొஃ ͜ͷ࿩ $BTF
  9. "848"'ͷ*1ΞυϨεϒϩοΫΛࣗಈઃఆ͢Δ   ᶃ WAF Λؔ࿈෇͚ ᶄ fluentd Ͱ nginx

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

    ͷ
 ɹϩάΛS3ʹू໿ ※౰࣌͸WAFͷϨʔτϦϛοτͳ͠ ᶅ ϧʔϧʹج͖ͮ
 ɹIPϒϩοΫ ਓ͕͔Γɺ೔Ͱߏங ࣍ͷ೔ʹຊ൪ద༻
  11. 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
  12.   "84*P5ͷར༻ ূ໌ॻͷδϟετΠ ϯλΠϜొ࿥ *P55PQJDTܦ༝Ͱͷ "84-BNCEBىಈ νʔϜ։ൃ ਓ 

    ֎෦ϕϯμʔͱͷ݁ ߹ࢼݧ גࣜձࣾ-*9*-༷εϚʔτ୐഑ϙεταʔόʔ $BTF
  13. ઃܭྫ   αόϨε IBOEMFST EPNBJOT JOGSBTUSVDUVSFT BQJHXVTFS report.ts FWFOUDPOUFOU

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

    report-put.ts EZOBNPEC report.ts T content.ts %ZOBNP%#ʹର͢Δॲཧ SFQPSUςʔϒϧΛૢ࡞͢Δ
  15. ςετͷॏ఺ΛͲ͜ʹஔ͔͘   &$ΞϓϦέʔγϣϯͷςετͱ͸ߟ͑ํ͕ҟͳΔ αʔόʔϨεͷ৔߹ɺػೳ͝ͱͷ&&ςετʹॏ఺Λஔ͘ ࣮ࡍʹ"84ʹσϓϩΠͯ͠ಈ͔ͯ͠Έͳ͍ͱΘ͔Βͳ͍͜ͱ͕ ଟ͍ͨΊ *".ɺϦτϥΠॲཧͳͲʜ  ҎԼͷྲྀΕ

    -BNCEB'VODUJPOͱ"84ϦιʔεΛ࣮ࡍʹσϓϩΠ͢Δ
 1BSBNFUFS4UPSF͔Βςετର৅ͱͳΔ؀ڥͷύϥϝʔλΛಡΈग़͢
 ϢʔεέʔεʹԊ࣮ͬͯࡍʹϦΫΤετΛߦ͍ςετ͢Δ αόϨε
  16. ςετͷྫ 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͔Βσʔ λΛऔಘ͠ΦϒδΣΫτੜ੒ ϑΟΫενϟͱͯ͠ఆٛ͢Δ ͜ͱͰ֤ςετͰύϥϝʔλ ͕ར༻Ͱ͖Δ
  17. ՝୊ղܾฤͷ੔ཧ   ߟ͑ํ ίʔσΟϯά؀ڥ ࢖͍׳ΕͨΤσΟλ όʔδϣϯ؅ཧ ࢖͍׳ΕͨΤσΟλ όʔδϣϯ؅ཧ ಉ͡

    ίʔυઃܭ υϝΠϯϩδοΫ෼཭ ϨΠϠԽ ಉ͡ σϓϩΠ "OTJCMF 1BDLFS  3BLFλεΫ $MPVE'PSNBUJPO "84$-* 4FSWFSMFTT'SBNFXPSL ಉ͡ ςετͷॏ఺ ΞϓϦέʔγϣϯ ίʔυ ࣮ݱ͍ͨ͠ػೳ ҟͳΔ νʔϜ։ൃํ๏ γεςϜڥքͰ෼୲ ࣮ݱ͍ͨ͠ػೳͰ෼୲ ҟͳΔ ϓϩδΣΫτͷਐΊํ  ػೳ͝ͱʹσϓϩΠαΠΫϧ Λճ͢  &$ αόϨε
  18. ࢀߟॻ੶ɾར༻ͨ͠πʔϧ   w DODGXHTFSWFSMFTT$/$'4FSWFSMFTT8(IUUQTHJUIVCDPNDODGXHTFSWFSMFTT w "844".IUUQTEPDTBXTBNB[PODPNKB@KQMBNCEBMBUFTUEHTFSWFSMFTT@BQQIUNM w .BLF(/61SPKFDUIUUQTXXXHOVPSHTPGUXBSFNBLF w

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