AWS LambdaとDynamoDBについて

はじめに

AWSとは、Amazon Web Servicesの略称で、Amazonの子会社が提供するクラウドコンピューティングサービスです。AWSは多様なサービスが提供されており、サービス同士を組み合わせて利用することができます。またAWSはAmazonが提供するWEBサービスの総称としても使われています。

現在クラウドコンピューティングサービスは世の中に浸透してきており、様々なものがあります。この記事ではクラウドコンピューティングサービスの中でも高いシェア率を誇り、サーバレス開発でよく利用され、また互いの親和性が高いサービス、AWSのLambdaとDynamoDBについて基本的な特徴や使用するメリットとデメリットを紹介していきます。

AWS Lambdaとは

AWSで展開されている現行システムのほとんどは、開発したプログラムを動かすために、仮想サーバーとしてEC2インスタンスを利用しています。EC2インスタンスとは、Amazonが提供している仮想サーバー構築サービスのOSを載せた仮想サーバーのことです。仮想サーバーを構築するには、AMIの選択からセキュリティグループの選択、SSH接続設定などをする必要があり多少の手間がかかります。

仮想サーバーという違いこそあれ、構成そのものはオンプレミスで使用する時と大きく変わっていません。この構成を大きく変えるのが、AWS Lambdaです。Lambdaはサーバーを必要としないプログラムの実行環境です。開発者が処理したい内容を小さな関数として実装すると、必要に応じてそれが実行される仕組みです。サーバーを必要としないということは、運用の手間やコストを削減できるということです。これにより開発に使う時間を増加させることができます。この利点は非常に大きい為、新規の開発案件では、Lambdaが採用されるケースが増えてきました。

AWS Lambdaを利用する上でのメリット

Aws Lambdaを利用する上でのメリットを紹介します。

①プログラムのリクエスト数と実行してからコードが返ってくるまでの時間に対する従量課金制サービスなので、待機時間に料金は発生しません。サービス利用量が少なければ料金はそれほどかかりません。また月々100万リクエストまでは、無料利用枠があります。その為、料金は100万リクエストを超えてから発生します。

②サーバーの管理が行う必要がなく、プログラミング言語でコードを記述するだけでいいので、作業の大幅な削減をすることができます。セキュリティの設定やハードウェアのメンテナンスなどもする必要がないので、仮想サーバーよりも手間暇がかかりません。

③オートスケーリング(自動スケーリング)により負荷に応じた運用を自動でしてくれます。これにより、無駄な費用が発生する心配とサーバーダウンの心配が解消されます。

④ネットワーク上にサーバーが公開されておらず、プラットフォームの仕様も非公開の為、脆弱性を利用した攻撃を受けづらくなっています。これにより高いセキュリティを保っています。

AWS Lambdaを利用する上でのデメリット

AWS Lambdaを利用する上でのデメリットを紹介します。

①AWS Lambdaを利用するにはAWSの他のサービスと組み合わせて利用する必要があります。またAWS Lambda以外のAWSのサービスについても理解しておく必要があります。

②従量課金制サービスなので、正確な料金を計算することはできません。また、AWS lambdaは他のサービスと組み合わせて利用するので、利用料金は他のAWSサービスとの合算の料金となります。

③使用するプログラミング言語によって、処理時間にばらつきが発生することがあります。作業を速く進めたい場合には、使用する言語を検討したほうが良いかもしれません。

DynamoDBの特徴・メリット・デメリット

■ DynamoDBの特徴

まずDynamoDBとは、AWSのサービスの一つとしてAmazonが提供しているNoSQLデータベースサービスです。NoSQLはNot Only SQLの略だと言われており、NoSQLというデータベースがある訳ではなく、リレーショナルデータベース管理システム以外のデータベース管理システムを総称してNoSQLと呼びます。

次に大きな特徴としてDynamoDBは、キーバリューストア型のNoSQLデータベースということです。そのため一般的なSQLデータベースと扱い方が異なります。特に大きく違うのは、事前にテーブルに対してスキーマを定義しなくて良いという点です。一般にSQLデータベースは、テーブルに対してプライマリーキーという、SQLデータベースにおける主キーに相当する名前とデータ型を定めるだけで良く、残りの列は、格納時に好きなものを格納できます。読み込み書き込みが速く、データの操作がAPI経由となるので、SQLとはデータの扱い方が異なります。また、利用中でもキャパシティユニット(読み込み/書き込み容量)を変更することができます。

