Serverless vs Containers
サーバーレスとコンテナ化は、近年の DevOps の 2 つの最大のバズワードとなっていますが、それには十分な理由があります。 適切なユースケースでは、どちらもパフォーマンスを向上させ、コストを削減できます。 しかし、その人気にもかかわらず、サーバーレスコンピューティングとコンテナの違いを誰もが理解しているわけではありません。
ここでは、両方のテクノロジーを使いこなすために、それぞれが何であるかを見て比較し、それらが互いにどのように補完し合うかを説明し、サーバーレスセキュリティとコンテナセキュリティという重要なトピックを探ります。
コンテナとは?
コンテナーは、アプリケーションを実行するためのすべての依存関係とコードを含む、軽量で不変のソフトウェア単位です。
コンテナは、さまざまなオペレーティングシステムやプラットフォームで実行できる「コンテナランタイム」(コンテナエンジンと呼ばれることもあります)上で実行されます。 コンテナー ランタイムはコンテナーに必要なすべてのシステム リソースを提供するため、従来のオペレーティング システムにアプリケーションをデプロイする場合の運用の複雑さは最小限に抑えられます。
コンテナは携帯性にも優れています。 コンテナー ランタイムが存在する場所であればどこでも、チームはコンテナー イメージをデプロイできます。 さらに、コンテナにはアプリケーションの実行に必要なものだけが含まれているため、仮想マシンなどの代替手段よりも軽量で高速です。
コンテナプラットフォームの最も一般的な例はDockerです。 ただし、コンテナプラットフォームはDocker だけではありません 。 たとえば、Linux Container (LXC) は Docker よりも前から存在し、現在も使用されています。 さらに、大規模なコンテナ デプロイメントの調整と管理に使用されるKubernetes (K8s) など、コンテナを補完するツールが多数あります。
サーバーレスとは?
サーバーレスは、インフラストラクチャのプロビジョニングや管理を必要とせずにオンデマンドでコードを実行するコンピューティング モデルです。
名前が示すものとは裏腹に、サーバーレスコンピューティング に関与するサーバーがあります 。 ただし、企業はサーバーインフラストラクチャについてまったく心配する必要はありません。 代わりに、開発チームはサーバーレスプラットフォームにコードをデプロイするだけで、そのコードが実行されてサーバーリソースを消費した場合にのみ課金されます。
企業はサーバー リソース (CPU など) を使用した時間に対してのみ料金を支払うため、サーバーレスは、使用量が大幅に増加したり減少したりするアプリケーションの導入コストを最小限に抑える優れた方法となります。 これは、ベアメタル サーバー、仮想マシン、コンテナの実行からの根本的な変化です。 アイドル時間にはコストはかからず、課金はアプリがアクティブに実行され、リソースを使用している場合にのみ発生します。
さらに、すべてのインフラストラクチャがサーバーレス プラットフォーム プロバイダーによって抽象化されるため、運用の複雑さが軽減されます。 DevOps チームはコードに集中するだけです。 サーバーレス コンピューティング プラットフォームの一般的な例には、AWS Lambda、Azure App Service、Google の Cloud Run などがあります。
一般的な使用例
サーバーレスコンピューティングとコンテナが何であるかを理解したところで、その最も一般的なユースケースをいくつか見てみましょう。
一般的なコンテナのユースケースには、次のようなものがあります。
- マイクロサービス。 コンテナーは、マイクロサービス アーキテクチャの構成要素です。 コンテナーはポータブルで軽量で、デプロイが簡単であるため、疎結合のマイクロサービスの作成に最適です。
- CI/CDです。 コンテナーは、DevOps チームに、開発、QA、ステージング、本番デプロイメント間の環境の違いを排除する方法を提供します。 結果として、これらは継続的インテグレーション/継続的デプロイメント ( CI/CD ) ワークフローで非常に役立ちます。
- 「どこにでも展開」。 現代の企業のほとんどは、ハイブリッド クラウドおよびマルチクラウド環境で運用されています。 企業がアプリケーションをオンプレミスで実行する必要がある場合でも、複数のクラウドにまたがって実行する必要がある場合でも、コンテナーがその仕事を実行できます。
- レガシー アプリケーションの移行。 多くの場合、従来のモノリシック アプリケーションはクラウドに移行する必要があります。 それらをコンテナ化すると、このプロセスが簡単になります。
最も一般的なサーバーレスのユースケースには、次のようなものがあります。
- API 。 REST API や GraphQL 実装などのアプリケーション プログラミング インターフェイス (API) は、広く普及しているサーバーレス コンピューティングのユースケースです。 API トランザクションは存続期間が短く、すぐにスケールアップおよびスケールダウンできるため、サーバーレスは API バックエンドを構築するための強固なプラットフォームを提供します。
- データ処理。 サーバーレスでは、単純な関数を使用して複数のソースからのデータ処理が可能になります。 その結果、サーバーレスコンピューティングは、データを大規模に処理および分析する必要があるが、インフラストラクチャ管理を避けたいチームに適しています。
- IoT。サーバーレス コンピューティングは、IoT デバイスと外部システムが非同期通信するためのイベント駆動型の簡単な方法を提供します。
- 動的な Web サイト コンテンツ。 サーバーレスの教科書的な機能の 1 つは、静的な Web サイトに動的コンテンツとロジックを追加することです。 たとえば、AWS Lambda は、S3 でホストされている静的サイトに動的機能を追加するためによく使用されます。
もちろん、これらはコンテナとサーバーレスコンピューティングで可能なことのほんの一例にすぎません。 一般的に、コンテナーは、ポータブルで軽量、および不変のイメージを確実にデプロイする必要がある場所に役立ちます。 サーバーレス コンピューティングは、ワークロードが非常に変動し、インフラストラクチャ管理の労力を最小限に抑えることが優先されるさまざまなアプリケーションで役立ちます。
サーバーレスコンピューティングとコンテナ:違いと相互補完の方法
ご覧のとおり、サーバーレスコンピューティングとコンテナには、いくつかの高レベルの類似点があります。 これらにより複雑さが解消され、チームによるアプリケーションの導入と拡張が容易になります。 ただし、次のような重要な違いを考慮する必要があります。
- コスト構造。 コンテナーの場合、企業で実行されているかクラウドで実行されているかに関係なく、企業はコンテナーが稼働している限り料金を支払います。 サーバーレスコンピューティングでは、企業は使用した分だけ料金を支払います。 需要が一貫しているワークロードの場合、これは大きな違いを生まない可能性があります。 バースト性の高いワークロードの場合、これはサーバーレスで大幅なコスト削減につながる可能性があります。
- テストの容易性。 コンテナーを使用すると、チームはどこにいてもアプリケーションを簡単にテストできます。 サーバーレスでは、チームは機能を実行するクラウド プラットフォームに制限され、サーバーレス機能に対して同じレベルのテストを実行できません。
- デプロイメント。コンテナベースのアプリケーションをスケールアップまたはスケールダウンするには、何らかの方法で (Kubernetes を使用するなど) コンテナをデプロイまたはスケールバックする必要があります。 severlessでは、ylcodeはベンダーが提供する「ブラックボックス」プラットフォーム上で実行されるだけです。
- 運用の複雑さ。 サーバーレスの「ブラックボックス」パラダイムは、運用の複雑さを最小限に抑えたいチームにとって大きなメリットとなります。 サーバーレスで管理するインフラストラクチャは事実上ありません。 コンテナを使用すると、インフラストラクチャ管理をプロバイダーにオフロードできますが、常にそうであるとは限りません。
- ベンダーロックイン。 コンテナは「どこでも実行」できますが、サーバーレスでは、企業はコードを実行するプラットフォームに大きく依存します。 たとえば、AWS Lambda 関数を使用すると、アプリは AWS プラットフォームへの依存度が高まりますが、Docker を使用すると、Docker を実行できる任意のプラットフォームにコンテナをデプロイできます。
違いはあるものの、コンテナとサーバーレスコンピューティングは必ずしも相反するものではありません。 たとえば、 Docker を使用してサーバーレス関数をコンテナー化できます。 さらに、Google の Cloud Run などのプラットフォームは、従量課金制のサーバーレス モデルを使用してコンテナをデプロイするように設計されています。
サーバーレスとコンテナのセキュリティについて
テクノロジー自体と同様に、サーバーレス セキュリティとコンテナ セキュリティは微妙なDevSecOpsトピックです。
サーバーレスにより、インフラストラクチャ管理に関連するセキュリティ上の懸念の多くが解消されますが、サーバーレスのセキュリティに関する重要な考慮事項が依然として多く存在します。 たとえば、安全でないサーバーレス権限構成により、アプリケーションに脆弱性が生じる可能性があります。 さらに、サーバーレスワークフローを可能にする機能やプロトコルが増えれば、保護すべき潜在的な攻撃ベクトルも増えます。 複雑さの軽減にはセキュリティのトレードオフも伴います。サービス プロバイダーがインフラストラクチャの大部分を処理するため、サーバーレス デプロイメントの可視性は限られています。
一方、 コンテナセキュリティ には独自の課題があります。 たとえば、信頼できるコンテナのみを安全に調達してデプロイし、パッチを適用し続けることは、運用上の課題になる可能性があります。 さらに、IDおよびアクセス管理(IAM)とコンテナ構成管理は、強力なセキュリティ体制の重要な側面です。
CheckPointによるサーバーレスとコンテナのセキュリティの向上
アプリケーション開発のどちらのアプローチでも複雑さは軽減されますが、強力なセキュリティ体制の必要性がなくなるわけではないため、開発プロセスにセキュリティを統合する必要があります。 最小権限の原則に従い、「ゼロトラスト」ポリシーを採用することは、インフラストラクチャを安全に保つための重要な部分ですが、開発チームは、適切なセキュリティソリューションを実装するためのテクノロジーとドメインの専門知識も必要です。
チェック・ポイント・ソフトウェアは、これらの課題に対処するために構築されています。 たとえば、 CloudGuard は、サーバーレスおよびコンテナベースのデプロイメントを含む、すべてのエンタープライズ クラウド資産にエンドツーエンドのマルチクラウド セキュリティを提供します。 CloudGuard は、検討対策、クラウド セキュリティ ポスチャ管理、クラウド ワークロード保護 (コンテナーおよびサーバーレス アプリ用)、インテリジェントな脅威ハンティングなどの機能を提供します。
次のステップ: サーバーレスとコンテナーのセキュリティについてさらに詳しく知る
コンテナーまたはサーバーレス セキュリティの状態を改善したい場合は、今すぐ無料のインスタント セキュリティ チェックにサインアップしてください。 このチェックは、クラウド環境全体のセキュリティとコンプライアンスを脅かす可能性のある構成ミスを特定するのに役立ちます。 また、CloudGuard を自分で試してみたい場合は、無料トライアルにサインアップすることもできます。
サーバーレスとコンテナのセキュリティについて詳しく知りたい場合は、 無料の
サーバーレスセキュリティAdvantage eBookと Guide to Container Security は、始めるのに最適な場所です。