この記事の目次
「AWS Copilot」とは?
「AWS Copilot」とは、Dockerコンテナの管理サービスである「Amazon Elastic Container Service(Amazon ECS)」の高機能デプロイツールです。
具体的には、「Amazon ECS」上のコンテナに、ソースコードの状態からアプリケーションをデプロイすることが可能です。デプロイとは、モジュールを利用可能な状態として配置することです。
ポイントとしては、AWSと「Amazon ECS」の様々なコンポーネント(「パブリックサブネット」、「Application Load Balancer」、「サービス」、「タスク」、「クラスター」等)を理解していなくても、「AWS Copilot」で必要な処理を代行してくれる点です。
「AWS Copilot」の機能概要
「AWS Copilot」は、AWS上のリソース管理の負荷を軽減してくれる「オールインワン」のCLI(コマンドラインインターフェース)ツールのため、自社アプリケーションの開発業務に集中することができます。
具体的には、自社向けに構築するクラウドサービス設計(負荷分散されたWebサービス、バックエンドサービス等)をベースにして、「AWS Copilot」が各種AWSリソースを生成し、コンテナ化されたアプリケーションが本番稼働できる環境を構築してくれます。
また「AWS CodePipeline パイプライン」を利用することで、複数の「アカウント」や「リージョン」に横断的にデプロイすることが可能です。
他にも、「ログ表示」や「サービスの正常性」等のシステム運用作業を実行することも可能です。
「AWS Copilot」のインストール方法
「AWS Copilot」のインストール方法としては、「Homebrew(※mac OSのパッケージ管理ツール)」を利用する、もしくは手動でバイナリパッケージをダウンロードします。
インストール可能な環境としては、「macOS」と「Linux」になります。
「Homebrew」を利用してインストールする場合は、以下のコマンドを実行します。
brew install aws/tap/copilot-cli
「macOS」と「Linux」の場合は、以下のコマンドを実行します。
sudo curl -Lo /usr/local/bin/copilot https://github.com/aws/copilot-cli/releases/latest/download/copilot-darwin \
&& sudo chmod +x /usr/local/bin/copilot \
&& copilot --help
「Windows」の場合は、PowerShell を利用して、以下のコマンドを実行します。
PS C:\> New-Item -Path 'C:\copilot' -ItemType directory; `
Invoke-WebRequest -OutFile 'C:\copilot\copilot.exe' https://github.com/aws/copilot-cli/releases/latest/download/copilot-windows.exe
「AWS Copilot」のコンセプト
「AWS Copilot」のコンセプトとして、「Application (アプリケーション)」、「Environment(環境)」、「Service(サービス)」の3点があります。
それぞれのコンセプトについて、解説していきます。
「AWS Copilot」のコンセプト1:Application
「AWS Copilot」のコンセプト1として、「Application(アプリケーション)」があります。
具体的には、「アプリケーション」とはシステムの構成要素を「グルーピング」する仕組みやメカニズムを意味します。
例としては、「コンウェイの法則(※「システム設計は、組織構造を反映させたものになる」という概念)」に則して考えると、組織内に複数チームが存在する場合は、システムも複数の「Copilot アプリケーション」から構成されます。
組織が比較的小規模で、単一の開発チームのみでシステムを担当している場合は、単一、または複数サービスから構成される単一「Copilot アプリケーション」で整理可能です。
しかし、複数チームが各システムを担当し、チームの横断的なやり取りが少ない場合では、各開発チームが「Copilot アプリケーション」を1個担当するのが妥当となります。
「AWS Copilot」のコンセプト2:Environment
「AWS Copilot」のコンセプト2として、「Environment(環境)」があります。
具体的な「環境」とは、アプリケーションをデプロイする際の「ステージ(アプリケーションが動作する場所)」のことです。
例としては、アプリケーションをテストで確認する際には「QA(Quality Assurance)環境」にデプロイして実施します。
「QA環境」で想定通りにアプリケーションが動作することをテストで確認したら、次のステージの「本番環境」にアプリケーションをデプロイする、という流れになります。
「AWS Copilot」のコンセプト3:Service
「AWS Copilot」のコンセプト3としては、「Service(サービス)」があります。
ここでの具体的な「サービス」とは、あるコンテナ上で動作している「常駐型プロセス」のことです。
1個のアプリケーションは、1個以上のサービスから構成されています。つまり「モノリシック」なアーキテクチャの場合には、1個のアプリケーションに1個のサービス、「分散アーキテクチャ」の場合には、1個のアプリケーションは複数のサービスで構成されます。
AWS外部からアクセス可能なロードバランサーを持つ「website」サービス、サービスディスカバリを経由した内部通信による「API」サービス、キュー型ジョブの「background worker」サービスがある場合、これらをコンポーネントとしてまとめるとアプリケーションになります。
「AWS Copilot」のデプロイ方法
「Amazon ECS」アプリケーションを「AWS Copilot」を利用してデプロイする方法を紹介します。
前提条件として、AWSアカウントの設定と「AWS CLI」のインストールが完了していることとします。
デプロイ1:コマンドの使用
最初にコマンドを利用して、アプリケーションをデプロイします。
具体的には、次のコマンドを実行します。
git clone git@github.com:aws-samples/amazon-ecs-cli-sample-app.git demo-app && \
cd demo-app && \
copilot init --app demo \
--name api \
--type 'Load Balanced Web Service' \
--dockerfile './Dockerfile' \
--port 80 \
--deploy
デプロイ2:アプリケーションのデプロイ
次に、認証情報を設定した後、デモアプリのクローンを作成します。
具体的には、以下のコマンドを実行します。
aws configure
git clone git@github.com:aws-samples/amazon-ecs-cli-sample-app.git demo-app
デプロイ3:アプリケーションのセットアップ
続いて、必要なアプリケーションのセットアップを行っていきます。
具体的には、以下のコマンドを実行します。
copilot init
What would you like to name your application? [? for help]
以降も、インターフェースの画面の指示に沿ってセットアップを進めていきます。
「AWS Copilot」のユースケース
「AWS Copilot」のユースケースとしては、「CI/CD パイプライン」を自動的に構築し、コードを「Git リポジトリ」プッシュすることでデプロイする、「Amazon S3」 バケット、ストレージ、「NoSQL/SQL」のデータベースをセットアップする、等があります。
つまり「AWS Copilot」はすぐに実行できるサービスを数回のコマンド実行でデプロイできるようになります。
この「AWS Copilot」を活用して、コンテナサービスの管理の効率化を目指してみてはいかがでしょうか?