AWS Lambda 対 Amazon EC2:どちらを選ぶべきか?
Amazonは、数十種類に上り、その数は増え続けている多様なクラウドサービスを提供する主要企業の一つです。Amazon EC2はAmazonのサービスの中でも最も人気のあるもののひとつであり、2006年に発表されたAmazonのクラウドコンピューティングプラットフォームの中核をなしています。現在、Amazon EC2は広く利用されていますが、Lambda(2014年に導入)と呼ばれる別のAmazonサービスの人気も高まっています。 本日のブログ記事では、AWS LambdaとEC2のプラットフォームを比較し、皆様の環境に適した選択ができるようお手伝いします。
< span data-sheets-value=”{” 1 “:2,” 2 “:”
“}” data-sheets-userformat=”{” 2 “:17089,” 3 “:{” 1 “:0},” 9 “:1,” 10 “:1,” 12 “:0,” 17 “:1}”>
</span>
AWS EC2とは?
AWS EC2(Amazon Web Services Elastic Compute Cloud)は、クラウド上で”EC2インスタンス”と呼ばれる仮想マシンを利用し、スケーラビリティを実現するサービスです。ディスク容量、CPU性能、メモリなどを、必要に応じていつでも変更できます。LinuxやWindowsなど、必要なオペレーティングシステム(OS)がプリインストールされたベースイメージを選択し、ほとんどのOS設定の構成やカスタムアプリケーションのインストールを行うことができます。 Amazon EC2インスタンスにはrootアクセス権があり、追加のユーザーを作成することも可能です。必要なすべての管理を行い、インスタンスの再起動やシャットダウンを含め、EC2インスタンスを完全に制御できます。AWS EC2ウェブサービスのカテゴリーは、”Infrastructure as a Service(IaaS:インフラストラクチャ・アズ・ア・サービス)”として知られています。 AWS EC2はクラウドホスティングに利用でき、クラウド上に仮想マシン(インスタンス)としてサーバーを展開できます。
AWS Lambdaとは?
AWS Lambdaは、イベントにリンクされたトリガーが発火した際に、サポートされているプログラミング言語(Java、JavaScript、Python)のいずれかで記述されたコードを実行できるコンピューティングプラットフォームです。作成したアプリケーションを実行するために、仮想サーバーや環境を設定する必要はありません。 AWS Lambdaのインターフェースにプログラムコード(この場合は” “のLambda関数” “)を挿入し、そのLambda関数をイベントに関連付けるだけで、サーバーの管理や環境設定を気にすることなく、必要なときにクラウド上でアプリケーションを実行できます。これにより、サーバー管理ではなくアプリケーションの開発に集中できます。これが、AWS Lambdaが” “と呼ばれる理由です。
アプリケーションが実行されるきっかけとなるイベントとしては、Amazon S3 バケットへのファイルのアップロード、DynamoDB テーブルへの変更、API Gateway サービスへの HTTP リクエストの受信などが挙げられます。イベント発生時に実行されるように関数を設定すると、新しいイベントが発生するたびにアプリケーションが自動的に実行されます。
分類に関しては、LambdaはAmazonによるFunction as a Service(FaaS)の実装です。以下の表では、物理サーバーの使用から始まる各サービスタイプの管理レベルを確認し、比較することができます。最も低いレベル(ユーザーによる管理が必要)は緑色で、より高いレベル(プロバイダーによる管理が提供される)は青色で示されています。したがって、物理サーバーを使用する場合、ハードウェアおよびそれより上のすべてのレベルを管理することができます。 AWS EC2 などのインフラストラクチャ・アズ・ア・サービス(IaaS)を利用する場合、提供された仮想マシン(EC2 インスタンス)上のオペレーティングシステムを管理することができます。 Platform as a Service(PaaS)レベルでは、実行前にコンパイルが必要なアプリケーションを実行できます。AWS LambdaなどのFunction as a Service(FaaS)を利用する場合、アプリケーションをコンパイルする必要はなく、MSP(マネージドサービスプロバイダー)が提供するインターフェースにコードを記述するだけで済みます。 表で比較対象として挙げられているSaaS(Software as a Service)では、シンクライアントやWebブラウザを使用して、クラウド上の既製のアプリケーション(ベンダーが作成したアプリケーション)のみを利用することができます。
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 種類のストレージを使用できます。 事前に設定されたイメージを使用して、オペレーティングシステムがインストールされているカスタマイズされた Amazon マシンイメージ (AMI) を作成することができます。EC2 クラウドサービスは自動スケーリングと負荷分散を提供します。EC2 インスタンスは、S3、ECS、Route53、Cloudwatch などのほとんどの他の Amazon ウェブサービスと連携して動作できます。
Lambda 。AWS Lambda を使用すると、アプリケーション (Lambda 関数) は、シームレスなコンテナで実行されます。コンテナにはコードとライブラリが含まれています。リソースは、アプリケーションの要件に応じて Amazon が提供し、スケーリングは自動かつシームレスです。アプリケーションを実行しているコンテナや、コンテナが実行されている EC2 インスタンスを制御することはできません(基盤インフラは Amazon Lambda ユーザーに許可されていないため、それらについて何も知ることはありません)。上記の表を参照してください。
AWS Lambda は、コンテナを使用してアプリケーションを表す一部のコードを実行する EC2 コンテナサービス (ECS) のフレームワークとみなすことができます。各コンテナのライフサイクルは短いです。実行中の Lambda 関数は状態を保存しません。結果を保存したい場合は、Amazon S3 バケットなどのデータストレージに保管する必要があります。Lambda 関数に仮想ネットワークを構成することも可能です。たとえば、Amazon RDS (Amazon リレーショナルデータベースサービス) に接続するために使用します。Lambda は複数の部分で構成されており、レイヤー、関数環境、およびハンドラで構成されています。トリガーは Lambda のアクティブ化要素です。Lambda はトリガーからのクエリによって実行される 1 つの関数です。
利用可能なトリガーの完全な一覧:
- API ゲートウェイ
- AWS IoT
- Alexa Skills Kit
- Alexa Smart Home
- アプリケーションロードバランサ
- CloudFront
- CloudWatch Events
- CloudWatch Logs
- CodeCommit
- Cognito Sync Trigger
- DynamoDB
- Kinesis
- S3
- SNS
- SQS
API ゲートウェイは、開発者が多様な非 AWS アプリケーションを AWS アプリケーションやその他のリソースに接続するための特殊なサービスです。
AWS EC2 vs Lambda: バージョン / スナップショット
EC2 。EBS (Elastic Block Storage) ボリュームの複雑なスナップショットシステムが AWS EC2 インスタンスに利用可能です。EC2 インスタンスのインクリメンタルスナップショットと必要な状態に戻すを作成できます。複数ボリュームスナップショットを重要なワークロードに使用できます。例えば、複数の EBS ボリュームを使用するデータベースに使用します。
Lambda 。 Lambda関数をより適切に管理するために、便利なバージョン管理システムがサポートされています。アップロードしたコードの各コピーにバージョン番号を割り当て、その適切なコードバージョンを指すエイリアスを追加することができます。各バージョン番号は1から始まり、順次増加していきます。例えば、Lambda関数をアルファ版、ベータ版、本番環境版などに分類することができます。 Amazonリソース名(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 。LambdaがデフォルトでアクセスできるAWSサービスに対する権限があります。IAMロールは、Lambda関数で利用可能な必要があるサービスを定義するために使用されます。各Lambda関数について、その関数が起動される際に代弁するIAMロールを設定する必要があります。 つまり、IAMロールを設定すれば、キーやその他の認証パラメータを使用せずに、定義されたAmazonサービスにLambda関数を接続できるようになります。
KMSキーを使用して、Lambda関数とS3の間、およびAPIゲートウェイとLambdaの間で暗号化を設定することが可能です。Lambda関数を作成すると、デフォルトの暗号化キーが作成されます。ただし、独自のKMSキーを作成することが推奨されています。
EC2インスタンスと比較して、Lambda関数にはセキュリティ更新やパッチの適用が不要です。基盤となるコンテナやオペレーティングシステムは、Amazonによって自動的に更新されます。これが、セキュリティの観点からLambda関数を利用するメリットです。
AWS EC2 対 Lambda:パフォーマンスと可用性
EC2 。EC2インスタンスの電源を入れた後、手動で停止するか、シャットダウンタスクをスケジュールするまで、インスタンスは実行され続けます。 EC2インスタンスが稼働している場合、そのインスタンス上でアプリケーションはほぼ瞬時に実行されます。EC2インスタンスのパフォーマンスが許す限り、任意の数のアプリケーションを同時に実行することができます。 EC2インスタンス上でのアプリケーション実行は、1日を通して定期的にアプリケーションを実行する必要がある場合に適したソリューションです。
Lambda 。Lambda関数は常に利用可能ですが、常時実行されているわけではありません。デフォルトでは、Lambda関数は非アクティブ状態です。イベントにリンクされたトリガーが作動すると、アプリケーション(Lambda関数)が起動します。Lambda関数の最大実行時間(タイムアウト)は900秒(15分)に制限されています。 したがって、AWS Lambda で長時間実行されるアプリケーションを実行することは推奨されません。正常に完了するまでに 900 秒以上かかるアプリケーションや、実行時間が変動するアプリケーションを実行する必要がある場合は、AWS EC2 の使用を検討してください。実行中の Lambda 関数に対するもう 1 つの制限は、最大メモリ量が 3008 MB であることです。
リージョンによっては、1000 ~ 3000 の Lambda インスタンスを同時に実行できます。 より多くのインスタンスを同時に実行したい場合は、AWSサポートにお問い合わせください。
AWS Lambdaでは、リクエストの送信からアプリケーションの実行までの遅延が最大100ミリ秒生じますが、EC2インスタンス上で実行されるアプリケーションにはこのような遅延はありません。100msは長い時間ではありませんが、アプリケーションの種類によっては、この時間が決定的な要因となる場合があります。 アプリケーションが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インスタンスを利用することが経済的に合理的である可能性があります。
Lambda 。料金は、アプリケーションの実行回数と実行完了までに要した時間に基づいて課金されます。アプリケーションの実行1秒あたりの料金は、アプリケーションに割り当てられたメモリ量に応じて決まり、1ギガバイト秒あたり0.00001667ドルです。アプリケーションの実行時間は、アプリケーションの開始から結果が返されるまで、またはタイムアウト後に停止するまでの時間がカウントされます。 時間は、100ミリ秒の倍数に切り上げられます。オンデマンドでの可用性が必要な場合、AWS Lambda を使用して関数やアプリケーションを実行する方が費用対効果が高い可能性があります。
結論
AWS EC2 は、従来のクラウドインフラストラクチャ(IaaS)を代表するサービスであり、EC2 インスタンスを仮想マシン(VM)として実行し、環境を構成し、カスタムアプリケーションを実行することができます。
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インスタンスも保護できるオールインワンのデータ保護ソリューションです。
