やっつけ不定記

好きなときに好きなことをちゃっちゃと書いてます

AWSエヴァンジェリストシリーズ 温故知新編 Lambda API Gateway ハンズオン

ちょこちょこ参加させていただいているAWSエヴァンジェリストシリーズのハンズオン。
今回の題材はみんな大好きLambdaとAPI Gatewayです。
https://awsbasics.connpass.com/event/234744/
自分は以前から知っておく必要がある分野だと思っていたのですが、
体系だったセミナーやハンズオンは巡り合わせがよくなく、
今回こそはとイベント公開時からスケジュールを押さえていました。
おうち(だけど)帰ってレポるまでがイベントなので、いつも通り書き出してみます。
書き出すにあたってハッシュタグを眺めているのですが、やはりいつもより流量が多めですね。

(1) 座学

[メモ]

  • サーバレスとLambdaの歴史と変遷の話
  • 2014年にLambdaが出たが、公開当初はここまでキーとなるサービスになるとはAWSも思ってなかった
  • Lambdaは昔はDockerコンテナベースだったが、現在はFirecrackerベースのマイクロVMで動く
    https://github.com/firecracker-microvm/firecracker
  • Lambdaの処理は15分以内に終わらせる必要がある
  • バックエンドで使う場合はStepFunctionsと組み合わせて使う
  • 何でもかんでもLambdaでやっていいわけではない
    • コスト見積はきっちりやること(Lambdaのリソース単価はそれなりにする)
    • Lambdaは起動と終了を繰り返すため、永続的な処理を行う場合はEC2やFargateでやるべし(アプリの作りもそれを見越す必要がある)
  • LambdaとRDBMSの相性がよくないといわれていたが、最近はかなり改善されている
    • 今はVPC通信ができる
    • コネクションプーリングが使えるようになっている
  • 初回起動時の動作に注意すること
    • コンパイル型言語は初回起動が遅い(そういえば、Javaの初回起動はエグかった記憶が・・・)
    • 読み込むライブラリは最小限にするべし
      • 汎用的なライブラリとして読み込ませるケースがあるが、Lambdaの場合はいらない機能の分が余計なリソースを使ってしまう
  • Lambda layers:C++でいうヘッダーみたいなものと思ってよい
  • コンテナイメージをそのまま起動のスライドは、Lambdaのお作法に乗ったプログラムを書かなければいけないという意味なので誤解しないこと
  • 高負荷時にスロットリング

[QA(拾えた分のみ)]

  • メモリをどれくらい増やしたらCPUがどれくらい増えるかわかる方法はありますか?
    AWSのドキュメントを見ること
  • コンパイル型(Java等)は初回起動が遅い(ファーストタッチペナルティが大きい)けど、2回目以降コンテナのマイクロVMが上がっている間はインタプリタ型より「速い」のでは?
    →ラムダのVMリユースされることがあるので、速くなることがある
  • 特定のLambda関数からのリクエストは、同じRDS Proxyを使って接続する(他のLambda関数には関係ない)という感じですか?
    →Yes

(2)LT:Refactor Spacesハンズオン延長戦
先週のイベントでのLTの続き(自分は不参加でしたが、たぶんこれかな?)
https://awsbasics.connpass.com/event/234743/
ハンズオンシナリオがJavaだったけど、処理速度が遅いのでPythonにしてみたら
めちゃんこ速くなったという理解でいいのかな。
資料は本エントリ冒頭記載のイベントサイトURLに載るとのこと。

(3)ハンズオン
https://github.com/harunobukameda/AWS-Amplify-AWS-Lambda-Amazon-DynamoDB-AWS-API-Gateway-Amazon-Cognito
の手順書4.2のラストまでが題材。
DynamoDBのUIが手順書からだいぶ変わっていて、手順を追いかけるだけでいっぱいいっぱい。
講師側の説明とデモはあまり聞けずという状態でしたが、何とか完走できました。

[大まかな流れ]

  1. Cloud9の準備
  2. DynamoDB作成
    ArtistとTitleを項目としたテーブルを作成
  3. Lambdaの作成
    IAMポリシー、IAMロール、Lambda関数(単品実行含む)
  4. API Gatewayの作成
    • GETとPOSTのAPI Gatewayを作成し、それぞれについて3で作成したLambdaを紐づける
    • 1.で作ったCloud9のシェルからcurlコマンドで作成したAPI Gatewayにリクエストを投げる
    • 手順書のURLに同梱のWebアプリケーションからAPI Gatewayにリクエストを投げる
  5. 実行結果の確認
    • GET:JSONレスポンス
      3件のデータから「Michael Jackson」を検索すると2件ヒットする。 f:id:chocopurin:20220129172046j:plain

      f:id:chocopurin:20220129172043j:plain

    • POST:DynamoDBにデータが反映される
      「Artist:NANA MIZUKI」「Title:ETERNAL BLAZE」を登録するPOSTリクエストを投げたらDynamoDBに反映される。 f:id:chocopurin:20220129174946j:plain

      f:id:chocopurin:20220129172052j:plain

[メモ(拾えた分のみ)]

  • リージョン縛りがあるので注意すること
  • Cloud9の利用部分について、今回のイベントであればt2.microでよいが、4.2より後にAmplifyを使う部分があり、それを行う場合はt3.small(有料)以上を選択する方がよい。
  • default VPCはパブリックサブネットしかない
  • API Gatewayの手順に「プロキシ統合の使用」というチェック項目があるが、このチェックを入れると、URLのマッピング設定を自分でやらずにAWSがよしなに設定してくれる(任意のマッピング名を設定できないので注意)
  • 終了後に削除するもの
    • API GatewayAPIの削除
    • Lambda:アクションの削除
    • DynamoDB:テーブルの削除
    • IAM:ポリシーの削除、ロールの削除