昔の自分に教えたいLambdaのデバッグ方法

380bcd2ab751f5838abd8219df53e5fe?s=47 tomoki10
December 18, 2019

 昔の自分に教えたいLambdaのデバッグ方法

WebコンソールからLambdaを動かしていた時に、次のステップとしてローカルでLambdaデバッグする流れを伝えるスライドです。
セットアップ手順などは省いてますが、Webコンソールで操作する場合とSAMを使用してローカルで試験する場合の対比がわかりやすくなるように作成しています。

380bcd2ab751f5838abd8219df53e5fe?s=128

tomoki10

December 18, 2019
Tweet

Transcript

  1. ੲͷࣗ෼ʹڭ͍͑ͨ Lambdaͷσόοάํ๏ @tmk2154 ࠤ౻ ஐथ

  2. • ๭SIerʹ຿ΊΔSE
 →αʔόϨεΤϯδχΞʹస৬༧ఆ • AWS͕޷͖Ͱษڧத
 ˠAmazon Connectͷຊॻ͍ͨ
 ɹࠓ౓ٕज़ॻయͰFaaSͷຊॻ͖·͢ • ࠷ۙͷڵຯ


    AWSɿLambdaɺSAM
 TypescriptɺVue • ޷͖ͳອը
 νΣϯιʔϚϯ @tmk2154 ࣗݾ঺հ
  3. ࠓ೔࿩͢಺༰ AWS Lambda Amazon API Gateway Amazon DynamoDB AWS Cloud

    ·ͣίίͷ࿩ AWS Lambda Amazon API Gateway Amazon DynamoDB AWS Cloud ࣍ʹίίͷ࿩
  4. Lambdaͷ࡞੒ͱςετ • LambdaΛςετ͢Δ৔߹ɺҎԼͷ2ύλʔϯ͕͋Δ • WebίϯιʔϧͰςετ
 ϝϦοτɿ؆୯ɺ͙͢ʹ࣮ߦͰ͖Δ
 σϝϦοτɿखಈςετɺϩά֬ೝ… • AWS CLI

    SAMΛ࢖ͬͯϩʔΧϧ؀ڥͰςετ
 ϝϦοτɿςετ࣮ߦ͕ߴ଎ɺ࠶ݱੑ͕ߴ͍
 σϝϦοτɿηοτΞοϓ஌ࣝ͸ඞཁ
  5. Lambdaͷ࡞੒ͱςετ SAM CLI Πϯετʔϧࢀরɿhttps://docs.aws.amazon.com/serverless-application-model/latest/developerguide/serverless-sam-cli-install.html • LambdaΛςετ͢Δ৔߹ɺҎԼͷ2ύλʔϯ͕͋Δ • WebίϯιʔϧͰςετ
 ϝϦοτɿ؆୯ɺ͙͢ʹ࣮ߦͰ͖Δ
 σϝϦοτɿखಈςετɺϩά֬ೝ…

    • AWS CLI SAMΛ࢖ͬͯϩʔΧϧ؀ڥͰςετ
 ϝϦοτɿςετ࣮ߦ͕ߴ଎ɺ࠶ݱੑ͕ߴ͍
 σϝϦοτɿηοτΞοϓ஌ࣝ͸ඞཁ
  6. Lambda࡞੒(ίϯιʔϧ) • Webίϯιʔϧ͔Βͷ࣮ߦ print(e)

  7. Πϕϯτ࡞੒(ίϯιʔϧ)

  8. ςετ࣮ߦ(ίϯιʔϧ)

  9. SAM(ServerlessApplicationModel)ͱ͸ •ར఺ ✦୯ҰͷσϓϩΠઃఆ ✦ϩʔΧϧͰͷςετٴͼσόοά ✦૊ΈࠐΈͷϕετϓϥΫςΟε ✦։ൃπʔϧͱͷ౷߹ ✦AWS CloudFormation •αʔόʔϨεΞϓϦέʔγϣϯ
 ߏங༻ͷΦʔϓϯιʔεϑϨʔϜϫʔΫ


    YAML΍JSONͰؔ਺ɺAPIɺDBɺΠϕ ϯτιʔεϚοϐϯάΛදݱͰ͖·͢
  10. Lambda࡞੒(SAM) ίϚϯυɿ sam init [OPTIONS] (αʔόϨεΞϓϦͷ਽ܗ࡞੒)
 $ sam init -r

    python3.7
  11. Lambda࡞੒(SAM) -BNCEB ࣮ߦϑΝΠϧ ΞϓϦ ߏ੒ϑΝΠϧ

  12. Lambda࡞੒(SAMͷߏ੒)

  13. Πϕϯτ࡞੒(SAM) ίϚϯυɿ sam local generate-event [OPTIONS] COMMAND [ARGS]…
 (Lambdaʹ౉͢JSONΠϕϯτͷ࡞੒)
 $

    sam local generate-event apigateway —-help $ sam local generate-event apigateway aws-proxy +40/Πϕϯτ
  14. ίϚϯυɿ sam local invoke [OPTIONS] [FUNCTION_IDENTIFIER]
 (ϩʔΧϧ؀ڥͰDockerΛ࢖༻ͯ͠LambdaΛ࣮ߦ)
 $ sam local

    invoke HelloWorldFunction -e events/apigateway-proxy-event.json 
 ࣮ߦ݁Ռ ςετ࣮ߦ(SAM)
  15. • ΤϯυϙΠϯτ(httpϦΫΤετઌ)͚ͩΛࠩ͠ସ͑ͯࢼݧ͢Δ E2Eςετ AWS Lambda Amazon API Gateway Amazon DynamoDB

    AWS Cloud ຊ൪ ϩʔΧϧ AWS Lambda SAM (start-api) + DynamoDB local 'BLF "1* (BUFXBZ AWS Lambda Local Stack ϩʔΧϧ 'BLF "1* (BUFXBZ 'BLF %ZOBNP %# 'BLF %ZOBNP %#
  16. Local Stack • ϩʔΧϧͰ࢖͑ΔAWSαʔϏεͷϑΣΠΫαʔό(ඇެࣜ) ࢀߟɿhttps://github.com/localstack/localstack

  17. Local Stack(ྫ:DynamoDB) • docker-compose.yml

  18. ͞Βʹ஌ࣝΛਂΊΔʹ͸ • LambdaςετઃܭͷόΠϒϧ
 ʮTestable Lambda: Working Effectively with Legacy Lambdaʯ


    https://speakerdeck.com/twada/testable-lambda-working-effectively-with-legacy-lambda • Lambda಺෦ͷςετઃܭ΍E2EςετΛߦ͏ͱ͖ͷઓུͳͲ
 ʮTypeScriptͱJestͰ͸͡ΊΔ AWS੡αʔόʔϨε REST API ͷ
 Ϣχοτςετ/E2Eςετʯ
 https://speakerdeck.com/wadayusuke/serverless-testing-using-typescript-and-jest • ผͷπʔϧΛ࢖͏
 AWS Toolkit for VSCode ͷ Lambdaσόοά
 AWS CDKͰσϓϩΠߏ੒ͷ؅ཧ
  19. ͓·͚ • SAMΛಈ͔࣌͢ʹ٧·Δ͔΋͠Εͳ͍ύλʔϯ(2019/12/16ݱࡏ)Λهࡌ 1. Cloud 9಺ͰSAMΛࢼ͢৔߹
 ˠSAMͷversion͕͔ͳΓݹ͍(Cloud9಺:0.8.0ɺ࠷৽:0.37.0)ͷͰ
 ɹҰ౓SAMΛΞοϓσʔτͨ͠ํ͕ྑ͍
 ɹ(LambdaͷιʔεΛߋ৽ͯ͠΋Dockerʹ൓ө͞Εͳ͍ͳͲ…) 2.

    ࠷৽൛ͷpipͩͱAWS Toolkit for VSCode͔ΒϩʔΧϧ࣮ߦͰ͖ͳ͍
 ˠpipͷversionΛ໭͢ඞཁ͕͋Δ
 https://qiita.com/tmk2154/items/3fd7753b1b416e16f327

  20. ·ͱΊ SAM࢖ͬͯ։ൃ͠Α͏ʂ