従来のデータベースは、データ量が増加すると性能が劣化する傾向があります。DynamoDBは、データ量が増えても性能が劣化することはありません。

DynamoDBは、レコードごとにカラムの数や種類が変わっても構わないので、表構造として考えると設定されていない値があり、表が歯抜けのような状態になります。このような特性は、表構造で考えるのではなく、プライマリーキーに対して任意のデータを結びつける構造を取っていると考えるべきでしょう。このような表構造をとるわけではないため、DynamoDBでは、「列」やレコードという用語は使わず、それぞれ、属性(アトリビュート)や項目(アイテム)と呼びます。

■ DynamoDBのメリット

DynamoDBのメリットは以下の点が挙げられます。

①完全マネージド型のサービス
完全なマネージドサービスとして提供されており、ソフトウェアのアップデートやパッチ適用などの運用保守の手間がありません。テーブルを作成するだけで、すぐに使い始められます。

②非VPC接続環境での利用
利用するのにVPC環境(仮想ネットワークのこと。この中にEC2を起動する。)を必要としません。Lambda関数はデフォルトとして非VPC環境で動く為、Lambdaとは親和性の高いデータベースです。

③データベースサイズの自動拡張性
事前にデータベースのサイズを決める必要はありません。保存するデータ量が多くなれば、自動的にサイズが拡張されます。

④負荷に応じたオートスケーリング
DynamoDBの性能は「1秒間に、読み書きや書き込みのリクエストをどれだけ処理できるか」の設定で決まります。処理能力を高く設定するほど、コストがかかりますが、DynamoDBはオートスケーリングに対応しています。あらかじめ指定した範囲で、リクエスト量の増減によって自動的に容量を拡大・縮小します。負荷に応じて処理できる秒間リクエスト数を変更すれば、コストも相応になります。

⑤高い信頼性
DynamoDBは、複数のアベイラビリティゾーンで運用されています。そのため、一部のアベイラビリティゾーンに障害が生じても処理し続けることができ、高い信頼性を誇ります。

⑥他のAWSサービスとの連携をすることができます。Amazon Redshiftを利用すれば、蓄積したデータの分析などもすることができます。

■ DynamoDBのデメリット

DynamoDBのデメリットは以下のようなものが挙げられます。

①空文字の利用ができない。テーブル結合した検索はできないなど検索に制約があります。どうしてもテーブル結合した検索をしなければならない場合は、アプリ側で対策するか他のDBの利用を考えましょう。

②キャパシティユニットを大幅に増加させるとパーティション分割が発生します。この後にキャパシティを下げるとパーティション数は減らないのでパフォーマンスが極端に低下する恐れがあります。

まとめ

  • AWS Lambdaとは、サーバーを必要としないプログラムの実行環境で、開発者が処理したい内容を小さな関数として実装すると必要に応じて、それが実行される仕組み
  • AWS Lambdaのメリット①従量課金制サービスにより料金を抑えることが可能、②サーバーの管理が不要で手間暇がかからない、③オートスケーリングによる負荷に応じた自動運用、④高いセキュリティ
  • AWS Lambdaのデメリット①AWS Lambdaの利用には他のAWSサービスを利用する必要がある、②利用するまで正確な料金がわからない、③利用言語によって処理時間が異なる
  • DynamoDBの特徴は、キーバリューストア型のNoSQLデータベースということ
  • DynamoDBのメリットは、①完全マネージド型のサービスである点、②非VPC接続環境で利用できる点③データベースサイズの自動拡張性がある点④負荷に応じたオートスケーリングが可能な点⑤高い信頼性がある点⑥他のAWSサービスとの連携
  • DynamoDBのデメリットは、①検索に制限がある、②キャパシティユニットの変更に伴うパフォーマンスの低下の可能性

AWSのLambdaとDynamoDBについて理解を深めることはできたでしょうか。クラウドコンピューティングサービスにも様々な種類があり、目的に応じて利用しやすいサービスも異なってきます。自分に合ったサービスを有効活用できるように今後も学んでいきましょう。

最後までご覧いただき、ありがとうございます。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です