Lambda(ラムダ)とは、インフラを気にすることなくアプリケーションコードを実行できるデータ処理サービスです。
Lambdaの特徴
サーバレスによりEC2インスタンスの代わりにコードを実行することで効率的なアーキテクチャを実現することができます。
- 実行基盤は全てAWSが管理
- AWSサービスと連携させることで簡単にイベントドリブンなアプリケーションを実装可能
- Node.js/Javaで書かれたコードを実行
- 100ミリ秒単位でコード実行時間に対して課金でありコスト効率が非常に高い
- オートスケール
Lambdaの仕組み
利用方法もシンプルでWebアプリやモバイルアプリから簡単に利用可能です。
- Lambdaファンクションを用意する(コーディング)
- アプリからLambdaを呼び出す
Lambdaの機能
LambdaはPushモデルとPullモデルによって実行されます。
Pushモデル
S3/Cognito/SNSなどのAWSサービスとカスタムイベントが直接実行することにより起動するLambdaファンクション
- サービスもしくはアプリが直接実行する
- 順不同
- 3回までリトライ
Pullモデル
DyanamoDBとKinesisなどのデータ処理はLambdaに対して直接的にイベント発行を行わないためLambdaがそれらへポーリングを行い自らイベントを取得
- ストリームに入ってきた順に処理される
- イベントソースとして登録したストリームに対してLambdaが自動的にデータ取得などのファンクションを実行する
- イベント毎に複数レコードを取得可能
- データが期限切れになるまでリトライ
- Lambda自らがPullしてKinesisストリームの処理データのデータ項目を取得する
Lambdaの処理タイミング
他のAWSサービスやSDKを利用したモバイルもしくはWebアプリからの呼び出しが可能です。
非同期実行
リクエストが正常に受け付けられたというレスポンス内容が返ってくる
同期実行
実行完了時にLambdaファンクション内でセットしたレスポンスが返ってくる
Lambdaのパーミッション
Lambdaファンクション作成時にLambda側で自動で作成したり、クロスアカウントアクセスも設定可能
Execution
- LambdaファンクションがAWSリソースにどういったアクションを実施させるかを決定する
- 指定されたIAMロールに沿ってAWSのリソースへのアクセスが許可される
Invocation
Lambdaファンクションをどのリソースが実行できるかを決定する
Lambdaの連携
以下で挙げたAWSサービスと連携ができます。
- Amazon S3
- Amazon Kinesis
- Amazon DynamoDB Streams
- Amazon Cognite(Sync) ・・・認証
- Amazon SNS
- Alexa Skills Kit
- Amazon SWF ・・・ワークフロー
Lambdaの設定
- コードをアップロードする。(直接エディタ記述/S3インポート/Zip形式でアップロード)
- 関数を設定。
スケジュール関数は実行頻度を指定
イベント駆動型関数はイベントソースを指定 - 必要なメモリ容量を指定する
- タイムアウト時間を指定する
- VPCアクセス用にVPCを指定する
- 関数を起動する
ブループリント
Lambdaファンクションをコーディングする際にサンプルコード集を利用することが可能です。
- Lambdaを利用するユースケースを設計
- ブループリントにサンプルコードを探す
- サンプルコードを修正してファンクションを作成する
スケジュール機能
特定時刻をトリガーにしてLambdaファンクションを実行する。
特定時刻に毎回ファンクション実行したい処理を設定することで、Lambdaが定期的に実行
バージョニング
バージョニング機能でのファンクションの一時点を記録管理することが可能です。
バージョンの発行方法
- Lambdaファンクションの作成や更新時にpublishパラメータによりバージョンが発行される
- PublishVersionにより明示的にバージョンを発行することが可能
バージョンの特定
- 一度発行すると変更不可
- 単純にバージョン番号が増加する
- エイリアス(特定バージョンに対するポインタ)を設定して特定時点にマークすることが可能
- エイリアスを作成することでバージョン番号を把握していなくても指定バージョンを呼び出せる
VPCアクセス
インターネットを経由せずにVPC内のAWSリソースへとアクセス可能になります。
VPC 内のリソースへのアクセス
- AWSの全てのVPC内リソースなどへインターネットを経由せずにアクセス可能
- Elastic Network Interface(ENI)を利用して実現。ENIには指定したサブネットのIPがDHCPで動的に割り当てられる
アクセス制御
- VPC内リソースにアクセスさせたいLambdaファンクションに対してVPCサブネットおよびセキュリティグループを指定
- ファンクションに割り当てるIAM Roleに”AWSLambdaVPCAccessExecutionRole”というポリシーをアタッチしておくこと
Lambda Layer
2018年のre:inventで発表。
Lambdaファンクション間で共通するコンポーネントをLambdaLayerとして定義し参照できる。(5つまで)
ロードバランサー機能
2018年のre:inventで発表。
ALBのバックエンドにLambdaを呼び出すことが可能になり、WebアプリにLambdaファンクションを組み込みやすくなった。
Lambdaユースケース
Amazon Echoの音声処理をトリガーとしてAlexaスキルを呼び出す
S3内のCloudTrailのログ分析により異常を検知した場合にLambdaを起動してメール通知する
Lambda起動のスケーリング
Lambdaファンクションでストリーミングデータの傾向に応じてスケーリングのトリガーとなる
Lambdaモバイルアプリ
モバイルからの写真管理をLambdaを通して実施するなどモバイル連携も容易
Lambdaエッジ
- Lambdaの機能とCloudFrontのエッジロケーション処理の機能を合わせたサービス
- CloudFrontにLambda機能を連携し、世界中でインフラをユーザに近いロケーションでコードを実行が可能になる
次は「【AWS資格】API Gatewayの概要」です。
前回は「【AWS資格】サーバレスによるサービス化」です。
コメント