はじめに
※ 本連載では、様々な AWS サービスをグラフィックレコーディングで紹介する awsgeek.com を、日本語に翻訳し、図の解説をしていきます。awsgeek.com は 、Jerry Hargrove 氏が運営しているサイトです。
builders.flash 読者のみなさん、こんにちは ! テクニカルライターの米倉裕基と申します。
本記事では、サーバーレスなイベント駆動型コンピューティングサービス、AWS Lambda についてご紹介します。
近年、新たにシステムアーキテクチャを設計する上で、「サーバーレスアーキテクチャ」を検討・導入する企業が増えてきています。サーバーレスなサービスを組み合わせてアーキテクチャを構築することで、サーバーを自社で管理することなく、完全なアプリケーションスタックを構築し、開発速度を上げ、サーバー管理コストを削減できるためです。
AWS が提供するサーバーレスサービスは、コンピューティング、統合、データストアの 3 つのレイヤーで構成されます。本記事で紹介する AWS Lambda は、それら 3 つのレイヤーの中でコンピューティングを担うサービスです。各レイヤーに含まれる AWS サービスについて詳しくは、『製品』ページの「AWS でのサーバーレス」をご覧ください。
それでは、AWS Lambda の主な特徴と提供する機能について見ていきましょう。
builders.flash メールメンバー登録
1. イベント駆動型アプリケーション
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 で検索してみてください。

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

5. 複数の Lambda 関数間でのライブラリの共有
AWS Lambda で、ランタイムの他にライブラリや依存関係を利用するには、.zip アーカイブやコンテナイメージに該当のライブラリや依存関係を同梱してデプロイパッケージを作成します。ただし、複数の Lambda 関数で同じライブラリなどを利用する場合、関数ごとに同じライブラリを同梱することはデプロイパッケージのサイズが膨らむ要因になります。
そのためAWS Lambda では、複数の Lambda 関数間で共通のライブラリや依存関係を共有できる仕組みとして Lambda レイヤーが提供されています。
Lambda レイヤーには、ライブラリ、 カスタムランタイム 、データ、または設定ファイルを含めることができます。Lambda レイヤーを使用することで、コードの共有と責任の分離を促進し、ビジネスロジックの記述をより迅速に繰り返すことができます。
なお、コンテナイメージでは Lambda レイヤーをサポートしていません。コンテナイメージ内で Lambda レイヤーを利用したい場合は、Amazon Web Services ブログの「コンテナイメージ内で Lambda レイヤーと拡張機能を動作させる」をご確認ください。
クリックすると拡大します

最新アップデート : 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% 優れた料金パフォーマンスを実現」をご覧ください。

まとめ
本記事では、AWS Lambda の機能を 5 つの項目に分けてご紹介しました。
最後に、全体の図を見てみましょう。
本記事は、従来型のモノリシックアーキテクチャと比較して、「サーバーレス」や「マイクロサービス」アーキテクチャが優れていると主張するものではありません。サーバーレスアーキテクチャであっても、ケースバイケースでメリットもデメリットも存在しています。より堅牢で、単一のシステムで統合的に各種プロセスを管理することが望ましいアプリケーションの場合は、従来型のモノリシックアーキテクチャが向いているケースも十分に考えられます。
AWS では、各アプリケーションの特性に合わせて最も効果的なアーキテクチャを設計・構築いただけるよう、サーバーレスを含む多様なサービスを提供しています。
なお、サーバーレスの便利な点や勉強方法については、過去の builders.flash 記事「サーバーレスって何が便利なの ?」や「サーバーレスの勉強方法について聞いてみた」にも掲載されておりますので、ぜひご一読ください。
また、AWS Lambda のサービスの詳細に関しましては、こちら をご覧ください。

筆者 / 監修者プロフィール
米倉 裕基

下川 賢介 (@_kensh)

福井 厚

Did you find what you were looking for today?
Let us know so we can improve the quality of the content on our pages