Amazon ECS のソリューションの構築 - Amazon Elastic Container Service

Amazon ECS のソリューションの構築

アプリケーションをコンテナ上で実行できるように設計する必要があります。コンテナとは、ソフトウェアアプリケーションの実行に必要なものをすべて保持する、標準化されたソフトウェア開発の単位です。これには、関連するコード、ランタイム、システムツール、およびシステムライブラリが含まれます。コンテナは、イメージと呼ばれる読み取り専用テンプレートから作成されます。コンテナイメージは、アプリケーションとその依存関係を含む静的アーティファクトです。イメージは通常 Dockerfile から構築されます。Dockerfile は、コンテナを構築するための手順を含むプレーンテキストファイルです。これらのイメージは、Amazon ECR など、構築された後にダウンロード可能な場所であるレジストリに保存されます。

イメージを作成して保存した後、Amazon ECS のタスク定義を作成します。タスク定義はアプリケーションのブループリントです。これは、アプリケーションを形成するパラメータと 1 つ以上のコンテナを記述する JSON 形式のテキストファイルです。例えば、オペレーティングシステムのパラメータ、使用するコンテナ、アプリケーションで開くポート、タスクのコンテナで使用するデータボリュームなどの指定に使用できます。タスク定義で使用できる特定のパラメータは、お客様の特定のアプリケーションのニーズによって異なります。

タスク定義を定義したら、それをサービスまたはタスクとしてクラスターにデプロイします。クラスターは、クラスターに登録されているキャパシティインフラストラクチャ上で実行されるタスクまたはサービスを論理的にグループ化したものです。

タスクはクラスター内のタスク定義のインスタンス化です。スタンドアロンタスクを実行することもできますし、サービスの一部としてタスクを実行することもできます。Amazon ECS サービスを使用すると、Amazon ECS クラスターで必要な数のタスクを同時に実行して維持できます。仕組みとしては、タスクがいずれかの理由で失敗または停止した場合に、Amazon ECS サービススケジューラがタスク定義に基づいて別のインスタンスを起動することによって動作します。これは、それを置き換え、サービス内の必要な数のタスクを維持するために行われます。

コンテナエージェントは Amazon ECS クラスター内の各コンテナインスタンス上で実行されます。エージェントは、現在実行中のタスクとリソースのコンテナの使用率に関する情報を Amazon ECS に送信します。Amazon ECS からのリクエストを受信するたびに、タスクを開始および停止します。

タスクまたはサービスをデプロイしたら、次のいずれかのツールを使用してデプロイとアプリケーションを監視できます。

  • CloudWatch

  • Runtime Monitoring

容量

容量は、コンテナが実行されるインフラストラクチャです。Amazon ECS では、クラスター用に 3 つのインフラストラクチャタイプが用意されています。

  • Amazon ECS マネージドインスタンス – AWS はプロビジョニング、パッチ適用、スケーリングなど、アカウントで動作している基盤となる Amazon EC2 インスタンスを完全に管理します。このオプションを使用すると、パフォーマンス、コスト効率、運用のシンプルさについて最適なバランスが得られます。

  • サーバーレス (Fargate) – インフラストラクチャを管理せずに、タスクで使用されるリソースに対してのみ支払います。可変ワークロードやすぐに始めたいときに最適です。

  • Amazon EC2 インスタンス – 基盤となる Amazon EC2 インスタンスの管理、例えばインスタンスの選択、設定、メンテナンスなどを直接行います。

Amazon ECS マネージドインスタンスは、次のような場合に使用します。

  • 基盤となるインフラストラクチャをより細かく制御できる Fargate のシンプルさを求めている場合。

  • 予測可能なパフォーマンスとコスト最適化が必要な場合。

  • AWS を使用して、柔軟に対応しながらインフラストラクチャを管理したい場合。

Fargate は、次のような場合に使用します。

  • インフラストラクチャを管理せずにアプリケーションに集中したい場合。

  • 可変または予測不可能なワークロードがある場合。

  • コンテナの使用を開始していて、シンプルなデプロイオプションが必要な場合。

Amazon EC2 インスタンスは、次のような場合に使用します。

  • 特殊なハードウェア要件 (GPU アクセラレーション、高性能コンピューティング) が必要な場合。

  • キャパシティ予約または特定のインスタンスタイプが必要な場合。

  • 特権機能またはカスタム AMI が必要な場合。

クラスターを作成する際、インフラストラクチャを指定します。タスク定義を登録する際、インフラストラクチャタイプも指定します。タスク定義では、インフラストラクチャを「起動タイプ」と呼びます。キャパシティプロバイダーを使用することもできます。

サービスエンドポイント

サービスエンドポイントは、インターネットプロトコルバージョン 4 (IPv4) またはインターネットプロトコルバージョン 6 (IPv6) を使用してプログラムでサービスに接続するために使用する Amazon ECS のエントリポイントの URL です。デフォルトでは、Amazon ECS にプログラムで接続するために行うリクエストは、IPv4 リクエストのみをサポートするサービスエンドポイントを使用します。IPv4 と IPv6 リクエストのどちらからでもプログラムで Amazon ECS に接続したい場合は、デュアルスタックエンドポイントを使用できます。デュアルスタックのエンドポイントの詳細については、「Amazon ECS デュアルスタックエンドポイントの使用」を参照してください。

