メインコンテンツに移動
AWS グラレコ解説

サーバーレスでイベント駆動型アプリケーションを実現 ! AWS Lambda をグラレコで解説

2022-03-02 | Author : 米倉 裕基 (監修 : 下川 賢介, 福井 厚)

はじめに

※ 本連載では、様々な AWS サービスをグラフィックレコーディングで紹介する awsgeek.com を、日本語に翻訳し、図の解説をしていきます。awsgeek.com は 、Jerry Hargrove 氏が運営しているサイトです。


builders.flash 読者のみなさん、こんにちは ! テクニカルライターの米倉裕基と申します。
本記事では、サーバーレスなイベント駆動型コンピューティングサービス、AWS Lambda についてご紹介します。

近年、新たにシステムアーキテクチャを設計する上で、「サーバーレスアーキテクチャ」を検討・導入する企業が増えてきています。サーバーレスなサービスを組み合わせてアーキテクチャを構築することで、サーバーを自社で管理することなく、完全なアプリケーションスタックを構築し、開発速度を上げ、サーバー管理コストを削減できるためです。

AWS が提供するサーバーレスサービスは、コンピューティング統合データストアの 3 つのレイヤーで構成されます。本記事で紹介する AWS Lambda は、それら 3 つのレイヤーの中でコンピューティングを担うサービスです。各レイヤーに含まれる AWS サービスについて詳しくは、『製品』ページの「AWS でのサーバーレス」をご覧ください。

それでは、AWS Lambda の主な特徴と提供する機能について見ていきましょう。


X ポスト » | Facebook シェア » | はてブ »

builders.flash メールメンバー登録

builders.flash メールメンバー登録で、毎月の最新アップデート情報とともに、AWS を無料でお試しいただけるクレジットコードを受け取ることができます。 
今すぐ登録 »

1. イベント駆動型アプリケーション

解説

A diagram in Japanese illustrating an AWS event-driven application architecture. The diagram shows DynamoDB and S3 as event sources, EventBridge as the event bus, and Lambda as the event sink. The image uses icons and text to depict the flow of events between these AWS services.

AWS Lambda やその他 AWS が提供するサーバーレスサービスを組み合わせることで、AWS 上のイベントソースで発生するイベントを起点として処理を実行するイベント駆動型アプリケーションを実現できます。

AWS Lambda を使ったイベント駆動型アプリケーションは、多様な構成パターンが考えられます。Amazon S3 バケットにオブジェクトがアップロードや、Amazon API Gateway による HTTP リクエスト の受信をイベントトリガーとして Lambda 関数を呼び出すこともできますし、Amazon SNS や Amazon SQS、Amazon Kinesis などイベントストア / ルーター / バスとして動作する様々なメッセージングサービスを介して、Lambda 関数を呼び出すこともできます。

本記事では、上記の構成の中でイベントバスとしての役割を持つ Amazon EventBridge を中継点として利用した構成をイベント駆動型アプリケーションの例としてご説明します。その他のメッセージングサービスを使ったイベント駆動型アプリケーションについて詳しく知りたい場合は、「メッセージ連携からイベント駆動へ」を合わせてご覧ください。

Amazon EventBridge を使ったイベント駆動型アプリケーションは主に、イベントの送信元となるイベントソース、イベントの発生を他のサービスに伝えるイベントバス、イベントの送信先となるイベントシンクの 3 つのレイヤーで構成されます。

各レイヤーの役割とサービスリストは以下のとおりです。

レイヤー

内容

サービスリスト

イベントソース

イベントの送信元であるアプリケーションやサービスを指します。AWS サービスの他にサードパーティーや独自のアプリケーションもイベントソースとして利用できます。

Amazon S3、Amazon Kinesis、Amazon API Gateway など 90 種類を超える AWS サービス

イベントバス

イベントを受信するバスです。発生したイベントをルールに基づいてフィルタリングし、別の AWS サービスに送信します。

Amazon EventBridge

イベントシンク

受信したイベントを元に Lambda 関数を実行します。

AWS Lambda (Amazon EventBridge は、AWS Lambda を含め 15 種類を超える AWS サービスをイベント送信先のターゲットとして利用できます)

なお上図のように、Amazon DynamoDB や Amazon S3 のイベントデータを Amazon EventBridge に渡すためには、Amazon CloudTrail でイベントソースのデータイベントを記録するように証跡を作成する必要があります。詳しくは、「証跡のデータイベントの記録」をご覧ください。

イベント駆動型アプリケーションでは、例えば「ユーザーが登録された」や「予約注文が入った」などあらかじめ条件を設定したイベントを起点として、自律的に処理が実行されるように実装できます。特定の処理ごとに分割された小さな独立したサービスでソフトウェアを構成 (マイクロサービスアーキテクチャ) することで、単一のシステムですべての処理を管理する「モノリシック」なアプリケーションと比較して、スケールしやすく、拡張性の高い、柔軟なアプリケーションを構築できます。

AWS サービスを使ったイベント駆動アーキテクチャについて詳しくは、Amazon Web Servicesブログの「Operating Lambda: イベント駆動型アーキテクチャを理解する」をご覧ください。

