『実践AWS Lambda』を読みました

最近AWSに興味を持ち始めまして、
特にイベントをトリガーにした処理ができるLambdaを使いたかったので、この本を読んでみました。

読んだ内容を忘れないよう、感想や概要を書き残しておきます。








全体的な感想



AWSのアカウント取得方法や基本的な用語説明、画面キャプチャなど丁寧に記載されているので、
初めてAWSを触る私にとって非常にわかりやすい内容になっていました。
ただ、画面キャプチャが最新ではなかったので、設定したい項目がなかったり戸惑うことも多かったです。

��実際に操作して、慣れていくうちに勘でわかるようになりました。)






構成




  1. AWS Lambdaとは


  2. AWS利用の準備


  3. AWS Lambdaの使い方


  4. プログラミングモデル


  5. サーバレスとは


  6. ユースケース


  7. サーバレスで作るアプリケーション例


  8. サーバレスアプリケーションのデプロイ








1.AWS Lambda とは



Lambdaの特徴が書かれています。簡単にまとめると下記内容です。




  • 2014年11月に発表されたAmazon Web Serviceのひとつ


  • インフラストラクチャの運用管理が不要 -- イベントの発生頻度によってLambda関数の数が自動的にコントロールされるのでサーバ管理が必要ない


  • イベントドリブン -- 項目の変更など、何らかのイベントに対応してLambdaに登録されたコードが実行される


  • 高いコスト効率 -- Lambda関数の実行リクエスト回数と、実行時間に対して料金が発生するので余計な課金が発生しない








2.AWS利用の準備



AWSのアカウント取得手順、IAMやリージョンといった基本的な用語説明が記載してあります。






3.AWS Lambdaの使い方



実際にLambda関数を作成して実行するまでの手順が載っているので、この章はよく読んだほうが良いと思います。

基本的な「hello-world」関数の実行、アクセス権限の設定、ログの見方、テスト方法、
バージョンの発行、パッケージの作成、環境変数の設定などが記載されています。





イベントの発生元として使えるAWSリソースの紹介もされています。
Lambda関数を呼び出すトリガーにしたいものによって使い分けが必要です。
また、リソースごとに呼び出しタイプが非同期と同期で分かれています。




  • Amazon S3 -- 画像ファイルをアップロードしたことをトリガーにできる。


  • Amazon DynamoDB -- テーブルに対する項目の更新などをトリガーにできる。


  • Amazon Kinesis Streams -- ストリーミングデータがレコード保存されたことをトリガーにできる。


  • Amazon SNS -- SNSを利用した通知処理をトリガーにできる。CloudWatchのアラーム通知先にSNSトピックを指定できるので、これを利用してアラームに対応する処理をLambda関数として実装することで自動化ができる。


  • Amazon SES -- Eメール、メッセージの受信をトリガーにできる。


  • Amazon Cognito -- 認証データの更新をトリガーにできる。


  • AWS CloudFormation -- スタックの作成、更新、削除をトリガーにできる。


  • Amazon CloudWatch Logs -- ログイベントの処理、分析、他システムへの連携ができる。


  • Amazon CloudWatch Events -- AWSリソースの状態変化を示すイベントをトリガーにできる。また、トリガーにするルールの設定や、定期的にスケジュール実行することができる。


  • AWS CodeCommit -- ブランチへのpushなど、リポジトリで発生したイベントをトリガーにできる。


  • AWS Config -- AWSリソースの作成、変更、削除をトリガーにできる。不適切なリソース操作を知ることができる。


  • Amazon Echo -- Alexa Skillを実行するプラットフォームとして利用できる。


  • Amazon Lex -- Lexが認識した音声をトリガーにできる。


  • Amazon API Gateway -- 任意のLambda関数をHTTPSリクエスト経由で呼び出すことができる。








4.プログラミングモデル



Node.js、PythonJavaC# の言語で関数を作成する場合のコードが載っています。
見比べてみるとPythonが1番見やすくて簡潔に書かれているので、私としてはPythonで書きたいです。






5.サーバレスとは



サーバレスというコンセプトの中核を担うのがLambdaだということ、
サーバレスに対してのよくある誤解などが記載されています。
私も勘違いしていた部分があったので、忘れないように書いておきます。




  • サーバレスになれば全く運用が必要なくなるわけではなく、今までと異なる運用方法として存在し続ける


  • インフラ費用が10分の1になるなど極端に安くなるわけではなく、リクエスト数が多い場合はそれなりの費用が発生するのでトータルコストをよく考える必要がある


  • サーバレスといえども処理の異常を検知するのはユーザの責任なので、適切なログ出力をしてモニタリングをすることは必要








6.ユースケース



Lambdaを利用した処理パターンが紹介されています。
下記の処理パターンが紹介されているのですが、必要になった場合に改めてよく読み直したいです。




  • S3を利用したリアルタイムファイル処理


  • DynamoDBによるデータトリガー処理


  • Kinesisによるリアルタイムストリーム処理


  • APIbotのバックエンド








7.サーバレスで作るアプリケーション例



3章にあったhello-worldのように、下記をイベントリソースとしたLambda関数の作成手順が載っています。






IAMユーザーの作成から丁寧に記載されているので、この手順を実際にやると理解が深まりそうです。
ソースコードはNode.jsで書かれています。






8.サーバレスアプリケーションのデプロイ



AWS SAMを使用することで、Lambda関数とイベントリソースなどを1つのテンプレートファイルで定義できるそうです。
作成したLambda関数をSAMファイルとしてエクスポートすることもできます。

また、AWS CodeBuild、AWS CodePipelineを使用することで、AWS SAM定義ファイルを用いたデプロイ自動化ができるようです。
手順も詳細に載っていてわかりやすかったので、今度実際にやってみたいと思います。






読み終えた感想



私は読むよりも実際に触ってみたい気持ちが強く、
3章のhello-world関数を実行した後からネットの情報で別の関数を作り始めたのですが、
ネットの情報だと基本的なことを知っている前提で書かれており、細かい手順が省略されていることが多いように感じました。

そのため、上手く動作しなくて調査に時間がかかってしまったので、
最低でも3章を全て読み切ってから実際に自分で関数を作成したほうがよかったと反省しています。

もっと言えば、7章のアプリケーション例を実際にやってみたほうがスムーズに理解が深まったのではないかと思いました。



初めてAWSを触る私にとって、非常に理解が深まる1冊でした。

また、Lambdaを使う上で困ったり忘れたりしたときに、この書籍を参考にしようと思います。