【AWS初心者向け】5分でざっくりわかる!AWS Lambda
こんにちは!
株式会社ビヨンド四国オフィスのペルシャ猫、いのうえです。
今日は、AWSサービスの代表的な1つである【Lambda】について解説していきます。
Lambdaってなに?
Lambdaはサーバーレスを実現するサービスです。
サーバーレスでプログラムを実行できる環境がAWSより提供されます。
サーバーレスとは、その名の通り「サーバーがない」といったわけではありません。
実際、サーバーは存在しますが、サーバーの構築、保守といったことはAWSが担ってくれるため
利用者はサーバーの構築や保守から解放され、サーバーの管理が一切不要となります。
通常だと、プログラムを開発したり、実行したりするためには、
サーバーを用意し、プログラムを実行する為に用意したサーバーやインスタンスを起動し続けることが必要となります。
ただし、Lambdaでは上記のような環境があらかじめ用意されています。
その為、利用者はサーバーの管理を気にせずプログラム開発に注力することができます。
また、プログラム実行時にのみ利用料金が発生する仕組みなので、コスト最小限でLambdaを利用することができます。
これが常駐サーバーとは異なる利点です。
Lambdaでは、ミリ秒単位の無駄のない課金が適応されています。
関数が実行される1ミリ秒ごとに課金が発生するということです。
関数の実行にかかる時間が、月間400,000/秒となるまでは、無料で利用することができます。
ただし、Lambda関数に割り当てたメモリによって無料で使える時間枠が異なります。
リクエスト数に対しても課金されますが、月間100万リクエストまでは無料で利用することができます。
Lambdaの作成やLambdaが実行されていない待機時間は課金されません。
AWS Lambdaの料金
このように、Lambdaのリクエスト数と関数の実行時間に応じて、従量課金される仕組みになっている為
大規模なシステムでは、よりコストメリットが大きくなるということです。
しかも、Lambdaはリージョン内の複数のアベイラビリティゾーンで動作している為、
可用性が高く、耐障害性に優れた運用パフォーマンスを提供することができます。
定期的なダウンタイムやサーバー停止がなく、優れたサービス提供を実現しています。
これは、利用者が意識することなく、高可用性、耐障害性が保たれていることになります。
Lambdaは、データやリクエストのリアルタイム処理やバックエンドの処理を自動実行する仕組みです。
Lambdaでは、なんらかのイベントが発生した時に、あらかじめ設定しておいた処理が自動で実行されます。
実行したいプログラムのランタイムを選択し、ソースコードをアップロードするだけでLambdaを簡単に実行することができます。
Lambdaでは、特別な言語を覚える必要はなく、一般的な言語をサポートしてくれています。
その為、Lambdaを使うために新しい言語の勉強が不要となり、使い慣れた言語ですぐにLambdaの利用を始めることができます。
言語のサポートは、年々増えており今後も増えていくことが予想されます。
現在、Lambdaでサポートされている言語は以下のようなものがあります。
- C#
- PowerShell
- Go
- Java
- Node.js
- Python
- Ruby
上記以外の言語を使用したいという場合は、カスタムランタイム機能を利用することができます。
Lambda関数は、Lambdaサービスに保存される仕組みになっています。
何かしらのトリガーが発生した時に、特定のAWSリソースにおいて実行されます。
例えば、S3バケットに画像をアップロードすると、これがトリガーとなりLambdaが画像リサイズ処理を実行しWebサイトなどに適した画像に変換されます。
サムネイル作成関数が呼び出され、サムネイルを自動的に作成することができます。
■Lambdaを呼び出させるサービス
Lambdaがイベントを読み取るサービス | Kinesis、DynamoDB、SQS |
Lambda関数を同期的に呼び出すサービス | ELB、ALB、Cognito、Lex、Alexa、API Gateway、CloudFront、Kinesis Data Firehose |
Lambda関数を非同期的に呼び出すサービス | S3、SNS、SES、CloudFormation、CloudWatch Logs、CloudWatch Events、CodeCommit、Config |
Lambdaをうまく利用すれば、低コストで、安定したWebアプリケーションが作れるようになります。
AWSサービスとの連携
例えば、Lambdaでは以下のようなイベントをトリガーとして実行することができます。
- 特定の時間になった時(CloudWatch Events)
- S3にデータがアップロードされた時
- DynamoDBに新しいアイテムが書き込まれた時
- Auto Scalingアクションが実行された時
- Webページでボタンが押された時
- APIが呼び出された時
- 「Alexa、○○について教えて」といった時
このようにLambdaでは、AWSの処理を簡単に自動化することができます。
サーバーの管理が不要に
前述でも申しましたように、Lambdaはサーバーレスで、サーバーの管理が必要ありません。
その為、サーバーの運用から解放され、プログラムコードの開発に注力することができます。
以下のようなサーバー管理が必要なくなります。
- オペレーティングシステムの更新
- セキュリティパッチの適用
- ディスク容量の追加
- オペレーティングシステム、ミドルウェアのメンテナンス
- 冗長化、障害時の復旧
- スケーラビリティの確保
- 障害を考慮した設計
- 実行エラー時のリトライ
- ジョブが特定時間に集中することへの考慮
また、Lambdaはリクエストやトリガーなどの実行指示がない時は、処理が実行されません。
常駐サーバーのように、リクエストやトリガーを待っている間に稼働し続ける必要がありません。
リクエストやトリガーが発生した時のみ、コードが実行されます。
もし、2つのリクエストが同時に発生した場合は、その2つのLambda関数が同時に実行されるようになっています。
リクエスト数が増えれば、それだけLambda関数が実行される回数も多くなりますが
Auto Scalingの設定をしなくても、Lambdaでは自動的にスケーラビリティが確保されることとなります。
これは、リクエスト数に応じて、水平的にスケーリングされ、並行してLambda関数が実行されます。
その為、Auto Scalingを設定する必要がなくなるというわけです。
初期設定で、アカウント全体のLambda関数の同時実行数1,000という制限はありますが、
1,000以上の同時実行数が必要な時は、同時実行数の引き上げをリクエストすることもできます。
さらに、Lambda関数ごとに同時実行数の上限を定めておくこともできます。
さいごに
今回はLambdaについて5分でわかる!ざっくり解説をしましたが、いかがだったでしょうか?
イベントやトリガーが実行された時に課金が発生し、待機時間は料金が発生しないというのもいいところだと思いました!
また、耐障害性、可用性の高さもLambdaの魅力です。
障害が発生しにくいということは、アプリケーションを安定して動かすことが可能であるということです。
こうして、AWSについてのブログを書くたび、AWSクラウドの人気に納得です。
引き続き、AWSサービスについての、ざっくり解説をブログにしたいと思っておりますので読んでいただけたら嬉しく思います。
日々成長、日々前進。
毎日、私自身をアップデートしていかなければ!!!
最後まで読んでくださって、ありがとうございます。