クリックすると拡大します

2. CODE more / SERVE(r) less

サーバーレス」とは、「サーバーが存在しない」ということではありません。AWS Lambda のようなサーバーレスのコンピューティングサービスを利用していても、コードを実行したり、APIを呼び出したりする後ろではクラウド上でサーバーが稼働しています。「サーバーレス」とは、OSやランタイムなどコードの実行基盤を、 AWS がユーザーに代わって管理することを意味し、それによりユーザーはサーバーの存在を意識することなくビジネスロジックに関わるコード開発に集中できます。

インフラ管理の手間とコストを減らしつつ、コード開発にもっと多くの力を割く (CODE more / SERVE(r) less) サーバーレスアーキテクチャが提示する考え方については、#ServerlessForEveryone というハッシュタグの元、AWS の Principal Developer Advocate を務める Eric Johnson 氏が中心となり、Twitter 上でさまざまな情報発信、意見交換が行われています。サーバーレスアーキテクチャの最新の動向をお知りになりたい場合は、ぜひ Eric Johnson 氏のアカウント (@edjgeek) のフォロー、または #ServerlessForEveryone で検索してみてください。

Illustration comparing serverless and server-based approaches. The left side shows a thumbs up with code and the words 'code more', representing the benefits of serverless computing. The right side shows a thumbs down next to a server icon with a red 'no' symbol and the words 'server less', highlighting reduced reliance on servers. Includes the hashtag #serverlessforeveryone and a cartoon drawing of @edjgeek.

3. Lambda ランタイム

解説

Diagram illustrating the various programming languages supported by AWS Lambda in 2022, including Java, Ruby, Node.js, C#, PowerShell, Python, and Go, each represented with their logos and names.

AWS Lambda では、複数言語のランタイムを正式にサポートしています。ランタイムとは、プログラムの実行環境を指し、例えば「Python 3.9」の標準機能を使ったプログラムであれば、AWS Lambda の Python 3.9 ランタイムを利用するだけで、ユーザーは自分で実行環境の構築をしなくてもすぐにコードを実行できます。

2022 年 2 月現在サポートされているランタイムの種類は以下の通りです。

ランタイム

バージョン

