Save 37% off PRO during our Black Friday Sale! »

サーバレスアーキテクチャのアンチパターンと活用方法_20170126

F8f7692cb46c0f7feda5210a46b47bcf?s=47 shogomuranushi
January 26, 2017
1k

 サーバレスアーキテクチャのアンチパターンと活用方法_20170126

F8f7692cb46c0f7feda5210a46b47bcf?s=128

shogomuranushi

January 26, 2017
Tweet

Transcript

  1. αʔόϨεΞʔΩςΫνϟͷ Ξϯνύλʔϯͱ׆༻ํ๏

  2. None
  3. ͜ΜͳΜॻ͍ͯ·͢

  4. ࠓ೔࿩͢͜ͱ • αʔόϨεΞʔΩςΫνϟͷΞϯνύλʔϯͱ ղܾํ๏ • ৬ۀฑAWSͷαʔϏεத৺Ͱ͕͢ɺ
 ॴʑAWSʹґଘͯ͠ͳ͍Tips΋͋Γ·͢

  5. ࠓ೔࿩͞ͳ͍͜ͱ • αʔόϨεΞʔΩςΫνϟͬͯͳʹʁ

  6. ର৅ • αʔόϨεͬͯݴ༿͸஌ͬͯΔ͚Ͳɾɾ • ͱΓ࣮͋͑ͣ૷ͯ͠Έ͚ͨͲɾɾ • Έ͍ͨͳਓΛର৅ʹ͍ͯ͠·͢ • ώϯτΛ࣋ͪؼͬͯ΋Β͑Ε͹ͱࢥ͍·͢

  7. ຊ୊

  8. 1. ʮSDKΛ࢖ΘͣσʔλΛ౤͛Δʯ • SDKΛ࢖ΘͣʹΫϥΠΞϯτ͔ΒAWSαʔϏεʹϦΫΤετ Λ౤͛Δ AWS Lambda Amazon API Gateway

    mobile client Amazon DynamoDB
  9. • Ϋϥ΢υͱ͍ͬͯ΋෺ཧͰಈ͍͍ͯΔ • ࢭ·Βͳ͍γεςϜ͸ଘࡏ͠ͳ͍ • SDK͸Ϋϥ΢υ͕ࢭ·ΔલఏͰϦτϥΠॲཧͱ͔͕૊Έࠐ·Ε͍ͯΔɻՄೳͳݶΓSDKΛ࢖͏ • SDKΛ࢖Θͳ͍৔߹͸ɺ૬ख͕ड͚औΕͳ͔ͬͨ৔߹Λ૝ఆͯ͠ϦτϥΠ͢Δ
 ॲཧΛೖΕΑ͏ɻϦτϥΠʹΑΓޙʹ੒ޭ͢ΔՄೳੑ͕ߴ͍ •

    ϦτϥΠॲཧͷਪ঑͸ɺΫϥΠΞϯτଆ͸ʮExponential Backoffʯ͕ਪ঑ɻ
 Lambdaʹؔͯ͠͸ʮDead Letter QueueʯΛར༻͢Δ • Exponential Backoff • σʔλૹ৴ॲཧ͕ࣦഊͯ͠࠶ૹ৴͢Δͱ͖ʹɺࣦഊճ਺͕૿͑Δʹ࿈Εͯ
 ࠶ૹ৴͢Δ·Ͱͷ଴ͪ࣌ؒΛࢦ਺ؔ਺తʹ૿΍͢࢓૊Έ
 ʢྫɿ̍ඵޙɺ̎ඵޙɺ̐ඵޙɺ̔ඵޙɺɺɺʣ • ௕ظো֐ൃੜ࣌ʹγεςϜ΁ͷෆඞཁͳෛ୲Λܰݮ • Dead Letter Queue • ࣮ߦࣦഊ࣌ (3ճϦτϥΠࣦഊ࣌) ʹSQS͔SNSʹ౤͛ΕΔػೳ • SQSʹಥͬࠐΜͩޙʹΰχϣΰχϣ͢Δ SDK͸͔͍͜͠ɻՄೳͳݶΓSDKΛ
  10. 2. ʮͱΓ͋͑ͣLambda FirstͰʯ multimedia Amazon SQS Amazon SNS AWS IoT

    AWS Lambda Amazon API Gateway mobile client AWS Lambda AWS Lambda AWS Lambda AWS Lambda AWS Lambda
  11. Lambdaͷํ͕͓ߴ͍৔߹΋͋Δ • 256MBͷϝϞϦͰ1,500ສճ࣮ߦ͠ຖճͷ࣮ߦ͕࣌ؒ200ϛϦඵͩͬͨ৔߹ͷར ༻ྉ͸ɺ໿$11 • ্͕Ծʹຖ೔࣮ߦ͢ΔΑ͏ͳॲཧͷ৔߹ɺ$11*30೔Ͱ$330 • ༻్ʹΑͬͯ͸Lambdaͷํ͕ߴ͘ͳΔ৔߹΋͋Δ • Ͱ΋EC2ͷӡ༻͕ແ͘ͳΔͷͰอकͷରԠ޻਺͕ݮΔ͠ɺϝϦοτ΋େ͍ʹ͋Δ

    ʢ͠ɺ΍ͬͯΈ͍ͨ͡ΌΜʣ • ॲཧྔ͕ଟ͍৔߹͸ܰ͘ݟੵΖ͏ • ͋ͱɺଟ਺ͷLambdaΛ࢖ͬͯ΋͍͍͕Lambdaͷಉ࣮࣌ߦ਺੍ݶʢ100/secʣ͸ ΞΧ΢ϯτ୯ҐͳͷͰɺ্ݶʹ஫ҙ
  12. 3. ʮॏ͍ͨόον΋LambdaͰʯ AWS Lambda Amazon CloudWatch

  13. Lambda͸ॲཧ࣌ؒʹݶΓ͕͋Δ • Lambda = ࠷௕5෼͔ؒ͠ॲཧͰ͖ͳ͍ • 5෼Ҏ্͔͔Δ৔߹͸ผͷLambdaʹॲཧΛྲྀ͢ • SQS΍DynamoDBɺs3ͳͲΛؒʹڬΈLambda ͷॲཧΛ෼͚Δ

    • StepFunction΋׆༻͠Α͏
  14. 4. ʮAPI GatewayͰॏ͍ͨॲཧʯ AWS Lambda Amazon API Gateway mobile client

  15. API Gateway͸Timeout͢Δ • API GatewayͷλΠϜΞ΢τ͸30ඵ • 30ඵҎ಺ʹAPI GatewayʹॲཧΛฦ͢ඞཁ͋Γ • ·ͣɺϑϩϯτͷLambdaͰϨεϙϯεฦ͠ɺ

    ඇಉظʹޙଓͷLambdaͰॲཧΛܧଓͤ͞Δ • ॲཧ׬ྃޙʹSNSͳͲͰ௨஌͢Δ
  16. 5. ʮ1LambdaͰଟ਺ͷॲཧʯ AWS Lambda

  17. ՄࢹԽੑ͕௿͘ɺಉ࣮࣌ߦ΍
 ϦτϥΠॲཧͰ໰୊ग़Δ͔΋ • ಉ࣮࣌ߦ਺͕100ͳͷͰɺ1Lambdaͷॲཧ͕࣌ؒ௕͍ͱಉ࣮࣌ߦ਺Ͱ಄ଧͪ͢Δ͔΋ɻ
 1ϑΝϯΫγϣϯͷ࣮ߦ࣌ؒ͸ՄೳͳݶΓ୹͘͢Δ͜ͱ
 ʢಉ࣮࣌ߦ਺ͷ্ݶ؇࿨Մೳ͕ͩɺ࣮੷͕গͳ͍৔߹͸௨Βͳ͍͜ͱ΋͋Δͦ͏ʣ • Lambda͕ࣦഊͨ͠ࡍʹ߹ܭ3ճϦτϥΠॲཧ͞Εͯ͠·͏ͨΊɺ్த·Ͱͷॲཧ͕ෳ਺ճ࣮ ߦ͞Εͯ͠·͏͜ͱ΋͋Δɻ࣮֬ʹ1ճ͚࣮ͩߦ͍ͨ͠৔߹͸ʮcontext.done()ʯ͢Δɻ •

    όονॲཧͰ͍͏ͱ͜ΖͷϦϥϯͱ͔ɺτϥϯβΫγϣϯɾϩʔϧόοΫͱ͔ແ͍ͷͰႈ౳ ੑ͕อͨΕͨɺෳ਺ճ࣮ߦͯ͠΋͍͍ॲཧͰ࡞Βͳ͍ͱγϯυΠ͔΋ʢ΂͖࿦͗͢Δ͚Ͳʣ • StepFunctionΛ࢖͑͹ॲཧϑϩʔ΋ՄࢹԽग़དྷͯɺ؅ཧ͕ḿΔͷͰ1Lambdaʹ߆Δඞཁͳ͍ • ͨͩɺ࠶ૹ΍ׂΓࠐΈͳͲΛߟྀ͓͔ͯ͠ͳ͍ͱޙͰϝϯς͠ʹ͍͘͜ͱ΋ɻ
 ͜ͷลͷϕετϓϥΫςΟε͸·ͩ·ͩ͜Ε͔Βɻ
  18. 6. ʮ؂ࢹΛ͠ͳ͍ʯ Amazon CloudWatch

  19. ؂ࢹ͸ઈର͠·͠ΐ͏ • ඞͣ੒ޭ͍ͯ͠Δอূ͸ͳ͍ • ඞͣॲཧ͠ͳ͍ͱ͍͚ͳ͍΋ͷ͸ΩονϦ؂ࢹ͠·͠ΐ ͏ʢLambda͸Α͘؂ࢹͷߟྀ͔Β࿙ΕΔʣ • Lambdaͷ৔߹͸ʮErrorsʢྫ֎ൃੜʣʯΛ؂ࢹͯ͠Ξ ϥʔτΛ্͛Δ •

    ϩά͸CloudWatch Logsʹ͋ΔͷͰɺCWLogsͷϝτ ϦοΫϑΟϧλͰΞϥʔτ্͛Δ
  20. 7. όοΫΤϯυʹDynamoDB AWS Lambda Amazon API Gateway mobile client Amazon

    DynamoDB
  21. ΩϟύγςΟ؅ཧ͕ඞཁ • DynamoDB͸1ඵ͋ͨΓͷಡΈॻ͖ྔʢΩϟύγ ςΟʣΛࣄલʹઃఆ͢Δ • ΩϟύγςΟΛ௒͑ͨ৔߹͸ॲཧ͖͠ΕͣΤϥʔ ͱͳΔʢεύΠΫͳͲʹ஫ҙʣ • ϩετͯ͠͸͍͚ͳ͍σʔλͷ৔߹͸ॻ͖ࠐΈࣦ ഊ࣌ʹSQSʹ֨ೲ͠ɺ࣌ؒΛஔ͍ͯϦτϥΠ͢Δ

    ͳͲΛݕ౼͢Δඞཁ͕͋Δ
  22. 8. ௚઀Kinesis Amazon Kinesis mobile client

  23. γϟʔυͷ؅ཧ͕ඞཁ • 1γϟʔυʹ1ඵ͋ͨΓ࠷େ1,000݅ͷPUT • ΩϟύγςΟΛ௒͑ͨ৔߹͸ॲཧ͖͠ΕͣΤϥʔͱͳΔʢε ύΠΫͳͲʹ஫ҙʣ • ϩετͯ͠͸͍͚ͳ͍σʔλͷ৔߹͸ΫϥΠΞϯτଆͰϦ τϥΠػߏΛઃ͚Δ •

    γϟʔυΛ෼ׂ͢Δ͜ͱͰॲཧྔ͸૿΍ͤΔ • ͕ɺpartition-keyͰద੾ʹ෼ࢄ͠ͳ͍ͱยํʹدΔ
  24. 9. LambdaͷόοΫΤϯυʹRDS AWS Lambda Amazon API Gateway mobile client Amazon

    RDS
  25. RDS΁ͷ઀ଓͷಓ͸ࠔ೉ • Lambda͔ΒVPC಺ʢPrivate SubnetʣͷRDSʹ઀ଓ͢Δʹ͸VPC in LambdaΛ࢖͏ඞཁ͕͋ΓɺLambdaͷى ಈ͕஗͘ͳΔʢENIͷੜ੒͕஗͍ʣ • VPC in

    Lambda͸LambdaΛ࣮ߦ͢Δ͝ͱʹENIΛ࢖༻͢ΔͨΊɺSubnet͸େ͖֬͘อ͠ͳ͍ͱSubnetͷIPΛ ࢖͍੾ͬͯENI͕ੜ੒ग़དྷͣʹΤϥʔ͕ൃੜ͢Δ • Lambda in Public͸RDSʹରͯ͠ɺSecurityGroupͷϑϧ։์ʢ΋͘͠͸Ұ࣌తʹࣗIPΛ։์ʣ͕ඞཁʹͳΔ ͕ɺDBͷಛੑΛ౿·͑ΔͱηΩϡϦςΟ্ɺϑϧ։์΍Public SubnetʹRDSΛ഑ஔ͢Δͷ͸ݱ࣮తͰ͸ͳ͍ • Lambda͔ΒRDS΁ͷDBίωΫγϣϯ͸ϦΫΤετ୯ҐʹͳΔͨΊɺಉ࣌઀ଓ͕଱͑ΒΕͳ͍Մೳੑ΋ • σʔλετΞͷమଇ͸DynamoDBɻ
 DBͷ໰୊ͰͲ͏ͯ͠΋VPCΛར༻͍ͨ͠ʢPrivateʹ഑ஔ͍ͨ͠ʣ৔߹͸ɺDynamoDB StreamsʢDynamoDB Streams=>Lambda=>SQS=>RDSʣΛར༻ͨ͠ඇಉظ൓өΛݕ౼͢Δ
  26. 10. ੜͷAWSαʔϏεͰड͚Δ Amazon Kinesis mobile client mobile client Amazon DynamoDB

  27. API GatewayΛڬΉͱ޾ͤʹͳΔ ʢ͔΋ʁʣ • ੜͷAWSαʔϏεʢKinesis΍DynamoDBͳͲʣͰड͚ΔͱɺҎԼͷΑ͏ͳ໰୊͕ • ଞʹྑ͍αʔϏε͕ग़ͨΒΞϓϦଆʢσόΠεଆʣͳͲͷมߋ͕ඞཁ • Πϯϑϥଆ͔Βͨ͠ΒΞϓϦଆʢσόΠεଆʣʹɺԿ࢖ͬͯΔ͔ͱ͔αʔϏε Λҙࣝͯ͠΄͘͠ͳ͍

    • API GatewayΛؒʹڬΈRESTͰड͚ΔΑ͏ʹ͢ΔͱɺΠϯϑϥʢAWSαʔϏε ଆʣ͸ந৅Խ͞ΕΔ • ந৅Խ͓ͯ͘͠ͱɺΑΓྑ͍αʔϏε͕ग़ͨ࣌ʹΞϓϦଆʢσόΠεଆʣʹґ ଘͤͣʹॊೈʹมߋ͕Մೳ • Ұ൪࢝ΊʹSDKΛ࢖͑ɻͬͯݴ͚ͬͨͲɺԿΛॏࢹ͢Δ͔ʁͰબ୒Λ
  28. ࠷ޙʹ • ϋϚΓͲ͜Ζ͸৭ʑ͋Δ • ࢖͍ํʹΑͬͯ͸ੌ͘ྑ͍݁ՌʹͳΔ͚Ͳɺ
 ࢖͍ํ͕ѱ͚Ε͹ΠϚΠνʹͳΔʢσʔλϩετ͢Δͱ͔ʣ • શ෦αʔόϨεʹ͢Δඞཁ͸ͳ͍ • RDBʹྑ͍ػೳ͕͋ΔͷʹKVSͰؤுΓ·ͬͯ͘Δײͱ


    ಉ͡Ͱɺཁ͸࢖͍ॴͰ͢ɻ • ΈΜͳͰϋϚͬͯϕετϓϥΫςΟεΛ࡞͍͖ͬͯ·͠ΐ͏
  29. Ҏ্