- この記事はMDCアドベントカレンダー6日目の記事です
##AWS Copilotって何?
- ECSを使ってコンテナアプリを動かしたい時、コンソールからECSのクラスターを作成するだけでも項目がたくさんあって面倒
- AWS Copilotを使うとコマンドでAWSが面倒な設定をやってくれます
- 今回は以下の公式ドキュメントを元にCopilotを使ってECSにコンテナをデプロイします
##前提
- AWSCLIがインストールされていること
- CLIの利用設定が終わっていること
- https://docs.aws.amazon.com/ja_jp/cli/latest/userguide/cli-configure-quickstart.html
- IAMでAPIKeyを発行して
aws configure
で設定する
1. Copilotインストール
# Macの場合はHomebrewが楽です
$ brew install aws/tap/copilot-cli
# WindowsだったりHomebrewが使えない時は直接ダウンロードします
$ curl -Lo /usr/local/bin/copilot https://github.com/aws/copilot-cli/releases/download/v0.1.0/copilot-darwin-v0.1.0 && chmod +x /usr/local/bin/copilot && copilot --help
# インストール確認
$ copilot --version
copilot version: v1.0.0
2. コンテナをECSにデプロイする
- Dockerfileを元にコンテナイメージを作成、ECSにデプロイします
- 今回はAWSが提供しているCopilotのサンプルアプリを使います
# サンプルアプリをclone
$ git clone https://github.com/aws-samples/aws-copilot-sample-service copilot-sample
$ cd copilot-sample
# コンテナをECSにデプロイ
$ copilot init
# 以下選択肢が出てきます
# アーキテクチャのタイプ選択
- Which workload type best represents your architecture?
> Load Balanced Web Service
Backend Service
Scheduled Job
# アプリ名入力
- What do you want to name this Load Balanced Web Service?
# Dockerfileの選択
- Which Dockerfile would you like to use for machida-app?
> ./Dockerfile (Copilotが自動で検出してくれる)
Enter custom path for your Dockerfile (Dockerfileのフルパスを自分で指定)
Use an existing image instead (Dockerimageを自分で指定)
# テスト環境へのデプロイ
All right, youre all set for local development.
Would you like to deploy a test environment? (y/N)
# Dockerイメージのビルド後、デプロイが走ります
# CloudFormation経由でECSのクラスターを作成され、コンテナイメージをデプロイします
# デプロイ成功するとアプリケーションへのURLが展開されます
✔ Deployed xxxxxx, you can access it at http://xxxxxxxx
- URLにアクセスするとサンプル画面が表示されます
##Copilotの概念
- 大きく3つの要素で構成されています。Environment > Application > Service という包含関係にあります。Applicationが実質ECSのクラスターになるので注意が必要です
- Environment -> ECSClusterを稼働させる空間
- Application -> ECSClusterに該当
- Service -> ECSCluster上で稼働するそれぞれのアプリケーション(≒ ECS Service)
-
copilot init
で作られたAWSリソースやファイル群の説明については以下が非常にわかりやすいです - 従来であれば上記のリソースを作成しないといけないが、Copilotコマンド一つで作成できました
##Copilotコマンド
# Applicationの情報取得
$ copilot app show
# Application削除
$ copilot app delete
# Serviceの情報取得(アプリケーションへのURLも記載されています)
$ copilot svc show
# Serviceの状態確認
$ copilot svc status
# Environmentの作成(環境をテスト・本番と複数面持ちたい時に利用します)
$ copilot env init
3. CodePipelineを作成してCICDっぽくする
- GitHubへのソースPushをトリガーにデプロイをするPipelineを作成します
- GitHubで新規リポジトリを作成し、ソースを自分のリポジトリにPushします
# 初回コミット
$ rm -rf .git
$ git remote add origin https://github.com/methimo/xxxxxx.git
$ git branch -M main
$ git push -u origin main
-
Pipeline作成にはGitHubアクセストークンが必要なので取得します
-
Generate New Token
-> 適当な名前を入力、全部の権限を入れて作成します -
表示されるトークンをメモっておくこと
-
Pipelineを作成します
# パイプラインの作成
$ copilot pipeline init
# 以下選択肢が出てきます
- Would you like to add an environment to your pipeline? (y/N)
- Which environment would you like to add to your pipeline?
> test
- Which GitHub repository would you like to use for your service?
> https://github.com/methimo/xxxxxxx
> アクセストークンを入力
# パイプラインを作成するための設定ファイル(copilot/pipeline.yml)が作成されます
# pipeline.ymlの内容からパイプラインを生成します
$ copilot pipeline update
# パイプラインが作成され、デプロイが始まります
# 以下で実行状況を確認できます(10分程かかります)
$ copilot pipeline status
- これでパイプラインの作成は完了です
- 試しにソースを編集してPushしてみましょう
$ vim index.html
$ git add .
$ git commit -m "message"
$ git push origin main
- しばらくするとパイプラインが走ります
-
copilot pipeline status
で進捗状況を確認できます - 完了したら先ほどアクセスしたURLに再度アクセスします
- 修正したソースでコンテナアプリケーションが起動できました
##まとめ
- ECSの実行環境やアプリケーションデプロイをCopilotコマンドでさっくり作ることができました
- パイプラインをコマンドで作成することもできます
- CopilotでどこまでECSの設定をカスタマイズできるかは不明ですが、少なくともさっくりECSを使ってみたい場合には最適のツールです
##その他(雑談)
- GitHubの仕様変更でデフォルトブランチがmainに名前変更になったけど癖で
git push origin master
してしまう - 記事書くためにググったら普段プレイしているスマホゲームがECS構成で動いていることを偶然知りました
- 自分が利用しているサービスが裏でどんな動きをしているのか意識すると楽しいですね
##出典
ありがとうございました。