LambdaとDynamoDBでシンプルなサーバーレス処理構築

インターネットへの常時接続が当たり前となり、インターネットを介して提供されるクラウドサービスの利用も一般的に普及してきています。令和元年度通信動向調査では国内企業の60%以上がクラウドサービスを利用しているという結果が出ています。そんなクラウドサービスの中でも世界一のシェアを持つのがAWS(Amazon Web Services)です。

今回はAWSの中でもLambdaとDynamoDBというサービスを利用して、サーバーレスと呼ばれるインフラを持たずに実行できる処理の実現を紹介します。※注1

この記事を読むと以下3つのことがわかります。

  • AWS Lambda、Amazon DynamoDBの概要
  • サーバーレス処理の概要とメリット
  • LambdaとDynamoDBで構築するサーバーレス処理の2パターン

AWS Lambda、Amazon DynamoDBとは

技術市場の調査企業のCanalysの発表したデータでは、2020年3QにおいてAWSはクラウドサービスにおいて32%と世界トップのシェアを持っています。そのAWSのサービスの中でも人気のあるAWS Lambda、Amazon DynamoDBの2つについてご紹介します。※注2

AWS Lambda

AWS Lambdaはサーバーの管理を全く行わずに、ソースコードの実行が行えるサービスです。クラウド上にソースコードをアップロードしておくだけで、他のAWSのサービスをトリガーとしたり、Webやモバイルアプリケーションからも処理を起動することができます。※注3

AWS Lambdaの特徴として、AWSは下記を挙げています。
・サーバーの管理が不要
・処理の実行のためのリソースを自動的にスケーリング
・課金は実行に必要となった時間に応じて
・適切なメモリサイズを選択することで安定したパフォーマンスを実現

