連載
» 2017年02月23日 05時00分 公開

AWS Lambdaで始めるサーバレスアーキテクチャ入門(1):アプリ開発者もインフラ管理者も知っておきたいサーバレスとAWS Lambdaの基礎知識 (2/2)

[先崎一樹,三菱総研DCS]
前のページへ 1|2       

AWS Lambdaとは

 ここまでの説明でサーバレスアーキテクチャの概要は理解いただけたかと思います。ここからは、サーバレスアーキテクチャを代表するAWSのサービス、Lambdaを紹介します。

AWS Lambdaの特徴

 AWSには、Lambdaというイベントドリブンなマネージドサービスが存在し、「FaaS(Function as a Service)」などと呼ばれています。これはプログラムの実行環境がサービスとして提供されるもので、ユーザーはプログラムを用意しLambdaへデプロイするだけで実行できます。

 Lambdaを利用することでサーバレスアーキテクチャの疎結合を、よりシームレスに実現できます。AWSの公式チュートリアルでも紹介されていますが、S3へ画像をアップロードした際に自動でサムネイル画像を用意したいユースケースがあったとします。これは以下の3つの手順で実現できます。

  1. サムネイルを作成するプログラムを用意
  2. 作成したプログラムをLambdaにデプロイ
  3. Lambdaのイベントトリガーを「S3へのオブジェクトアップロード」と指定

図4 サムネイルの自動生成と自動アップロード

AWS Lambdaの構成

 Lambdaには実行時間とメモリ割り当てに制限があり、実行時間の最大値は5分間で、メモリは1536MBまでとなっています。プログラムの実行中に、タイムアウトやメモリ上限を迎えた場合は、プログラムが強制終了します。そのため、1つのプログラム内で全てを処理しようとはせずに、複数のプログラムが次々と呼び出される構成が推奨されます。

 例えば、「Amazon SES(Simple Email Service)でメールを受信したときにメールをデータベースへと登録し、『登録ありがとうございました』と自動応答メールを送信したい」とします。この場合には、「メールをデータベースへ登録する処理」と「自動応答メールの送信処理」の2つのLambdaプログラムを用意することが望ましいです。

図5 受信メールのデータベース登録と自動応答メールの送信

AWS Lambdaのイベントトリガー

 Lambdaのイベントトリガーとして利用されるAWSサービスは下記の通りです(2017年2月現在)。

表1 Lambdaのイベントトリガー
サービス 概要
S3 オブジェクトの作成、更新、削除
DynamoDB レコードの追加、更新、削除
Kinesis Streams Kinesisストリームのレコード投稿
SNS(Amazon Simple Notification Service) SNSトピックへのメッセージ発行
SES メールの受信
Cognito データセットの同期
CloudWatch Logs ログの記録
CloudFormation スタックの作成、更新、削除
CloudWatch Events AWSリソースの状態変化(EC2の起動、停止など)、スケジュール
Code Commit ブランチやタグの作成、リソースのプッシュ
Config リソースの作成、削除、変更
API Gateway HTTPSリクエスト

AWS Lambdaでサポートされる言語

 Lambdaでは以下の言語が利用可能です(2017年2月現在)。

表2 Lambdaでサポートされる言語
言語 バージョン
Node.js v0.10.36、v4.3.2(推奨)
Java Java 8
Python Python 2.7
C# .NET Core 1.0.1

AWS Lambda利用時の留意点

 ここまでLambdaの特徴や推奨する構成方法について説明しましたが、留意点についても説明しておきます。

プログラム処理遅延

 Lambdaはコンテナサービスによって実現されています。そのため、「Lambda作成後の初回実行時」「プログラムや設定更新後の初回実行時」にプログラムのコンテナロード処理が走り、若干の遅延が発生します。

 また、前回の実行からある程度時間が経過した後に再実行される場合にも、初回実行時同様にプログラムのコンテナロード処理が走ります。

 コンテナロード処理が実行される間隔はAWSから公表されていませんが、定期的にLambdaを実行するポーリングの仕組みを導入することで、ある程度の改善は可能となります。

プログラム処理失敗時の再試行

 Lambdaにデプロイされたプログラム処理が失敗した場合、基本的には自動で3回再試行されます。再試行の条件は前述のタイムアウトやメモリ不足などが該当します。

 LambdaをNode.jsで作成した場合に限り、「context.fail()」が呼び出されると処理が失敗したと判断され再試行が走ります。「context.done()」を呼び出すことで再試行せずに処理を終了することも可能です。再試行に伴う実行回数や実行時間も課金対象となるため、注意が必要です。

次回からは、Lambdaを活用したサーバレスアーキテクチャの構築方法について

 今回は、AWSとサーバレスアーキテクチャの概要とLambdaについて紹介しました。次回からは、Lambdaプログラムの作成方法とLambdaを活用したサーバレスアーキテクチャの構築方法について解説していきます。お楽しみに。

前のページへ 1|2       

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。