.Net Core (C#/Powershell)

3.1

Go

1.x

Java

11 / 8 on Amazon Linux 2, 8 on Amazon Linux 1

Node.js

14.x, 12.x

Python

3.9, 3.8, 3.7, 3.6

Ruby 2.7

ランタイムバージョンのサポート状況については、『AWS Lambda デベロッパーガイド』の「ランタイムサポートポリシー」をご覧ください。非推奨 (サポート終了) になったランタイムバージョンであっても引き続き Lambda 関数の呼び出しに利用できますが、AWS によるセキュリティ性の確保やテクニカルサポートを受けられなくなるため、サポート対象のランタイムバージョンへの移行をお勧めします。

ただし、カスタムランタイムを構築することで、AWS がサポートしていないいかなるプログラム言語のランタイムも自由に利用できます。カスタムランタイムについて詳しくは、「AWS Lambda のカスタムランタイム」をご覧ください。

なお、コンテナベースのアプリケーション開発の需要の高まりを受け、2020 年 12 月より、AWS Lambda は従来の .zip ファイルのアーカイブに加えてコンテナイメージをサポートするようになりました。これにより、Lambda 関数を、上記のランタイムと依存関係をまとめてコンテナイメージとしてパッケージ化しデプロイすることができるようになりました。詳細に関しては こちらの Amazon Web Service ブログ記事 をご覧ください。

クリックすると拡大します

4. AWS Lambda の関数設定

前述のように、AWS Lambda ではコードの実行環境は AWS 側で管理されるため、ユーザーはコードの開発に集中できます。ユーザーが Lambda 関数を作成する際は、実行されるコード自体の開発と、メモリーやタイムアウト、IAMロール、イベントトリガーなど Lambda 関数を実行する上での関数オプションの設定が主な作業になります。

なお、Lambda 関数オプションの設定は、Lambda コンソールおよび Lambda API で設定できます。詳しくは、「Lambda 関数オプションの設定」をご覧ください。

A Japanese-language diagram illustrating AWS Lambda composition, showing that a Lambda function consists of code and configuration settings such as memory, timeout, and IAM roles.

5. 複数の Lambda 関数間でのライブラリの共有

AWS Lambda で、ランタイムの他にライブラリや依存関係を利用するには、.zip アーカイブやコンテナイメージに該当のライブラリや依存関係を同梱してデプロイパッケージを作成します。ただし、複数の Lambda 関数で同じライブラリなどを利用する場合、関数ごとに同じライブラリを同梱することはデプロイパッケージのサイズが膨らむ要因になります。

そのためAWS Lambda では、複数の Lambda 関数間で共通のライブラリや依存関係を共有できる仕組みとして Lambda レイヤーが提供されています。

Lambda レイヤーには、ライブラリ、 カスタムランタイム 、データ、または設定ファイルを含めることができます。Lambda レイヤーを使用することで、コードの共有と責任の分離を促進し、ビジネスロジックの記述をより迅速に繰り返すことができます。

なお、コンテナイメージでは Lambda レイヤーをサポートしていません。コンテナイメージ内で Lambda レイヤーを利用したい場合は、Amazon Web Services ブログの「コンテナイメージ内で Lambda レイヤーと拡張機能を動作させる」をご確認ください。

クリックすると拡大します

Diagram illustrating AWS Lambda's BYOC (Bring Your Own Code) concept, showing Lambda functions and layers with Japanese labels (関数 for function and レイヤー for layer) and associated graphics.

最新アップデート : AWS Lambda の進化

2014 年にサービスを開始した AWS Lambda は、現在も進化を続けています。例えば、2021 年 9 月 29 日から、従来の x86 プロセッサに加えて、ARM ベースの AWS Graviton2 プロセッサを利用できるようになりました。

これにより、Lambda 関数は、20% 低いコスト最大 19% 優れたパフォーマンスを実現できるようになりました。

AWS Graviton2 プロセッサの利用開始について詳しくは、Amazon Web Services ブログの「AWS Graviton2 プロセッサを搭載した AWS Lambda 関数 – Arm で関数を実行し、最大 34% 優れた料金パフォーマンスを実現」をご覧ください。

Screenshot showing the architecture selection screen for AWS Lambda in Japanese, highlighting the arm64 option.

まとめ

本記事では、AWS Lambda の機能を 5 つの項目に分けてご紹介しました。

最後に、全体の図を見てみましょう。

本記事は、従来型のモノリシックアーキテクチャと比較して、「サーバーレス」や「マイクロサービス」アーキテクチャが優れていると主張するものではありません。サーバーレスアーキテクチャであっても、ケースバイケースでメリットもデメリットも存在しています。より堅牢で、単一のシステムで統合的に各種プロセスを管理することが望ましいアプリケーションの場合は、従来型のモノリシックアーキテクチャが向いているケースも十分に考えられます。

AWS では、各アプリケーションの特性に合わせて最も効果的なアーキテクチャを設計・構築いただけるよう、サーバーレスを含む多様なサービスを提供しています。

なお、サーバーレスの便利な点や勉強方法については、過去の builders.flash 記事「サーバーレスって何が便利なの ?」や「サーバーレスの勉強方法について聞いてみた」にも掲載されておりますので、ぜひご一読ください。

また、AWS Lambda のサービスの詳細に関しましては、こちら をご覧ください。

AWS Lambdaを活用したイベント駆動型アプリケーションの概要を日本語で説明した図解。DynamoDBやS3などのイベントソース、EventBridgeによるイベントパス、Lambdaによるイベントシンク、様々なプログラミング言語のサポート(Java, Python, Node.js, C#, Go, Ruby, PowerShell)など、EDAの仕組みとサーバーレスの構成要素が分かりやすく描かれています。

筆者 / 監修者プロフィール

米倉 裕基

Portrait photograph of a person with short dark hair, wearing glasses and a gray sweater, against a light blue background. アマゾン ウェブ サービス ジャパン合同会社テクニカルライター・イラストレーター日英テクニカルライター・イラストレーター・ドキュメントエンジニアとして、各種エンジニア向け技術文書の制作を行ってきました。趣味は娘に隠れてホラーゲームをプレイすることと、暗号通貨自動取引ボットの開発です。現在、AWS や機械学習、ブロックチェーン関連の資格取得に向け勉強中です。

下川 賢介 (@_kensh)

A portrait of a person with short dark hair wearing a dark sweater, photographed indoors with a soft background. アマゾン ウェブ サービス ジャパン合同会社シニア サーバーレススペシャリスト ソリューションアーキテクトServerless Specialist Solutions Architect として AWS Japan に勤務。Serverless の大好きな特徴は、ビジネスロジックに集中できるところ。ビジネスオーナーにとってインフラの管理やサービスの冗長化などは、ビジネスのタイプに関わらず必ず必要になってくる事柄です。でもどのサービス、どのビジネスにでも必要ということは、逆にビジネスの色はそこには乗って来ないということ。フルマネージドなサービスを使って関数までそぎ落とされたロジックレベルの管理だけでオリジナルのサービスを構築できるという Serverless の特徴は技術者だけでなく、ビジネスに多大な影響を与えています。このような Serverless の嬉しい特徴をデベロッパーやビジネスオーナーと一緒に体験し、面白いビジネスの実現を支えるために日々活動しています。

福井 厚

A portrait photograph of a smiling man wearing glasses, a beard, and a red sweater over a pink shirt. The image is titled 'Portrait of Fukui Atsushi, 2021.' アマゾン ウェブ サービス ジャパン合同会社シニアソリューションアーキテクト サーバーレススペシャリスト2015 年からアマゾンウェブサービスジャパンでソリューションアーキテクトとして活動。サーバーレススペシャリストとして日々モダンアプリケーション開発とサーバーレスの活用の技術支援を行なっています。