🔰

ECS on Fargate を AWS Copilot で構築してみる

2024/08/13に公開

はじめに

AWS Copilot で ECS on Fargate 環境を構築してみました。
コマンドでどこまで構築でき、簡単にカスタマイズできるのか試してみた記録です。

やること

  1. AWS Copilotを使用する環境を Cloud9 で準備する。
  2. ECS の Webアプリ構成を AWS Copilot のデフォルト設定で一通り構築する。
  3. デフォルト設定をカスタマイズし、再デプロイする。
    → ECS をプライベートサブネットに配置する。
  4. コンテナに接続する。

【2.のデフォルトの構成図】
Services - AWS Copilot CLI

環境準備:Cloud9の設定

  1. 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です。

  1. 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つのコマンドでコンテナをデプロイできます。各コマンドで対話形式で設定値を記載していきます。

  1. copilot app init:Applicationの初期化
  2. copilot env init:Environmentの設定の初期化
  3. copilot env deploy:Environmentに対応するクラスタなどの作成
  4. copilot svc init:Serviceの設定の初期化
  5. 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環境も作成してみた記事も宜しければご覧ください🐱
https://zenn.dev/azunyan/articles/a0c71059b70a7c
どなたかの参考になれば幸いです。
えみり〜でした|ωΦ)ฅ

参考

Discussion