ECS on Fargate を AWS Copilot で構築してみる
はじめに
AWS Copilot で ECS on Fargate 環境を構築してみました。
コマンドでどこまで構築でき、簡単にカスタマイズできるのか試してみた記録です。
やること
- AWS Copilotを使用する環境を Cloud9 で準備する。
- ECS の Webアプリ構成を AWS Copilot のデフォルト設定で一通り構築する。
- デフォルト設定をカスタマイズし、再デプロイする。
→ ECS をプライベートサブネットに配置する。 - コンテナに接続する。
【2.のデフォルトの構成図】
Services - AWS Copilot CLI
環境準備:Cloud9の設定
- AWS Copilot CLI のインストール
sudo curl -Lo /usr/local/bin/copilot https://github.com/aws/copilot-cli/releases/latest/download/copilot-linux \
&& sudo chmod +x /usr/local/bin/copilot \
&& copilot --help
私がcopilotをインストールした際のlatest versionはv1.34.0
です。
- IAMロールの変更
[左上の雲マーク > preferences > AWS settings] より、credential をオフにしてCloud9のデフォルトの権限設定を無効化します。
次に、IAM操作ができる権限AdministratorAccess
をもつロールを作成し、Cloud9(EC2)に付与します。
AWS Copilotの基本概念
Copilot CLIでは以下の3つの基本概念があります。
- Enviroment ・・・ テスト環境、号口環境などの環境の単位。
- Service ・・・ 各環境で動かすフロントエンド、バックエンドなどのサービスの単位。
- Application ・・・ Environment、Serviceをとりまとめる概念。
Environment - AWS Copilot CLI
おおまかな構築の流れとしては、Application → Environment → Serviceの作成と順にデプロイしていくことになります。
Copilot CLI でコンテナをデプロイする流れ
主に5つのコマンドでコンテナをデプロイできます。各コマンドで対話形式で設定値を記載していきます。
-
copilot app init
:Applicationの初期化 -
copilot env init
:Environmentの設定の初期化 -
copilot env deploy
:Environmentに対応するクラスタなどの作成 -
copilot svc init
:Serviceの設定の初期化 -
copilot svc deploy
:Serviceをデプロイ
copilot <app/env/svc> show
コマンドで、現在のアプリケーションのデプロイ状況を確認できます。
1. copilot app init
:Applicationの初期化
Application名を定義します。
copilot/.workspace
ファイルが生成されており、初期化時の設定項目が記載されています。
2. copilot env init
:Environmentの設定の初期化
copilot/environments/{Environment name}/manifest.yml
ファイルが作成されます。
生成されたmanifest.ymlファイルを編集してEnvironmentの設定変更が可能です。
下記の設定値でデプロイしたmanifest.ymlファイルになります。
- Enviroment name : test
-
Default environment configulation? : Yes, use default.
3. copilot env deploy
:Environmentに対応するクラスタなどの作成
2.の手順でinitした{Environment}環境用のネットワーク関連のリソースや、ECSのクラスターが作られます。
4. copilot svc init
:Serviceの設定の初期化
copilotで作成できるServiceパターンとしては下記の5つが選択可能です。
参考:Services - AWS Copilot CLI
Serviceの内容を変更する場合は、生成されるcopilot/{Service name}/manifest.yml
ファイルにて変更が可能です。下記はLoad Balanced Web Serviceを選択した際のmanifest.ymlファイルになります。
5. copilot svc deploy
:Serviceをデプロイ
イメージのビルド→ ECR に push 後、ECS on Fargateに必要なリソースがデプロイされていきました。
下部に表示されるURLから、アプリケーションへアクセスできました!
環境を複数作成するとき
環境をtest/prod環境などのように複数作成する場合は、【手順2. copilot env init
:Environmentの設定の初期化】以降の同様の手順で作成できます。
コンテナにログインする
copilot/{Service name}/manifest.yml
ファイルの内容が下記設定値になっていれば、ECS Execでコンテナへの接続がcopilot svc exec
コマンドで可能です。
exec: true # Enable running commands in your container.
初回接続時は接続用のプラグインをインストールするか対話型で選択画面が表示されますが、次回以降は問題なく接続できます。
top
,ls
,ps
コマンドで試してみました。
manifest.ymlをいじってみる
ECSをプライベートサブネットに配置しなおすため、copilot/{Service name}/manifest.yml
ファイルを修正し、copilot svc deploy
コマンドでデプロイし直してみます。
network:
vpc:
placement: private # タスクをプライベートサブネットに配置する
2行の変更でECSをパブリックサブネット内からプライベートサブネット内へ移動させ、ECRへのアクセスをNat Gateway経由にしてくれるなど、よしなにやってくれました。
さいごに
CopilotでCI/CD環境も作成してみた記事も宜しければご覧ください🐱
えみり〜でした|ωΦ)ฅ
Discussion