1. AWS Lambdaとは
amazon aws上で提供されている、サーバーレスのAPI実行環境。
自前のサーバーをたてる必要なく、lambda上でコードが実行される。
awsの別のサービスのイベントを検知し、自動でコードを実行するといった、イベントの発生をトリガーとした運用を行える。
2. lambdaの特徴
-
インフラ周りの管理が不要
自身で一からサーバー環境を構築する必要が無い。
インフラ周りはすべてlambdaがハンドリングして管理するため、インフラ管理の工数も大幅に削減できる。
また、開発者がビジネスロジックの開発に集中できる利点が生まれる。 -
実行環境のオートスケール
例えば、運用を続けるうちにリクエスト数が増大してきた場合、負荷に耐えうる最適なパフォーマンスにlambdaがオートスケールしてくれる。
サーバーリソースの管理も意識する必要がない。 -
ほぼ全てのAWSサービスに対するイベントハンドリング及び操作
lambdaの機能のみで、ほぼ全てのAWSサービス(イベントソース)からのイベントをキャッチし、対応する処理を実行できる。
3. lambdaの料金体系
・lambdaファンクションに対するリクエスト回数
・lambdaファンクションのメモリに応じた実行時間
上記二点に対して課金が発生する。
100万リクエスト辺り0.02ドル、1GBのファンクションを0.1秒実行で0.00001667ドルらしい。
無料利用枠は、月に100万リクエスト・40万GBのコンピューティング時間となっている。(1年経過後も継続)
https://aws.amazon.com/jp/lambda/pricing/
4. lambdaにおける開発
4.1 開発言語
・Node.js [Javascript]
・Python
・Java [Java8互換]
・C# [.net core]
サードパーティーライブラリ等の組み込みも可能。
4.2 開発環境
lambdaが提供しているブラウザベースのコードエディタが利用可能。
オンプレ上で記述したテキストファイルをZIPに圧縮し、アップロードも可能。
5. lambdaの仕組み
lambdaファンクションと呼ばれる単位で実行される関数を作成する。
1ファンクション=1機能が原則。
機能例.
・amazon s3にファイルが投入されたら、ファイルのメタデータを抜き出して加工する
→ DBに格納し、ファイル検索のためのインデックスとしての活用を図る
・s3に投入されたファイルを検知し、SNSと連携してファイルの追加を通知する
→ ユーザーに対して即座に通知ができる
lambdaファンクションには、ファンクション毎に実行メモリ量を割り当てる。処理の複雑さ等によって割り当て量が柔軟に設定可能。
また、ファンクション毎のタイムアウト時間の設定も必要。
ファンクションに対して紐付けるawsサービスの指定も行う。(イベントソース)
イベントソースからは、発生したイベントの詳細をJSONとして送られる。
s3であれば、以下のような情報が含まれる。
・PUTされたバケット名
・PUTされたオブジェクトの詳細(キー・サイズ・タグなど)
・イベント発生時刻 etc...
また、ファンクション毎にIAMロールを指定し、イベントソースに対する詳細なアクセス権の設定が可能。
lambdaファンクションそのものの実行モニタリングも自動で行われる。
・リクエスト数
・遅延率
・可用性・エラー率
(CloudWatchへ保存され、CloudWatchのコンソール上で閲覧可能)
6. ユーザーアプリケーションからの利用
awsのサービスに対する処理だけでなく、独自のユーザーアプリケーションからの利用も可能。
lambda経由でs3に対してファイルを投入する、lambda経由でec2に対する処理を実行する、
lambda経由でs3のファイル情報を取得するなど、
awsの各種サービスに対する処理をlambdaに対するリクエストのみで完結させられる点がメリット。(SDK等使わない)
尚、上記の使い方の場合、lambdaに加えてamazon api gatewayを併せて利用する必要がある。
(AWS上のコード等を、RESTAPIとして外部に公開してアクセスできるようにするサービス)