6
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

AWS Copilotを使ってECS実行環境を高速に構築する

Last updated at Posted at 2020-12-05

##AWS Copilotって何?

  • ECSを使ってコンテナアプリを動かしたい時、コンソールからECSのクラスターを作成するだけでも項目がたくさんあって面倒
  • AWS Copilotを使うとコマンドでAWSが面倒な設定をやってくれます
  • 今回は以下の公式ドキュメントを元にCopilotを使ってECSにコンテナをデプロイします

##前提

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アクセストークンが必要なので取得します

  • https://github.com/settings/tokens/

  • 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構成で動いていることを偶然知りました
  • 自分が利用しているサービスが裏でどんな動きをしているのか意識すると楽しいですね

##出典

ありがとうございました。

6
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?