AWS コンテナサービスの選択
最初の一歩を踏み出す
はじめに
コンテナは現代のアプリケーション開発の重要な要素です。コンピューティングリソースを整理し、アプリケーションデプロイのコンテンツを管理するための標準的な方法となっています。
コンテナは、個別に再現可能なコンピューティング環境を提供します。また、パッケージ化と依存関係管理を簡素化する方法も提供します。非常に大規模なマルチクラスター環境のオーケストレーションからウェブアプリケーションのオーケストレーションまで、あるいはノートパソコンで作業のテストや概念実証を行うことまで、クラウドにデプロイするソフトウェアを構築し始めるのに最適な方法です。
この意思決定ガイドは、モダンアプリケーション開発に適した AWS コンテナサービスを開始して選択する際に役立ちます。
この 4 分間の抜粋は、AWS Summit DC 2022 で行われた AWS のプリンシパルテクニカルアカウントマネージャーである Vikram Venkataraman による 57 分間のプレゼンテーションの録音からの抜粋したものです。利用できる AWS コンテナサービスの概要を説明します。
読む時間
20 分
目的
どの AWS コンテナサービスが組織に最適かを判断するのに役立ちます。
レベル
初心者
最終更新日
2023 年 4 月 26 日
理解
コンテナは複数の環境に一貫した方法でデプロイできるため、アプリケーションコード、設定、依存関係を 1 つのアーティファクトにパッケージ化するための事実上の標準となっています。
コンテナは、どのモダンアプリケーション開発戦略でも重要な要素です。コンテナ関連の AWS サービスの背景を説明するために、右側の画像では使用できる AWS コンテナオプションをレイヤー別に示しています (こちらの動画で詳述)。
容量
容量とは、コンテナをデプロイする基盤となるコンピューティング、中央処理装置 (CPU)、およびメモリ要件を指します。容量は、コンテナが稼働するインフラストラクチャです。AWS のコンテナの容量には 2 つの選択肢があります。
- Amazon Elastic Compute Cloud (Amazon EC2) を使用すると、管理する仮想マシンでコンテナを実行できます。
- AWS Fargate は、基盤となるインフラストラクチャを管理せずにコンテナを実行できるコンテナ用のサーバーレスコンピューティングエンジンです。Fargate を使用すると、基盤となる EC2 インスタンスを気にせずにコンテナを起動およびスケールできます。
オーケストレーション
組織が 1 つまたは少数ではなく、数千のコンテナを運用していることも珍しくありません。このような複雑な環境を管理することは困難になります。オーケストレーションサービスは、これらのアプリケーションのデプロイと管理を容易にします。AWS は以下の 3 つのオーケストレーションサービスを提供しています。
- Amazon Elastic Container Service (Amazon ECS) はフルマネージド型のコンテナオーケストレーションサービスであり、コンテナ化されたアプリケーションをシンプルかつ費用対効果の高い方法でデプロイおよび管理したい組織に最適です。
- Amazon Elastic Kubernetes Service (Amazon EKS) は、AWS で Kubernetes クラスターを実行および管理できるようにするフルマネージド型の Kubernetes サービスです。
- Red Hat OpenShift Service on AWS (ROSA) は、AWS で OpenShift クラスターを実行および管理できるようにするフルマネージド型の OpenShift サービスです。すでにオンプレミスで OpenShift を実行しているお客様には良いオプションです。
プロビジョニング
プロビジョニングは、サービスのオーケストレーションレイヤーへのインターフェースを提供します。各オーケストレーターにはそれぞれ独自の複雑さがあります。プロビジョニングサービスはこの複雑さを隠し、サービスをより簡単に利用できるようにします。このカテゴリの AWS のサービスは以下のとおりです。
- AWS App Runner は、ソースコードからコンテナイメージを自動的に構築し、そのコンテナをフルマネージドインフラストラクチャにデプロイし、需要に応じてスケールするフルマネージドサービスです。
- AWS Elastic Beanstalk は、ウェブアプリケーションのデプロイ、管理、スケーリングを容易にするフルマネージドサービスです。Elastic Beanstalk はコンテナもサポートしており、コンテナ化されたアプリケーションをデプロイおよびスケーリングするためのフルマネージドプラットフォームも提供しています。
- Amazon Lightsail は、仮想プライベートサーバーを起動して管理するためのシンプルで費用対効果の高い方法ですが、コンテナもサポートしているため、Lightsail インスタンスを使用してコンテナ化されたアプリケーションを作成およびデプロイできます。
検討事項
アプリケーションの要件と運用上の好みに合ったコンテナサービスを選択することが重要です。以下は、コンテナサービス、およびサポートツールやサービスを選択する際に検討すべき重要な基準の一部です。
-
マネージドサービスと運用上のオーバーヘッド
-
ワークロード特性
-
アプリケーションポータビリティ
-
組織の規模とスキル
-
デプロイのしやすさ
-
組織はクラウドを選択して、運用上の負担を AWS に移すマネージドサービスで標準化することで、運用コストを削減することができます。高い抽象度のおかげで、デベロッパーと運営者は差別化されていない作業ではなく、独自の付加価値活動に集中できます。
AWS でコンテナを使用して構築すると、抽象度の高いサービスを使用して、インフラストラクチャの維持にかかる運用上のオーバーヘッドを AWS に移します。
-
ワークロードパターンを理解することで、アーキテクチャをより簡単に選択できます。これには、ウェブアプリケーション、API ベースのマイクロサービス、イベント駆動型アプリケーション、ストリーミングとメッセージング、データパイプライン、IT オートメーションなどが含まれます。一部のワークロードは、あるコンピューティング環境では別の種類のコンピューティング環境よりもパフォーマンスが向上したり、費用対効果が高くなったりします。
-
多くのお客様は、アプリケーションを別の環境で実行でき、簡単に移行または移動できるようにすることを望んでいます。選択の余地を残したり、オンプレミスとクラウドの両方でアプリケーションを実行したりできることが重要です。
ソフトウェアアーキテクチャのコンピテンシーを構築し、コンピューティングサービス間で異なるビジネスロジックをより簡単に移植できるパッケージを構築することをお勧めします。
一部のテクノロジーを使用して構築されたアプリケーションは、一部のコンピューティングサービスでは他のサービスよりも効率的に実行できる場合があります。
-
どのコンテナサービスを使用するかを決める際には、組織のスキルが大きな要因となります。採用するアプローチには、DevOps チームとサイト信頼性エンジニア (SRE) チームにある程度の投資が必要になります。アプリケーションをデプロイするための自動パイプラインを構築することは、ほとんどのモダンアプリケーション開発で一般的です。
いくつかの選択肢は管理量を増やします。例えば、Kubernetes クラスターを管理するために強力な SRE チームに投資しているため、Kubernetes 実装を実行および管理するためのスキルとリソースを持ち合わせている組織もあります。このようなチームは頻繁にクラスターのアップグレードを行います (例えば、Kubernetes は年に 3 回のメジャーリリースを行い、古いバージョンは廃止されます)。
組織の規模は重要な要素です。小規模なスタートアップでは複数の役割を担う人で構成される少人数の IT スタッフがいるの一方で、大企業では本番環境の何百ものワークロードを一度にサポートする可能性があるためです。
-
さまざまな AWS コンテナサービスが、デプロイの複雑さという点で固有のニーズを満たします。各サービスをそれぞれの役割に合わせて最適化する方法は次のとおりです。
- AWS AppRunner は最もシンプルな方法で、基盤となるインフラストラクチャを管理またはカスタマイズすることなく、アプリケーションをパブリックインターネットにデプロイできます。
- Amazon ECS は、規模や機能を犠牲にすることなく、ネットワークとセキュリティ設定をもう少し制御する必要がある場合に適しています。
- Amazon EKS では、Kubernetes テクノロジーが提供するアプリケーションのデプロイとオーケストレーションを柔軟に制御できます。
- AWS AppRunner は最もシンプルな方法で、基盤となるインフラストラクチャを管理またはカスタマイズすることなく、アプリケーションをパブリックインターネットにデプロイできます。
選択
コンテナオプションを評価する基準がわかったので、組織の要件に適した AWS コンテナサービスを選択する準備ができました。
次の表は、どのサービスがどの状況に最適化されているかをまとめたものです。この表を参考に、組織やユースケースに最適なコンテナを判断してください。
コンテナオーケストレーション
コンテナオーケストレーションサービスは、コンテナをいつ、どこで実行するかを管理します。
Amazon ECS は、コンテナ化されたアプリケーションをデプロイ、管理、スケーリングするのに役立つ、フルマネージドコンテナオーケストレーションサービスです。
Amazon Elastic Kubernetes Service
Amazon EKS は、AWS クラウドまたはオンプレミスで Kubernetes アプリケーションを開始、実行、スケールするのに役立ちます。
Red Hat OpenShift Service on AWS (ROSA)
Red Hat OpenShift Service on AWS を使用すると、AWS で Red Hat OpenShift クラスターを簡単に作成および運用できます。OpenShift Container Platform で既にオンプレミスでコンテナ化されているアプリケーションの場合、ROSA は使い慣れた API サーフェスを提供し、デプロイツールチェーンを同じに保つため、アプリケーションスタック全体を気にかけることなく、データモデルのリファクタリングに集中できます。
プロビジョニング
サービスのプロビジョニングカテゴリは、サービスのオーケストレーションレイヤーへのインターフェースを提供します。各オーケストレーターにはそれぞれ独自の複雑さがあります。プロビジョニングサービスはこの複雑さを隠し、お客様がサービスをより簡単に利用できるようにします。
AWS App Runner を使用すると、フルマネージドサービスでコンテナ化されたアプリケーションを構築して実行できます。インフラストラクチャの知識は最小限で済みます。
Lightsail は、使いやすい仮想プライベートサーバー (VPS) インスタンス、コンテナ、ストレージ、データベースなどを費用効果の高い月額料金で提供します。
Elastic Beanstalk を使用すると、アプリケーションを実行しているインフラストラクチャについて学習することなく、AWS クラウドでアプリケーションのデプロイと管理をすばやく行うことができます。Elastic Beanstalk は、選択肢や制御の幅を縮めることなく、管理の複雑さを軽減します。
Amazon Elastic Container Registry
Amazon ECR は、ハイパフォーマンスホスティングを提供するフルマネージドコンテナレジストリであるため、アプリケーションイメージとアーティファクトをどこにでも確実にデプロイすることができます。
Amazon Elastic Container Service (ECS) Anywhere
Amazon ECS Anywhere は、インフラストラクチャ上でコンテナワークロードを実行および管理できる Amazon ECS の機能です。
Amazon EKS Anywhere を使用すると、独自のインフラストラクチャで Kubernetes クラスターを作成して操作できます。
Amazon EKS では、AWS が構築および維持している Kubernetes ディストリビューションである Amazon EKS Distro を使用しています。Amazon EKS Distro を使用すると、高い信頼性を備えた安全なクラスターを簡単に作成できます。
使用
これで、各 AWS Container サービス (およびそれをサポートする AWS ツールとサービス) が何をするのか、そしてどれが自分の組織に適しているのかを明確に理解できたはずです。
利用できる各 AWS コンテナサービスの使用方法や詳細を調べるために、各サービスがどのように機能するかを詳しく見る方法をご用意しました。次のセクションには、使い始めるための詳細なドキュメント、実践的なチュートリアル、およびリソースへのリンクがあります。
-
Amazon EC2
-
Amazon ECR
-
Amazon ECS
-
Amazon EKS
-
Amazon Lightsail
-
AWS App Runner
-
AWS Elastic Beanstalk
-
AWS Fargate
-
ROSA
-
Amazon EC2
-
EC2 スポットインスタンスを使用した Amazon EC2 Auto Scaling
Amazon EC2 Auto Scaling を使用してステートレスでフォールトトレラントなワークロードを作成する方法と、Amazon EC2 スポットインスタンスをリクエストする起動テンプレートについて説明します。
Amazon EC2 でウェブアプリケーションをデプロイする
AWS CDK を使用した Amazon EC2 インスタンスの作成、Amazon EC2 インスタンス上でのウェブアプリケーションのデプロイを説明します。
-
Amazon ECR
-
Amazon ECR ソースと ECS から CodeDeploy へのデプロイを使用してパイプラインを作成する
Docker イメージをサポートするブルー/グリーンデプロイを使用してコンテナアプリケーションをデプロイするパイプラインを AWS CodePipeline で設定します。
-
Amazon ECS
-
Amazon Elastic Container Service (ECS) デプロイ
このガイドでは、AWS での Amazon ECS デプロイオプションの概要と、それを使用して簡単なコンテナ化されたアプリケーションを管理する方法を示します。
Amazon ECS ワークショップ
このワークショップは、AWS Fargate、Amazon ECS、場合によっては Docker コンテナワークフローに精通していない人を対象としています。
Amazon ECS に Docker コンテナをデプロイする
ロードバランサーの背後にある Amazon ECS クラスターで Docker 対応のサンプルアプリケーションを実行し、サンプルアプリケーションをテストし、リソースを削除して料金を回避する方法を学びます。
-
Amazon EKS
-
Amazon EKS の開始方法
AWS で Kubernetes を実行するために使用できるマネージド型のサービスである Amazon Elastic Kubernetes Service (Amazon EKS) の詳細をご覧ください。Amazon EKS では、お客様独自の Kubernetes コントロールプレーンやノードをインストール、運用、保守管理する必要はありません。
Amazon Elastic Kubernetes Service (EKS) デプロイ
AWS での Amazon EKS のデプロイオプションを詳しく見て、それを使って一般的なコンテナ化されたアプリケーションを管理する方法を学びましょう。
Amazon EKS クイックスタートリファレンスデプロイ
クイックスタートリファレンスデプロイガイドを使用して、Amazon Elastic Kubernetes Service (Amazon EKS) クラスターをデプロイする手順を段階的に説明しています。
Kubernetes アプリケーションをデプロイする
このチュートリアルでは、コンテナ化されたアプリケーションを、Amazon Elastic Container Service for Kubernetes (Amazon EKS) で管理される Kubernetes クラスターにデプロイする方法について学習します。Amazon EKS ワークショップ
Amazon Elastic Kubernetes サービスについて学ぶための実践的な演習
ワークショップを始める »
-
Amazon Lightsail
-
Amazon Lightsail を使用して
コンテナイメージを作成、プッシュ、デプロイする
このチュートリアルでは、Dockerfile を使用してローカルマシンにコンテナイメージを作成する方法を示します。イメージが作成されたら、Lightsail コンテナサービスにプッシュしてデプロイできます。
Amazon Lightsail リソースセンター
Lightsail のチュートリアル、動画、コアコンセプトドキュメントへのリンクをご覧ください。
Amazon Lightsail を使用して Linux 仮想マシンを起動する
このチュートリアルでは、Amazon Lightsail で Amazon Linux インスタンスを作成します。インスタンスが稼働を開始したら、ブラウザベースの SSH ターミナルを使用して、Lightsail コンソール内の SSH 経由でインスタンスに接続します。
-
AWS App Runner
-
AWS App Runner の開始方法
このチュートリアルでは、アプリケーションを App Runner サービスにデプロイするためのソースコードとデプロイ、サービスビルド、サービスランタイムの設定について説明します。また、コードバージョンをデプロイする方法、設定を変更する方法、およびログを表示する方法についても説明します。
チュートリアルを使用する »
AWS App Runner: 数分でコードからスケーラブルで安全なウェブアプリケーションへ
AWS App Runner が、コンテナやインフラストラクチャのデプロイや管理の経験がないチームでも、記述されている言語に関係なく、ウェブアプリや API をクラウドに簡単にデプロイできるようにどのように設計されているかをご覧ください。
AWS App Runner を使用してウェブアプリケーションをデプロイする
以下のステップバイステップの手順に従って、AWS App Runner を使用してコンテナ化されたウェブアプリケーションをデプロイします。ソースコードからでも、コンテナイメージからでも始められます。App Runner がウェブアプリケーションを自動的にビルドおよびデプロイし、暗号化しつつトラフィックのロードバランスを実行します。 -
AWS Elastic Beanstalk
-
AWS Elastic Beanstalk でのデプロイオプション
このガイドでは、AWS Elastic Beanstalk を使用して、インフラストラクチャの管理という運用上の負担をかけずにアプリケーションをデプロイ、管理、スケールできる方法について説明します。
中級の AWS Electric Beanstalk チュートリアルとサンプル
チュートリアルは中級ユーザーを対象としており、AWS へのサインアップなどの基本的な手順の説明は含まれていません。
-
AWS Fargate
-
AWS Fargate の開始方法
このガイドでは、Amazon ECS で使用できるテクノロジーである AWS Fargate の基本について説明します。これにより、Amazon EC2 インスタンスのサーバーやクラスターを管理しなくてもコンテナを実行できます。
AWS Fargate で Linux コンテナを使用してコンソールを使い始める
Amazon ECS が AWS Fargate をサポートしているリージョンのタスクに Fargate 起動タイプを使用して、AWS Fargate で Amazon ECS を使い始めましょう。
AWS CLI を使用して Fargate Linux タスクでクラスターを作成する
AWS CLI を使用して、Amazon ECS でクラスターをセットアップし、タスク定義を登録し、Linux タスクを実行し、その他の一般的なシナリオを実行します。 -
ROSA
-
Red Hat OpenShift Service on AWS の開始方法
このガイドは、Red Hat OpenShift Service on AWS を使い始めるのに役立ちます。
ROSA を使用する理由
この動画では、標準の Kubernetes ではなく Red Hat OpenShift を使用する場合について取り上げ、ROSA on AWS について詳しく説明します。