AWS LambdaのGetting Startedの冒頭で説明されている部分を読み進めてみます。AWS Lambdaについて学習をする場合、多くの場合ここから始めるのがよさそうです。一方で必ずしも読み進めやすい記載内容ではなかったため、自分なりに理解した内容を中心に、可能な限り簡潔にまとめていきます。
ソース:https://aws.amazon.com/jp/getting-started/deep-dive-serverless/
サーバーレスについて
サーバーレスアプリケーションはイベント駆動型で、テクノロジーに依存しない API またはメッセージングを介して疎結合されます。イベント駆動型コードは、状態の変化やエンドポイントリクエストなどのイベントに応答して実行されます。
カテゴリ別のサービス学習 サーバーレス
最初の段落に、サーバーレスアプリケーションはイベント駆動型(イベント・ドリブン型)である旨記載があります。APIを使ってロジックを起動させるイメージですね。次の段落もその補足説明になっています。
Lambda関数は、(略)統合されたイベントソースを介して、非同期統合の作成に使用できるイベントによってトリガーされます
カテゴリ別のサービス学習 サーバーレス
次の段落ですが、「非同期統合の作成」あたりがよくわからないですね。原文をあたってみます。
Lambda functions are triggered by events via integrated event sources such as Amazon Simple Queue Service (SQS), Amazon Simple Notification Service (SNS), and Amazon Kinesis that can be used to create asynchronous integrations.
Category Deep Dive Serverless
どうやら、「非同期統合」という特別なものがあるわけではなく、「非同期な統合(連動といってもいいかも)」が実現できる、ということですかね。SQSやSNS、Amazon Kinesisというサービスがこの非同期な統合に使えるという紹介のようです。
サーバーレスアーキテクチャパターンは、同じくサーバーレスである他のマネージドサービスで Lambda を使用します。
カテゴリ別のサービス学習 サーバーレス
日本語的に少しあやしい感じがあるので、ここも原文をみてみます。
Serverless architecture patterns use Lambda with other managed services that are also serverless
Category Deep Dive Serverless
「サーバーレスアーキテクチャパターンとしては、Lambdaを他のサーバーレスのマネージド・サービスと共に使うかたちです」くらいの感じですかね。メッセージとしては「Lambdaを使ってサーバーレスにするなら、せっかくなので、Lambdaを管理するサービスも含めて全てをサーバーレスにしましょう」ということですね。以下が関連するマネージド・サービスとして紹介されています。
- Amazon API Gateway: API管理
- Amazon DynamoDB: データ格納
- AWS Step Functions: オーケストレーション
- 一連のデベロッパーツール
ところで、”サーバーレスアーキテクチャパターン”という単語が唐突に出てきますが、特に説明もありません。AWSの公式ドキュメントを探しましたが、定義らしきものも見つけられなかったので少しWebを調べてみました。
参考:Serverless architecture patterns
いくつか見た中で、こちらのブログの説明が端的でわかりやすかったので紹介します。
こちらの記事では、Lambdaを用いたアーキテクチャパターンをいくつか紹介しています。以下の図は最もシンプルなものですが、こういったイメージ図が一つあるだけで随分メッセージが伝わってくるのだけど、AWSに限った話ではないですが、公式ドキュメントでは中々お目にかかれないですね。
サーバーレスを使う理由
ここでは、ユーザにとっての利点としてざっくり以下の2点が説明されています。
- サーバの管理が(メンテナンス、拡張など含め)不要
- 使った分だけに課金される
コアサーバーレスサービス
サーバーレスアプリケーションは、通常、フルマネージドサービスを使用して、コンピューティング、データ、メッセージングと統合、ストリーミング、ユーザー管理、ID レイヤー全体のビルディングブロックとして構築されます
カテゴリ別のサービス学習 サーバーレス
「統合、」あたりからちょっとよくわからないので、原文をあたってみます。
Serverless applications are generally built using fully managed services as building blocks across the compute, data, messaging and integration, streaming, and user management and identity layers.
Category Deep Dive Serverless
「サーバーレスのアプリケーションは、通常フルマネージドサービスを使って、”building blocks”として以下を組み合わせて構築します」
- compute
- data
- messaging and integration
- streaming
- user management and identity layers
という感じでしょうか。
本セクションでは、その単語こそ出てきませんが、”serverless architecture”として利用する(べき?ことができる?)AWSの関連サービスを紹介しています。
なお、”Building Blocks”という表現がいまいちピンとこなかったので少し調べてみました。
参考:Building Blocks
こちらのブログに分かりやすい説明がありましたので、紹介します。
AWS Lambda alone cannot implement the entire flow of a serverless architecture. It needs several other components, which are divided into three parts:
Building Blocks for AWS Lambda
なるほど、Lambda単体ではデプロイすることができない(というか、仮にできたとしても何の意味もない)ため、必ずいくつかの関連サービスを組み合わせたセット単位で取り扱う必要があるため、”Block”という単語でセットであることを示しているのですね。こちらの記事には最もシンプルな”Building Block”として以下が紹介されています。
“Building Block”という単語と”Serverless architecture”という単語は、今の所、似たような意味で使われていそうです。
作ってみよう
ここまでの知識を基に、4種類のチュートリアルが用意されています。「「Hello, World!」をサーバーレスで実行」を最初に実施したら、その後は特に取り組む順番は気にしなくてよさそうです。
まとめ
日本語訳があやしかったり、そもそも英語の原文もちょっと分かりづらい表現もあるため思ったほどサクッとは読めませんでしたが、ここでのポイントは以下にまとめることができそうです。
- Lambdaはイベント駆動形で、API GatewayなどのAWS関連サービスと連動させて動作させる
- Lambdaと各サービスの組み合わせ方にはパターンがあるので、ベストプラクティスを探して参考にする
とりあえず、概況は把握できた気がするので、次からは早速手を動かしてサービスに触れていきたいと思います。