コンテナの基礎からはじめるECS ☓ CDK

    コンテナの基礎からはじめるECS ☓ CDK

    目次

      はじめに

      クラウドインテグレーション部の渡邊です。
      コンテナ、ECS、CDKに関連する登壇を先日行ったため、記事にまとめました。
      各内容の基礎から、部分的ではありますがベストプラクティスまで説明しているため、ぜひご覧ください。

      まとめ

      • コンテナとは、OS内で仮想化されたアプリケーションの実行環境
      • コンテナの特徴は軽量性、再現性、隔離性、拡張性
      • ECSとはコンテナ用オーケストレーションサービスで、クラスタ、タスク定義、サービス、タスクで構成される
      • CDKとは、プログラミング言語を用いてクラウドインフラをコードで定義し、CloudFormationによってデプロイできる開発フレームワーク
      • CDKはApp、Stack、Constructで構成される

      ECS

      コンテナについて

      コンテナとは、OS内で仮想化されたアプリケーションの実行環境で、コンテナエンジンを用いて動かす仮想化技術のひとつです。
      OSの上にあるコンテナ管理ソフト(コンテナエンジン)でコンテナを管理します。
      202406_ecscdk_01コンテナの特徴は主に以下4つです。

      • 軽量性・・・ホストOSのカーネルを共有するため、仮想マシンよりも素早い起動や効率的なリソース利用が可能。コンテナはプロセスであるため仮想マシンと比べ起動時間が短い
      • 再現性・・・コンテナにはアプリケーションとその依存関係がパッケージ化されているため、異なる環境(開発環境、テスト環境、本番環境)で一貫した動作が可能。ローカルから実環境への適用においても優れている
      • 隔離性・・・異なるコンテナが独立して動作し、互いに影響をあたえることなく動作するため、ユーザーは異なるアプリケーションやサービスを同一ホスト上でセキュアに実行可能である
      • 拡張性・・・動的なスケーリングでスケーラビリティが向上。オーケストレーションツール(Amazon ECS、Kubernetes)の使用で効率的に管理可能である


      Dockerについて

      Dockerとは、軽量で高速に動作するコンテナ型仮想環境用プラットフォームのことで、コンテナを動かすためのコンテナエンジンです。
      Dockerコンテナが完成するまでに以下の過程を経ます。

      ①DockerイメージのオンラインレジストリであるDockerHubからベースイメージを取得する(DockerFileにベースイメージの情報を記載する)
      ②コンテナの設計書にあたるDockerfileの情報をもとに、Dockerイメージを作成する
      ③Dockerレジストリへイメージをプッシュ、またはローカルにコンテナを起動する
      ④Dockerレジストリへイメージをプッシュした場合、イメージに基づいて任意のプラットフォームでコンテナを起動する
      202406_ecscdk_02Dockerイメージ(コンテナイメージ)は変更差分のあるイメージレイヤーの集合のことです。
      ベースイメージの指定に加え、ファイル追加やパッケージのインストールなど実行したい内容をDockerfileに記載し、Dockerイメージを構成します。202406_ecscdk_03

      Amazon ECSについて

      ECSとはコンテナ化されたアプリケーションのデプロイ、管理、スケーリングを簡素化するためのオーケストレーションサービスです。
      機能として、デプロイ、スケーリング、ネットワークロードバランシングなどが挙げられます。
      複数のコンテナに対して、コマンドを実行する必要がなく、運用管理が楽になります。

      ECSの構成要素は主に4つです。

      ①クラスタ

      • コンテナを動かすための論理的なグループ
      • 複数のタスクが配置され、それぞれ独自のコンテナを実行

      ②タスク定義

      • ECSタスクの実行に必要な情報を定義(コンテナイメージ、CPUおよびメモリのリソース制約、ネットワーク設定など)
      • タスク定義は複数のコンテナを含むことができる
      • 障害などでタスクが停止してもサービスで指定した数に基づいて再作成される
      • 編集できないのでリビジョンでバージョン更新する

      ③サービス

      • 一連のタスクを実行およびスケールする方法を定義
      • サービスは特定のタスク定義を使用し、指定された数のタスクを起動および維持
      • ELBと連携可能
      • 起動タイプ(EC2、Fargate)を設定

      ④タスク

      • タスク定義に基づいて起動されるコンテナ群
      • タスクは1つ以上のコンテナから構成される
      • タスク内コンテナは同一ホスト上で実行される

      ECSと関連の深いサービスとしてECRが挙げられる。
      ECRはDockerイメージの保存場所で、タスク定義でイメージレジストリを参照する。
      ECRは脆弱性のスキャン、イメージの暗号化機能を提供している。202406_ecscdk_04

      ECSの実行環境として、EC2またはAWS Fargateを選択できる。
      これらを使用してコンテナをホストするクラスタを管理する。

      ECS on Fargateは、ECS on EC2と比べると利用者の責任範囲が小さい分、リソースの詳細な設定ができない。
      しかし、サーバレスであるためシンプルな運用が可能。202406_ecscdk_05

      CDK

      CDKとは、プログラミング言語を用いてクラウドインフラをコードで定義し、CloudFormationによってデプロイできる開発フレームワークのことです。 メリットとしては、手順書の省力化、テストの自動化による開発スピードの向上、手動による操作ミス防止などが挙げられます。

      CDKはApp、Stack、Constructで構成されてます。
      App > Stack > Construct という包含関係があるため、1つのAppに複数のStack、1つのStackに複数のConstructが含まれます。

      App・・・構成のエントリポイント
      Stack・・・Cloudformationスタックを表現する入れ物
      Construct・・・具体的なAWSリソースを作成202406_ecscdk_06

      CDKのベストプラクティス

      AWS CDKでクラウドアプリケーションを開発するためのベストプラクティスをベースにCDKのベストプラクティスを記載しております。

      • コードを管理するためのベストプラクティス
        • すべてのアプリケーションは、1つのリポジトリにある1つのパッケージから始める
          • デプロイ時の影響範囲が小さくなるため
        • コードのライフサイクルやチームの所有権に応じてリポジトリに分割する
        • インフラストラクチャコードとアプリケーションコードを同じパッケージにする
          • テストやプロジェクト間共有などが容易になるため
      • Construct ライブラリ
        • StackではなくConstructでアプリをモデル化する
        • 環境変数ではなく、API (プロパティ、メソッド) で設定する
        • インフラストラクチャのユニットテスト
        • ステートフルリソースのスコープとIDを変更しない
        • コンプライアンスのためにConstructを使わない
      • CDKアプリ
        • デプロイ時ではなく、合成時に決定する
        • 自動で生成されるリソース名を使用し、物理的な名前を使用しない
        • デプロイ要件に応じて、アプリケーションのStageを複数のStackに分割する
        • AWS CDKでロールとセキュリティグループを管理できるようにする
        • 全てのStageをコードでモデル化する
        • 全てを測定する

      【参考】
      Boost your infrastructure with the AWS CDK
      Container technology terminology
      Docker入門(第四回)~Dockerfileについて~

      アジアクエスト株式会社では一緒に働いていただける方を募集しています。
      興味のある方は以下のURLを御覧ください。