AWS Lambda 対 Amazon EC2:どちらを選ぶべきか?

Amazonは、数十種類に及ぶ多様なクラウドサービスを提供する業界のリーダー的存在です。Amazon EC2はAmazonのサービスの中でも最も人気のあるもののひとつであり、2006年に発表されたAmazonのクラウドコンピューティングプラットフォームの中核をなしています。現在、Amazon EC2は広く利用されていますが、Lambda(2014年に導入)と呼ばれる別のAmazonサービスの人気も高まっています。 本日のブログ記事では、AWS LambdaとEC2のプラットフォームを比較し、お客様の環境に適した選択ができるようお手伝いします。

NAKIVO for AWS EC2 バックアップ

NAKIVO for AWS EC2 バックアップ

Amazon EC2インスタンスのEC2、AWS S3、およびオンプレミスへのバックアップ。ランサムウェア対策オプション。インスタンスおよびアプリケーションオブジェクトの迅速な復旧。

AWS EC2とは?

AWS EC2(Amazon Web Services Elastic Compute Cloud)は、クラウド上で"EC2インスタンス"と呼ばれる仮想マシンを利用し、スケーラビリティを実現するサービスです。ディスク容量、CPU性能、メモリなどを、必要に応じていつでも変更できます。LinuxやWindowsなど、必要なオペレーティングシステム(OS)がプリインストールされたベースイメージを選択し、ほとんどのOS設定の構成やカスタムアプリケーションのインストールを行うことができます。 Amazon EC2インスタンスにはルートアクセス権があり、追加のユーザーを作成することも可能です。必要なすべての管理を行い、インスタンスの再起動やシャットダウンを含め、EC2インスタンスを完全に制御できます。AWS EC2ウェブサービスのカテゴリーは、Infrastructure as a Service(IaaS)として知られています。AWS EC2はクラウドホスティングに利用でき、クラウド上でサーバーを仮想マシン(インスタンス)としてデプロイすることができます。

AWS Lambdaとは?