ネットワーク

AWS リソースはサブネットに作成されます。EC2 インスタンスを使用する場合、Amazon ECS はクラスターの作成時に指定したサブネットでインスタンスを起動します。タスクはインスタンスのサブネットで実行されます。Fargate またはオンプレミス仮想マシンの場合は、タスクを実行するとき、またはサービスを作成するときにサブネットを指定します。

アプリケーションに応じて、サブネットはプライベートサブネットでもパブリックサブネットでもよく、サブネットは次の AWS リソースのどれにあってもかまいません。

  • アベイラビリティーゾーン

  • ローカルゾーン

  • Wavelength Zone

  • AWS リージョン

  • AWS Outposts

詳細については「共有サブネット、Local Zones、および Wavelength Zones の Amazon ECS アプリケーション」または「AWS OutpostsのAmazon Elastic Container Service」を参照してください。

次のいずれかの方法を使用して、アプリケーションをインターネットに接続できます。

  • インターネットゲートウェイを持つパブリックサブネット

    大量の帯域幅や最小のレイテンシーを必要とするパブリックアプリケーションがある場合は、パブリックサブネットを使用してください。該当するシナリオには、ビデオストリーミングやゲームサービスが含まれます。

  • NAT ゲートウェイを持つプライベートサブネット

    外部からの直接アクセスからコンテナを保護するには、プライベートサブネットを使用してください。該当するシナリオには、支払い処理システムや、ユーザーデータとパスワードを格納するコンテナなどがあります。

  • AWS PrivateLink

    トラフィックをパブリックインターネットに公開することのない、VPC、AWS サービス、オンプレミスネットワークの間のプライベート接続を提供するには、AWS PrivateLink を使用してください。

機能アクセス

Amazon ECS アカウント設定を使用して、次の機能にアクセスできます。

  • Container Insights

    CloudWatch Container Insights は、コンテナ化されたアプリケーションとマイクロサービスのメトリクスとログを収集、集約、要約します。このメトリクスには、CPU、メモリ、ディスク、ネットワークなどのリソース使用率が含まれます。

  • awsvpc トランキング

    特定の EC2 インスタンスタイプでは、新しく起動したコンテナインスタンスで追加のネットワークインターフェイス (ENI) を使用できます。

  • タグ付け認可

    ユーザーには、リソースを作成するアクションの許可が必要です (ecsCreateCluster など)。リソース作成アクションでタグが指定されている場合、AWS は ecs:TagResource アクションに対して追加の認可を実行して、ユーザーまたはロールがタグを作成するための許可を持っているかどうかを確認します。

  • Fargate FIPS-140 コンプライアンス

    Fargate は、機密情報を保護する暗号モジュールのセキュリティ要件を指定する連邦情報処理標準 (FIPS-140) をサポートしています。これは現在の米国およびカナダの政府標準であり、Federal Information Security Management Act (FISMA) または Federal Risk and Authorization Management Program (FedRAMP) への準拠が要求されるシステムに適用されます。

  • Fargate タスクの廃止時間の変更

    Fargate タスクが廃止されるまでの待機時間を設定できます。

  • デュアルスタック VPC

    タスクが IPv4、IPv6、またはその両方を介して通信できるようにします。

  • Amazon リソースネーム (ARN) 形式

    タグ付け認可などの特定の機能には、新しい Amazon リソースネーム (ARN) 形式が必要です。

詳細については、「アカウント設定による Amazon ECS 機能へのアクセス」を参照してください。

IAM ロール

IAM ロールは、特定の許可があり、アカウントで作成できるもう 1 つの IAM アイデンティティです。Amazon ECS では、コンテナやサービスなどの Amazon ECS リソースにアクセス許可を付与するロールを作成できます。

Amazon ECS の一部の機能にはロールが必要です。詳細については、「Amazon ECS の IAM ロール」を参照してください。

ログ記録

ログ記録およびモニタリングは、Amazon ECS ワークロードの信頼性、可用性、パフォーマンスを維持する上で重要な要素です。以下のオプションが利用できます。

  • Amazon CloudWatch ログ- ログを Amazon CloudWatch にルーティングする

  • Amazon ECS 用 FireLens - ログを AWS サービスまたは AWS Partner Network の宛先にルーティングして、ログの保存と分析を行います。AWS Partner Network は、プログラム、専門知識、リソースを活用して顧客向けサービスの構築、マーケティング、販売を行うパートナーのグローバルコミュニティです。

コンテナイメージのベストプラクティス

Amazon ECS コンテナイメージの主な原則は次のとおりです。

  • イメージにすべての依存関係を含める

  • コンテナごとに 1 つのプロセスを実行する

  • 正常なシャットダウンのために SIGTERM を使用する

  • ログを stdoutstderr に書き込む

  • 本番環境では latest を避け、一意のタグを使用する