【AWS初心者向け】AWS Lambda とは【サーバレスの業務導入を目指す】

AWS基礎
AWS初心者
AWS初心者
Lambdaってどのようなメリット、デメリットがあるんだろう。利用用途や学習方法を知りたいな。

このような疑問にこたえます。

  • Lambda とは
  • Lambda の利点
  • ユースケース紹介
  • Lambda の学習方法

本記事を読むことでLambdaの業務導入を検討できるレベルを目指せる記事になっています。
知識定着のため、インプット、アウトプットのバランスを考えてまとめています。

記事の信頼性
筆者はAWS経験5年程度です。AWS資格は5冠達成しました。
現在は大規模ECサイトのAWS運用を任されるようになっています。

【AWS初心者向け】AWS Lambda とは【サーバレスの業務導入を目指す】

Lambda とは

lamdaはビジネスの価値を生み出すビジネスロジックに集中するためのサービスです。
環境構築や管理が不要でいきなりコードがかけます。
このようなサービスをFaaS(=サーバレス)といいます。サーバレスの普及を進めようという流れがあるのでこれを理解しておくことは重要です。

AWSのコンピュートサービスの種類


【AWS Black Belt Online Seminar】 AWS Lambda Part1より抜粋

コンピュートサービスは大きく分けてインスタンス、コンテナ、サーバレスの3種類があります。
AWSは基本的にはサーバレスを推奨していますが、それぞれのメリット・デメリットを見極めてリソースを選択します。

※EC2についてはこちらにまとめています
【AWS初心者向け】 EC2 運用担当者が知っておくべきこと

Lambda の普及率

下記の記事によると2025年までにグローバル企業の50%がFaas導入するといわれ、今後必須スキルとなってきそう。
(2020年では普及率は20%程度といわれる)

CIOのためのサーバレスコンピューティングガイド

Lambda の利点

ここではLambdaのメリットをお伝えします。AWS Lambda公式ページに沿って解説します。

AWS Lambda公式ページ

サーバ管理が不要

サーバの管理業務が不要になります。サーバ管理業務には主に構築(OSやミドルウェアの設計、インストール、設定)や運用(監視、障害対応)などがあります。
できるならやりたくない、面倒な作業のことですね。

継続的スケーリング

日本全国で利用されている大手サイトを運用していますが、ピーク時でも秒間500リクエスト以下くらいです。(秒間20~30PV程度)
数十万リクエストに対応できれば、大体のサイトはボトルネックとなることなく運用できるのではないかと思います。
※デフォルトでは同時実行数はアカウント全体で1000が最大。AWSに申請することで数十万まで引き上げが可能。

ミリ秒計測でコストの最適化

実行回数、実行時間課金となるため、余剰なリソース料金を払う必要がありません。
Savings Plansは電車の定期みたいなもので、月額で定額支払うことでコストメリットを出せます。契約期間は1年か3年。

あらゆる規模で一貫したパフォーマンス

コードごとにどれだけのメモリを利用するか選択できる。メモリ量2倍にして実行時間半分以下になればコストメリットがでる。
最適なメモリ量を確認した方がよい。

Lambda ユースケース紹介

AWS Lambdaの公式ページに紹介されている利用用途からピックアップして紹介します。
AWS Lambda公式ページ

データ処理

一番多いパターンと思われるデータ処理の利用用途を紹介します。

リアルタイムファイル処理


S3にファイルがアップされたことをトリガーにLambdaを起動することができる。
サムネ作成がよく聞く処理。

リアルタイムストリーム処理


Kinesisでデータ収集しLambdaで成形、分析基盤に格納という流れ

Kinesisはキューの機能を持つ(SQSの強力版。大量データの場合はKinesisを採用)
キューについては下記が理解しやすい
参考:基本情報技術者平成26年春期 午前問7 キューとスタック
キューを挟むことでバックエンドのサービスと疎結合化される

バックエンド

バックエンドでのLambdaの利用パターンを紹介します。

バックエンド:直接ユーザの目に触れない部分。データベースへの保存や検索結果の出力。対義語はフロントエンド(目に見える部分、デザイン)
フロントエンドの開発で利用する言語は主に、HTMLやCSS、JavaScript。
バックエンドの開発で利用する言語には、JavaやJavaScript、PHP、Python、Rubyがある。

ウェブアプリケーション

S3にJavaScriptを置いて、API Gatewayを通して裏側(バックエンド)でLambdaを利用する。

例:S3にJavaScriptを置いて、裏側(バックエンド)でLambda(Node.js)を利用といった構成。

↑は AWS SDK for JavaScript より引用

Webアプリ:ブラウザ上で利用できるアプリ。手軽さが特徴。逆に手元の端末にインストールするアプリをネイティブアプリという
API Gateway で利用されるREST通信とはURI(≒URL)にHTTPメソッドでアクセスすることでデータの送受信を可能とする設計モデルのことです。
詳細は下記のサイトが分かりやすかったです。
REST入門 基礎知識

モバイルバックエンド

iOSやAndroidネイティブアプリからの利用。

AWS Amplify:スケーラブルなモバイルおよびウェブのアプリケーションを最速で構築するための便利ツール
React Native:ワンソースで複数のプラットフォーム(iOS、Android、UWP、Web)に対応したアプリケーションを開発することができるオープンソースのアプリケーションフレームワーク。Facebook 社が開発している。Web フロントエンドのフレームワークである React をベースに開発。Javascript、JSX、CSS を使って開発する。

Lambda の学習方法

AWS ハンズオン資料

AWS Hands-on for Beginners Serverless #1(サーバーレスアーキテクチャで翻訳 Web API を構築する)がおすすめです。1~2時間程度で完了できると思います。

サーバーレスアーキテクチャで翻訳 Web API を構築する
下記のようなアプリケーションが簡単に作れることが分かります。

Lambda を導入する方向け【運用時の注意事項】

運用していて気を付けた方が良いと思ったことを書いておきます。

コールドスタート

Lambdaにはコールドスタートという特性があり、初回アクセスが異常に遅いなど性能への影響が大きいです。Webアプリのバックエンドで使う場合などは注意が必要です。(この特性が原因でLambda化を見送ったサービスがあると聞いたことがあります)

しかしこれはお金で解決できるようになったようです。
※コールドスタートの懸念は2019年に解決
[速報]コールドスタート対策のLambda定期実行とサヨナラ!! LambdaにProvisioned Concurrencyの設定が追加されました

非同期呼び出しのエラーハンドリング

LambdaのDLQという機能を使うと呼び出し元に成功応答しか返さない非同期呼び出しの場合でも、関数実行の失敗をSQSやSNSに送信してエラー監視できます。

DLQの機能については下記が参考になりました。
Lambdaで利用できるDead Letter Queue(DLQ)とはどんな機能であるか調べてみた

※非同期呼び出しと同期呼び出しとは

blackbeltがわかりやすい

元AWSJapanの西谷さんの動画が分かりやすいので、見ておきましょう。
※合計4時間くらいあります。
【AWS Black Belt Online Seminar】 AWS Lambda Part1
【AWS Black Belt Online Seminar】 AWS Lambda Part2
【AWS Black Belt Online Seminar】 AWS Lambda Part3
【AWS Black Belt Online Seminar】AWS Lambda Part4

さいごに

性能、セキュリティ、運用、コストなど実際に導入してみないと分からないことが多いと思います。
まずは影響の少ないところから少しずつ導入してみるのが良いのではないでしょうか。
本記事を参考にサーバレス導入をしようと思えていただけたら幸いです。

コメント

タイトルとURLをコピーしました