AWS Lambdaは、Java、JavaScript、Pythonといったサポートされているプログラミング言語のいずれかで記述されたコードを、イベントに紐付けられたトリガーが発火した際に実行できるコンピューティングプラットフォームです。作成したアプリケーションを実行するために、仮想サーバーや環境を設定する必要はありません。プログラムコード( Lambda関数 (この場合)AWS Lambda インターフェースで、Lambda 関数をイベントに関連付け、サーバーの管理や環境設定を気にすることなく、必要なときにクラウド上でアプリケーションを実行できます。これにより、サーバーの管理ではなくアプリケーションの開発に集中できます。これが、AWS Lambda が サーバーレス。

アプリケーションが実行されるきっかけとなるイベントには、Amazon S3バケットへのファイルのアップロード、DynamoDBテーブルへの変更、API GatewayサービスへのHTTPリクエストの受信などがあります。イベント発生時に関数が実行されるように設定すると、新しいイベントが発生するたびにアプリケーションが自動的に実行されます。

分類に関して言えば、LambdaはAmazonによるFunction as a Service(FaaS)の実装です。以下の表では、物理サーバーの使用から始まる各サービスタイプの管理レベルを確認し、比較することができます。最も低いレベル(ユーザーによる管理が必要)は緑色で、より高いレベル(プロバイダーによる管理が提供される)は青色で示されています。したがって、物理サーバーを使用する場合、ハードウェアおよびそれより上のすべてのレベルを管理することができます。 AWS EC2などのInfrastructure as a Service(IaaS)を使用する場合、提供された仮想マシン(EC2インスタンス)上のオペレーティングシステムを管理できます。Platform as a Service(PaaS)レベルでは、実行前にコンパイルが必要なアプリケーションを実行できます。 AWS LambdaなどのFunction as a Service(FaaS)を利用する場合、アプリケーションをコンパイルする必要はなく、MSP(マネージドサービスプロバイダー)が提供するインターフェースにコードを記述するだけで済みます。表で比較対象として挙げられているSaaS(Software as a Service)では、シンクライアントやWebブラウザを使用して、クラウド上の既製アプリケーション(ベンダーが作成したアプリケーション)を利用するのみとなります。

AWS Lambda vs EC2 - comparing the management level for cloud services

AWS EC2 対 Lambda:活用事例

AWS EC2は、このサービスを利用する際にほぼすべての設定が可能であるため、幅広いユースケースがあります。AWS EC2の最も一般的なユースケースは以下の通りです:

  • ウェブサイトのホスティング
  • アプリケーションや複雑な環境の開発およびテスト
  • ハイパフォーマンス・コンピューティング
  • 災害復旧

AWS Lambdaの一般的な利用例:

  • タスクの自動化
  • Amazon S3にアップロードされたオブジェクトの処理
  • リアルタイムログ分析
  • データのリアルタイムフィルタリングと変換

具体的な例を考えてみましょう。あなたのウェブサイトが、画像、動画、音声ファイルなどのコンテンツを保存するためにAmazon S3バケットを使用しているとします。新しい画像や動画ファイルがアップロードされた際、ウェブページ用にプレビュー画像を作成し、それを元のサイズの画像や動画ファイルへのリンクとして使用する必要があります。プレビュー画像を手作業で作成するのは、単調で時間のかかる作業になりがちです。 このような場合、アップロードされた画像に基づいて自動的に画像のサイズ変更を行い、その画像の名前を変更し、結果の画像を適切なディレクトリに保存するLambda関数を作成できます。このLambda関数は、Webサイトで使用しているAmazon S3バケットに元の画像ファイルがアップロードされた直後に実行されるように設定できます。

AWS EC2 対 Lambda:動作原理

EC2ご存知の通り、AWS EC2を利用する際は、EC2インスタンスと呼ばれる仮想マシン(VM)を操作します。EC2インスタンスには、仮想ハードウェア(仮想ディスク、ネットワークインターフェース、プロセッサ、メモリ)を追加できるほか、VMインスタンスの起動、停止、再起動を行うことができます。EC2インスタンスでは、Elastic Block Storage(EBS)とS3バケットの2種類のストレージを利用できます。 OSがインストール済みの事前構成済みイメージを使用したり、独自のAmazon Machine Image(AMI)を作成したりできます。EC2クラウドサービスは、自動スケーリングとロードバランシングを提供します。EC2インスタンスは、S3、ECS、Route53、CloudWatchなど、他のほとんどのAmazon Web Servicesと連携して動作します。.

ラムダAWS Lambdaを使用する場合、アプリケーション(Lambda関数)は、ユーザーにとってシームレスなコンテナ内で実行されます。このコンテナにはコードとライブラリが含まれています。リソースはアプリケーションのニーズに応じてAmazonによって提供され、スケーリングは自動的かつシームレスに行われます。アプリケーションを実行しているコンテナも、そのコンテナが実行されているEC2インスタンスも、ユーザーが制御することはできません(Amazon Lambdaユーザーには基盤となるインフラストラクチャへのアクセス権がないため、それらに関する情報は一切得られません)。 上記の表を参照してください。

AWS Lambdaは、アプリケーションを表すコードを実行するためにコンテナを使用するEC2 Container Service(ECS)のフレームワークと見なすことができます。各コンテナのライフサイクルは短いです。実行中のLambda関数はその状態を保存しません。結果を保存したい場合は、Amazon S3バケットなどのデータストレージに保存する必要があります。 Lambda関数に対して、例えばAmazon RDS(Amazon Relational Database Service)への接続などを行うために、仮想ネットワークを設定することが可能です。Lambdaは、レイヤー、関数環境、ハンドラーという複数の部分で構成されています。トリガーはLambdaを起動する要素です。Lambdaは、トリガーからのクエリによって実行される単一の関数です。

利用可能なトリガーの完全なリスト:

  • APIゲートウェイ
  • AWS IoT
  • Alexaスキルキット
  • Alexaスマートホーム
  • アプリケーション・ロードバランサー
  • CloudFront
  • CloudWatch Events
  • CloudWatch Logs
  • CodeCommit
  • Cognito Sync トリガー
  • DynamoDB
  • キネシス
  • S3
  • SNS
  • SQS

API Gatewayは、開発者がAWS以外のさまざまなアプリケーションをAWSアプリケーションやその他のリソースに接続できるようにする特別なサービスです。

AWS EC2 対 Lambda:バージョン/スナップショット

EC2. 複雑なシステム スナップショット AWS EC2インスタンスのEBS(Elastic Block Storage)ボリュームで利用可能です。増分スナップショットを作成したり、 必要な状態に戻す EC2インスタンスの。マルチボリュームスナップショットは、複数のEBSボリュームを使用するデータベースなど、重要なワークロードに利用できます。

ラムダ. Lambda 関数の管理を容易にするため、便利なバージョン管理システムがサポートされています。アップロードしたコードの各コピーにバージョン番号を割り当て、そのバージョンに対応するエイリアスを追加することができます。バージョン番号は 1 から始まり、順次増加します。例えば、Lambda 関数をアルファ版、ベータ版、本番環境版などに分類することができます。Amazon Resource Name(ARN)は、公開時に各 Lambda 関数のバージョンに割り当てられ、後から変更することはできません。

AWS EC2 対 Lambda:セキュリティ

EC2. EC2インスタンスおよびインスタンス内のすべてのコンポーネントを適切に管理する必要があります。EC2インスタンスのファイアウォールは手動で設定可能です。Amazonは、クラウド上のEC2インスタンスのトラフィックを制御し、セキュリティを確保するためのVPC(Virtual Private Cloud)ファイアウォールを提供しています。 EC2インスタンス向けに、ウイルス対策ソフトウェアの手動でのセットアップや設定、IAMロールの作成、権限の指定、セキュリティグループの作成などを行うことができます。AWS Systems Manager Patch Managerを使用すると、OSの更新やセキュリティパッチを自動的にインストールできます。パッチや更新のインストール前にスナップショットを作成するようにAWSを設定し、問題の発生を防ぐことも可能です。必要に応じて、EC2インスタンスにアクセスするためのキーペアを作成してください。AWS Lambdaを使用する場合と比較して、AWS EC2を使用する際はセキュリティにより一層注意を払う必要があります。

ラムダ. Lambdaには、デフォルトでアクセス可能なAWSサービスに対する権限があります。IAMロールは、Lambda関数で利用可能にする必要があるサービスを定義するために使用されます。 各Lambda関数について、その関数が実行される際に代弁するIAMロールを設定する必要があります。つまり、IAMロールを設定することで、キーやその他の認証パラメータを使用せずに、定義されたAmazonサービスにLambda関数を接続できるようになります。

KMSキーを使用して、Lambda関数とS3の間、およびAPIゲートウェイとLambdaの間で暗号化を設定することが可能です。 Lambda関数を作成すると、デフォルトの暗号化キーが作成されます。ただし、独自のKMSキーを作成することを推奨します。

EC2インスタンスと比較して、Lambda関数にはセキュリティ更新プログラムやパッチの適用が不要です。基盤となるコンテナやオペレーティングシステムはAmazonによって自動的に更新されます。これが、セキュリティの観点からLambda関数を使用する利点です。

AWS EC2 対 Lambda:パフォーマンスと可用性

EC2EC2インスタンスの電源を入れた後、手動で停止するか、シャットダウンタスクをスケジュールするまで、そのインスタンスは稼働し続けます。EC2インスタンスが稼働している間、そのインスタンス上ではアプリケーションがほぼ瞬時に実行されます。EC2インスタンスのパフォーマンスが許す限り、任意の数のアプリケーションを同時に実行することができます。アプリケーションを1日中定期的に実行する必要がある場合、EC2インスタンス上でアプリケーションを実行することは有効な解決策となります。

ラムダ. Lambda関数は常に利用可能ですが、常時実行されているわけではありません。デフォルトでは、Lambda関数は非アクティブ状態です。イベントに紐付けられたトリガーが作動すると、アプリケーション(Lambda関数)が起動します。Lambda関数の実行可能時間(タイムアウト)は、最大900秒(15分)に制限されています。 したがって、AWS Lambdaで長時間実行されるアプリケーションを実行することは推奨されません。正常に完了するまでに900秒以上かかるアプリケーションや、実行時間が変動するアプリケーションを実行する必要がある場合は、AWS EC2の使用を検討してください。実行中のLambda関数に対するもう1つの制限は、最大メモリ量が3008 MBであることです。

リージョンによっては、1000~3000個のLambdaインスタンスを同時に実行できます。 より多くのインスタンスを同時に実行したい場合は、AWSサポートにお問い合わせください。

AWS Lambdaでは、リクエストの送信からアプリケーションの実行までの遅延が最大100ミリ秒発生しますが、EC2インスタンス上で実行されるアプリケーションにはこのような遅延はありません。100ミリ秒は長い時間ではありませんが、アプリケーションの種類によっては、この時間が致命的になる場合があります。 アプリケーションが Amazon S3 バケットからデータをダウンロードする必要がある場合、アプリケーションの実行までにさらに 1~3 秒かかる可能性があります。AWS Lambda を使用してアプリケーションを実行する計画を立てる際は、この遅延時間を念頭に置いてください。

コールドスタートアップ時間は、Lambda 関数の欠点です。 コールドスタートアップとは、関数が長期間実行されなかった場合に発生する遅延のことで、Amazon Cloud上でコンテナを起動し、関数を実行するために時間がかかります。ワークロードにばらつきがあり、1日のうち異なる時間帯にアプリケーションを実行する必要があり、かつアプリケーションの実行間に長い休止期間がある場合、AWS Lambdaを使用してアプリケーションを実行することは有効な解決策となり得ます。

AWS Lambda 対 EC2:料金体系

EC2とLambdaの両クラウドサービスは、従量課金制を採用しています。しかし、その詳細と違いについて見ていきましょう。

EC2. AWS EC2インスタンスが稼働している間は、関数やアプリケーションが実行されているかどうかにかかわらず、その時間分の料金が発生します。1時間あたりの料金は、EC2インスタンスが使用するCPU性能、メモリ容量、グラフィックカードの性能、およびストレージ容量によって決まります。定期的なリクエストの数が多く、関数やアプリケーションを常に利用可能な状態にしておく必要がある場合、AWS EC2インスタンスを利用することが経済的に合理的である可能性があります。

ラムダ. 料金は、アプリケーションの実行回数と実行完了までに要した時間に基づいて課金されます。アプリケーションの実行1秒あたりの料金は、アプリケーションに割り当てられたメモリ量に応じて決まり、1ギガバイト秒あたり0.00001667ドルです。アプリケーションの実行時間は、アプリケーションの開始から結果が返されるまで、またはタイムアウト後に停止するまでの時間としてカウントされます。 時間は100ミリ秒の倍数に切り上げられます。オンデマンドでの可用性が必要な場合は、AWS Lambdaを使用して関数やアプリケーションを実行する方が費用対効果が高い場合があります。

結論

AWS EC2は、従来のクラウドインフラストラクチャ(IaaS)を代表するサービスであり、EC2インスタンスを仮想マシンとして実行したり、環境を設定したり、カスタムアプリケーションを実行したりすることができます。

AWS Lambdaは、Amazonが提供するFunction as a Service(FaaS)であり、基盤となるインフラストラクチャを気にすることなくアプリケーションを実行できます。AWS Lambdaはサーバーレスアーキテクチャを提供し、イベントトリガーが作動した後にクラウド上でコードを実行することを可能にします。 AWS Lambda を使用すると、バージョン管理機能を備えた、スケーラブルで軽量かつ低コストな関数を利用できます。インフラストラクチャの設定ではなく、コードの記述に集中できます。

常に稼働している EC2 インスタンス上でアプリケーションのアイドル時間が長いと計算された場合は、AWS Lambda の使用を検討してください。AWS Lambda では、アプリケーションを実行するリクエストがない場合、アイドル時間の料金は発生しません。 アプリケーションの実行に対する定期的なリクエスト数が多い場合は、常時稼働しているEC2インスタンスにアプリケーションをデプロイする方が適している可能性があります。

AWS EC2は、高性能なアプリケーション、長時間実行されるアプリケーション、および起動時に遅延があってはならないアプリケーションの実行に適しています。AWS EC2インスタンスを使用する場合は、データ損失を防ぐためにバックアップを忘れないようにしてください。 NAKIVO Backup & Replication VMware vSphere VM、Hyper-V VM、および物理サーバーに加え、EC2インスタンスも保護できるオールインワンのデータ保護ソリューションです。

試してみてください NAKIVO Backup & Replication

試してみてください NAKIVO Backup & Replication

無料トライアルをご利用いただき、本ソリューションのデータ保護機能をすべてお試しください。15日間無料です。機能や容量の制限は一切ありません。クレジットカードも不要です。

People also read