AWS Lambdaを利用するメリットとしては、下記の点があります。
・環境構築不要で利用可能
・使用した回数、時間に応じた従量課金制。無料利用枠があるため、一定量までは無料で使用可能
・処理の分散を実現可能。サーバーの負荷回避
・高いセキュリティ
・多くのプログラミング言語が利用可能(Java、Python、Ruby、C#など)

Amazon DynamoDB

Amazon DynamoDBはAWSに設置されたNoSQLデータベースサービスです。DynamoDBはkey-valueおよびドキュメントを格納することができます。通常は、key-value型で「キー」と「値」を関係づけて格納する形式です。小規模なデータベースの構築から、1日に10兆件、毎秒2000万件を超えるリクエストまでもサポートしています。フルマネージドでメモリなどの管理も行い、素早いレスポンスを実現しています。※注4

Amazon DynamoDBの特徴として、AWSは下記を挙げています。
・スケールに応じてパフォーマンスの調整が可能
・サーバー管理不要で利用できる
・ビジネスクリティカルなシステム構築に向けたエンタープライズ対応

AWSではAmazon DynamoDBのユースケースとして、下記の用途でデータ格納に利用するケースを挙げています。
・Ad Tech
・ゲーム
・小売業
・銀行と金融
・メディアとエンターテインメント
・ソフトウェアとインターネット

サーバーレスとは

プログラムを作製した場合、そのプログラムを実行して利用します。プログラムの実行のための環境が必要となるのですが、一般的にはPCやサーバが実行環境として利用されます。この実行環境の用意ですが、プログラムを動かすのに必要なメモリやCPU、ストレージといったリソースの確保、実行環境のサーバー、PCのメンテナンスなど手間がかかっていました。これらのプログラムの実行に伴って発生する手間を省くために考えられたのがサーバーレスという方式です。サーバーレスを利用することにより、利用者は手元にPCやサーバー等のプログラムの実行環境を用意せずとも、クラウドサービス上でプログラムが実行可能となります。

※サーバーレスという名前ですが、クラウドサービス側にはサーバーが存在しています。利用者側はクラウドサービス側の環境は考慮する必要がないため、サーバーレスという名称になっています。

サーバーレスのメリット

サーバーレスのメリットはプログラムの実行環境に関する手間、悩みを排除できることです。クラウドサービスとして提供されたサーバーレスの環境を利用することで、永続的にプログラムの実行環境のメンテナンスを考慮する必要が無くなります。さらには、実行に必要なリソースが不足した場合にも簡単に追加することが可能です。

・サーバーを用意する必要がくなる
・サーバーのメンテナンス不要
・CPU、メモリ、ストレージの拡張などリソースの確保も随時可能

サーバーレスのデメリット

サーバーレスにも下記のようなデメリットが存在するため、利用の際には検討が必要です。

・各クラウドサービスを利用しているため、ベンダーロックインとなり他に置き換えづらい
・処理の監視が難しい、デバッグが出来ない

AWS Lambda、Amazon DynamoDBでサーバーレスの処理を構築

AWS LambdaとAmazon DynamoDBを利用することで、様々なサーバーレス処理を構築することが可能となります。このサーバーレス処理で業務の効率化、自動化、データの収集などを実現することが出来ます。
LambdaとDynamoDBを利用する場合、大きく2種類の処理の起点を考えることが出来ます。

・Lambdaで処理が起動されDynamoDBへの読み書きを行う処理
・DynamoDBの変更をトリガーとしてLambdaの処理を呼び出し

Lambdaで処理を実行して、DynamoDBへデータを格納

Lamabdaの処理により、DynamoDBへデータを格納する処理はあらゆるシーンで想定できるものです。例えばIoTデバイスからデータを収集する際、Lambda関数を経由してDynamoDBへの格納を行うようにしておけば、多種多数のデバイスからのアクセスを同様に扱えます。ゲームのバックエンド処理として、各操作ごとにLambdaを起動して情報を格納する仕組みを作ることでリソースの分散を行えます。Webアプリケーションのバックエンド処理の構築にも利用可能です。※注5

画像出典:”サーバーレスのウェブアプリケーションを構築” AWS https://aws.amazon.com/jp/getting-started/hands-on/build-serverless-web-app-lambda-apigateway-s3-dynamodb-cognito/module-3/

DynamoDBのデータ変更をトリガーにLambdaの処理を呼び出す

上記の機能とは反対に、DynamoDBを起点とした処理の構築も可能です。DynamoDBストリームとしてLambdaで作った関数と紐づけを行い、新たなレコードの出現を条件として処理を起動することができます。DynamoDBへのデータ登録を契機に、後続処理を行いたい場合に適した方法となります。※注6

画像出典:”チュートリアル: および DynamoDB ストリーム を使用した新しい項目の処理Lambda” AWS https://docs.aws.amazon.com/ja_jp/amazondynamodb/latest/developerguide/Streams.Lambda.html

まとめ

Amazonの提供するクラウドサービスAWSでは、サーバーレスな環境でプログラムを実行できるAWS Lambda、NoSQLのデータベースDyanamoDBなど様々なサービスが提供されています。

各種のAWSのサービスを組み合わせることにより、サーバーレスで処理、アプリケーションの構築を実現可能です。サーバーレスはサーバーなどのプログラム実行環境を用意せずともよく、環境のメンテナンスも不要、リソースも簡単に追加できるといったメリットがあるため、多くの企業で採用が進んでいます。




エンジニア募集中

株式会社キャパでは中途エンジニアの募集をしています。
私たちと一緒に働きませんか?
募集概要について詳しくは


◆参考URL
注1 総務省 令和元年通信利用動向調査
https://www.soumu.go.jp/johotsusintokei/statistics/data/200529_1.pdf

注2 canalys Global cloud infrastructure market Q3 2020
https://www.canalys.com/newsroom/worldwide-cloud-market-q320

注3 AWS AWS Lambda
https://aws.amazon.com/jp/lambda/

注4 AWS Amazon DynamoDB
https://aws.amazon.com/jp/dynamodb/

注5 AWS サーバーレスのウェブアプリケーションを構築
https://aws.amazon.com/jp/getting-started/hands-on/build-serverless-web-app-lambda-apigateway-s3-dynamodb-cognito/module-3/

注6 AWS DynamoDB ストリーム と AWS Lambda のトリガー
https://docs.aws.amazon.com/ja_jp/amazondynamodb/latest/developerguide/Streams.Lambda.html

関連記事一覧