公開日:2022年9月30日最終更新日: 2022年9月30日
近年は「コンテナ」と呼ばれる技術が多用されています。皆さんの中にも「コンテナ化」とのキーワードを耳にした経験がある人は多いでしょう。
今回はトレンドであるコンテナの基本知識を解説し、AWSにおけるコンテナ技術についてもご説明します。
目次 <Contents>
そもそもコンテナ技術とは?
コンテナは広く普及している技術ではありますが「コンテナ化が理解できていない」という人も多いでしょう。まずは、コンテナ技術がどのようなものであるのかについてご説明します。
コンテナ技術の概要
コンテナとはアプリケーションの動作環境を仮想的に構築する技術です。近年は仮想化が盛んに採用されるようになっていて、その流れを汲んでコンテナも広がりを見せています。
従来の仮想化とコンテナで異なる点は「独立したOSを用意するか」という部分です。現在、一般的に利用されているのは「仮想サーバー」と呼ばれるもので、サーバー(OS)から構築しています。しかし、OS部分から構築するため、リソース面で無駄が生じるなどの課題があります。
それに対して、コンテナはOS部分を共有し、その上に専用エンジンを設置して「コンテナ」を展開します。OS部分を共有するため、いくつも仮想サーバーを立ち上げる必要がなく、リソースを最大限活かせるなどのメリットを受けられる仕組みです。
ただ、OSを共有しているため、コンテナ間で微妙な設定差を設けることはできません。また、コンテナの設定を誤るとOSの挙動に影響し、結果として他のコンテナにも影響が出るリスクもあります。
コンテナが多用される背景
コンテナが幅広く活用される背景には「構築してから利用できるまでの時間が短い」という点が挙げられます。仮想化の代表格である仮想サーバーも短時間で利用できますが、コンテナはさらに短時間である点が特徴です。
特にコンテナは「コンテナイメージ」として、設定済のコンテナを保存できます。例えば「Docker」と呼ばれる製品に準拠したイメージを用意しておくと、どの環境でも同じようにコンテナを生成できるのです。これによって、短時間かつ正確に環境構築ができるようになりました。
また、コンテナはビルド・スクラップが実現しやすい仕組みであり、リソースの消費を最小限に抑えられます。AWSなどのクラウドサービスは従量課金制であるため、コンテナを利用すると最小限のインスタンス・利用時間の課金だけで済むようになります。
AWSにおけるコンテナ関連サービス
AWSではコンテナを簡単に構築したり、運用したりするためのいくつものサービスが存在します。今回はそれらの中でも、AWSでコンテナを利用するにあたって重要なサービスを3種類ご説明します。
Amazon ECS
Amazon ECSはAWSでコンテナ化を検討するにあたって最初に検討すべきサービスです。これはコンテナのオーケストレーションに該当するもので、主要な製品ではKubernetesに近いものです。AWS上でDockerコンテナを簡単に実行・停止・管理するために活用されます。
一般的なコンテナのオーケストレーションサービスであるため、Amazon ECSを利用せずに他のオーケストレーションサービスを自前で用意しても差し支えありません。
ただ、Amazon ECSはAWSの他サービスと連携しやすく、その点で他の製品よりも優位性があります。
Amazon EKS
Amazon EKSは「Amazon Elastic Kubernetes Service」の頭文字を取ったもので、その名のとおりKubernetesを利用できるサービスです。Amazon ECSと同じようなサービスですが、Kubernetesに特化したサービスであるためカスタマイズ項目が多くなっています。
Kubernetesは機能が多いため、自分で構築して運用する負担は大きなものです。その点、AWSのフルマネージドサービスを利用すると、構築や運用の負荷は大きく低減できます。運用の手軽さを意識してコンテナ化を実現したいならば、Amazon EKSがおすすめです。
AWS Fargate
AWS Fargateは、Amazon ECSとAmazon EKSで動作するコンテナを自動管理してくれるサービスです。本来、コンテナを運用する際はコンテナサービスの管理 + EC2などサーバーの管理も求められます。これではコンテナと実行環境の両方を管理する手間が生じます。
そこで、AWS Fargateを導入すると、これらのインスタンス管理を概ね自動化できます。インスタンスへのパッチ適用など定期的な作業、スケーリングなど動的な対応が必要な挙動なども設定だけで対応できるのです。数多くのコンテナを管理するならば、必須のサービスといえるでしょう。
AWSサービスを活用したコンテナの運用負荷軽減
上記ではAWSでコンテナを構築するためのサービスについてご説明しました。続いては、AWSでコンテナを運用するにあたって、運用負荷の軽減に役立つサービスをご紹介します。
Container Insightsを利用したリソースモニタリング
AWSのモニタリングといえばCloudWatchですが、上記でご説明したコンテナに関する情報を標準では取得できません。これでは運用に支障が出るため、コンテナの情報を取得するためのサービスにContainer Insightsがあります。
最初に設定する必要はありますが、こちらのサービスを有効化しておくとCloudWatchでは取得できないメトリクスが数多く取得可能です。タスクやコンテナ単位の情報が取得できるようになるため、AWSでコンテナを運用するならば必ず有効化しておきましょう。
なお、Container InsightsはAmazon ECSでもAmazon EKSでも利用可能です。それぞれのサービスで取得できる値は異なるため、その点を意識しておくとよりメトリクスの値を活用できます。
CI/CDによる自動化
開発効率を高めるために、CI(継続的なインテグレーション)やCD(継続的なデリバリー)が重要視されています。AWSならば多くの部分でコードによる実行に対応しているため、コンテナのビルドを自動化したり効率化したりすることが可能です。
また、CDプロセスにおいて内部のテストだけではなく、外部システムとのテストなども効率化できます。開発環境と検証環境の継続的な連携なども容易となり、開発効率をより高められるのです。
Auto Scalingによる可用性の向上
コンテナの実行環境にEC2を選択するとAuto Scalingが適用可能となり運用負荷を軽減できます。AWSのようなクラウド環境でなければスケーリングは難しいですが、AWSならば自動的なスケーリングが可能で負荷はほとんどありません。
また、スケーリングは簡単に設定できるように考慮されています。コンテナの設定と同時にスケーリングの設定もしておくと、アプリケーションの実行環境そのものを運用する手間が最小限になるのです。
ログ運用
基本的にはCloudWatchLogsにすべてのログが集約されます。そのため、他のAWSサービスと組み合わせてこちらでメトリクス監視などを実施するとよいでしょう。ログが集約されることで、管理や監視の対象が把握しやすくなります。
ただ、すべてのログが直接集約できない点は注意が必要です。必要に応じてFireLensと呼ばれるサービスを活用して、コンテナが出力したログをCloudWatchLogsに取り込む作業が必要です。
まとめ
トレンドのキーワードであるコンテナとAWSのサービスについて説明しました。
AWSでは主要なコンテナ技術を簡単に構築できるようになっているので、コンテナ技術を導入するハードルが大きく下がります。
また、コンテナの運用を効率化するためのサービスも様々に展開されています。コンテナは構築して導入するだけではなく、運用も重要となります。AWSのサービスを駆使して効率の良い運用を目指してみましょう。