こんにちは、湖山です。
今回の記事は『サーバーレス』についての第2弾です。
前回、「サーバーレスとは?」についてご説明しました。
まだ見ていない方は以下の記事から読んで頂くとより理解しやすくなると思います。
今回は、「Amazon Web Services(AWS)」が提供している 「AWS Lambda(ラムダ)」について説明していきます。
Lambda
AWS公式のLambda紹介動画です。
※日本語字幕なので音量OFFでも問題ありません。
Lambdaとは
「AWS Lambda」 とは、サーバーをプロビジョニングしたり管理する必要なくコードを実行できるコンピューティングサービスです。
Lambda を使用すれば、実質どのようなタイプのアプリケーションやバックエンドサービスでも管理を必要とせずに実行できます。コードさえアップロードすれば、高可用性を実現しながらコードを実行およびスケーリングするために必要なことは、すべて Lambda により行われます。コードは、他の AWS サービスから自動的にトリガーするよう設定することも、ウェブやモバイルアプリケーションから直接呼び出すよう設定することもできます。
https://aws.amazon.com/jp/lambda/
AWSのさまざまなサービスとの連携が可能であり、基本的に何でもできる非常に便利なサービスです。
例えば、S3バケット(AWSのストレージサービス)へオブジェクトが格納されたら、Lambdaを経由してデータベースへ情報を格納したり、API Gatewayを使用して HTTP リクエストに応答してコードを実行することができます。
- サーバー管理が不要(サーバーレス)
- イベントに応答してバックエンドコードを実行するコンピューティングサービス
- 様々なAWSサービスと連携が可能
基本設定
Lambdaの基本設定は以下のスライドが非常に分かりやすく説明されています。
Lambda関数の作成
Lambda関数のコードはどこで作成しても大丈夫ですが、基本的には以下のような形になると思われます。
- AWS Lambda コンソール利用
- ローカルのエディタやIDEなど利用
- さくっと試したい場合にオススメ!!
ウェブブラウザ上でコードを作成し、テストも可能 - システム開発する場合はこちらかな
依存関係のパッケージ、外部ライブラリなどを含むzipファイルにしてアップロードすることで作成可能
制限事項
AWS Lambda では、関数の実行と保存に使用できるコンピューティングおよびストレージリソースの量が制限されます。
上限緩和可能〇
以下の制限は、リージョンごとに適用され、上限緩和することができます。
- 同時実行数
- 関数とレイヤーストレージ
- VPC あたりの Elastic Network Interface の数
上限緩和不可能×
以下の制限については上限緩和することはできません。
- 関数のメモリ割り当て
- 関数タイムアウト
- 関数の環境変数
- 関数の同時実行数のバースト
など
<参考>
AWS Lambda の制限
Lambda ランタイム
AWS Lambda では、ランタイムの使用を通じて複数の言語がサポートされます。
サポートする言語
・標準ランタイム
Python、Node.js、Java、Go、Ruby、C#、PowerShell
・カスタムランタイム
どのプログラミング言語でも実装できるようになりました。(C++ RUN など)
おすすめの言語は?
2020年現在では、Python(47%)とNode.js(39%)の2強のようです。
その理由は、Python, Node.jsはともにインタプリタ言語でプログラム実行の初動が早いことがLambdaの特性と一致していることが挙げられます。
ただし、常時アクセス・高CPU負荷など、Java、Go、Ruby、C#の方が向いているケースも存在するので、どのようなシステムを作成するのかで変わってきます。
様々な統計データ
「サーバーレスの現状」にて2020年時点の各種の統計データがまとめられています。なかなか興味深いになるデータとなっています。
- Lambdaの利用状況
- Lambdaの人気言語
- Lambdaの実行時間の状況
- Lambdaのメモリ割り当ての状況
など
ユースケース
データ処理
リアルタイムファイル処理
Amazon S3 を使用して AWS Lambda をトリガーし、アップロードしたデータを直ちに処理することができます。
例えば、Lambda を使用すると、画像のサムネイル作成、ビデオのコード変換、ファイルのインデックス作成、ログの処理、コンテンツの検証、およびデータの収集とフィルタリングをリアルタイムで実行できます。
リアルタイムストリーム処理
リアルタイムのストリーミングデータを AWS Lambda と Amazon Kinesis を使用して処理することで、アプリケーションのアクティビティのトラッキング、注文のトランザクション処理、クリックストリーム分析、データクレンジング、メトリクスの生成、ログのフィルタリング、インデックス作成、ソーシャルメディア分析、および IoT データのテレメトリと測定などが行えます。
抽出、変換、ロード
AWS Lambda を使用することで、DynamoDB テーブル内のデータの変更すべてに対して検証、フィルタリング、ソート、その他の変換を実行し、変換されたデータを別のデータストアにロードできます。
バックエンド
IoT バックエンド
AWS Lambda を使用して、ウェブ、モバイル、IoT、およびサードパーティの API リクエストを扱う、サーバーレスバックエンドを構築できます。
モバイルバックエンド
AWS Lambda と Amazon API Gateway を使用して、API リクエストの認証と処理のためのバックエンドを構築できます。Lambda によって、機能が豊富でカスタマイズされたアプリケーションの機能をより簡単に作成できます。
ウェブアプリケーション + 機能 API
開発者は、AWS Lambda を AWS の他のサービスと組み合わせることで、スケールアップまたはスケールダウンを自動的に行う強力なウェブアプリケーションを構築し、複数のデータセンターにわたって可用性の高い設定で実行できます。
ここまでのまとめ
ここまで、Lambdaの基本的な事項を説明してきました。
一旦、ポイントを以下にまとめています。
- 「AWS Lambda」 とは、サーバーレスでコードを実行できるコンピューティングサービス
- 基本的に何でもできるが、制限事項もある
- おすすめ言語はPythonかNode.js
次回、「AWS Lambda(ラムダ)」を使ってシンプルなバックエンドを実装していこうと思います。