SMARTCAMP Engineer Blog

スマートキャンプ株式会社(SMARTCAMP Co., Ltd.)のエンジニアブログです。業務で取り入れた新しい技術や試行錯誤を知見として共有していきます。

AWS CopilotでAmazon ECSの環境とCI/CDの超簡単構築を試してみた

スマートキャンプ、エンジニアの入山です。

突然ですが、みなさんはAmazon ECSを利用したことはありますか?

コンテナで開発したアプリケーションをフルマネージドで運用してくれるECSですが、その環境構築を簡単に一括で行ってくれるサービスAWS Copilotが先日発表されました!

AWS Copilotでは、ECSの環境構築だけでなく、GitHubと連携したCI/CDの構築もできるようになっており、AWSやCI/CDの知識や知見がなくとも手軽にコンテナでのサービス立ち上げができます。

AWS Copilotを利用したECSの環境構築については、AWS公式のブログで詳しく紹介されていたので、今回はAWS Copilotを使ったGitHubと連携したCI/CDパイプライン構築を中心に紹介したいと思います!

aws.amazon.com

AWS Copilot とは

Amazon ECSでコンテナ化されたアプリケーションの開発、リリース、操作を支援するためのCLIツールです。

AWS Copilotは、単一のコマンドで、タスク定義、イメージリポジトリ、およびロードバランサーやデプロイパイプラインなどの AWS リソースを含め、Amazon ECS および AWS Fargate でサービスを実行するために必要なすべてのインフラストラクチャとアーティファクトを作成します。(公式サイトから引用)

つまり、何も存在しないAWS環境上に、VPCやサブネットなどの基礎的なリソースやECS運用に必要なリソースなどを全て作成し、手元に用意したDockerfileに従ったアプリケーションのイメージビルド、ECS上へのデプロイ、更にはLBを作成して外部公開する所まで、何から何まで自動でやってくれる便利ツールです。

AWS CopilotでのECS環境構築

AWS Copilotでは、copilot initを実行し、対話形式に以下の情報を入力するだけで、Amazon ECSを運用するために必要な全てのリソースが自動で作成されます。

  • デプロイするアプリケーションの名前
  • アプリケーションのサービスタイプ
  • デプロイするコンテナのDockerfile

この記事では、Copilotのセットアップやcopilot initの詳細については、割愛します。 冒頭で紹介したAWSの公式ブログに詳しく紹介されているので、そちらを参考にしていただければと思います!

AWS CopilotでのCI/CD

AWS Copilotは、ECS実行環境の構築だけでなく、CI/CDの構築も簡単に行うことができます。

現時点で、以下構成のCI/CDパイプラインを構築することができます。

  1. GitHubの設定したブランチへのPushをhookし、AWS CodePipeline上のパイプラインを実行
  2. AWS CodeBuildでGitHubからPullしたソースコードをビルドし、イメージをAmazon ECRのリポジトリへPush
  3. PushされたイメージをAmazon ECS(Fargate)にデプロイ

CodeBuildの設定やCodePipelineの設定は、Copilotによってマニフェストファイルが自動生成された後にカスタマイズ可能なので、柔軟にビルド仕様やデプロイフローを設定することもできそうです。

また、デプロイ先の環境(test、productionなど)も設定することができるようになっているため、異なる環境の構築も簡単に行なうことができます。

GitHubへのPushをトリガーとしたCI/CD設定

GitHubリポジトリのmasterブランチへのPushをトリガーに、自動でCI/CDが実行されるように設定していきます。

ECS環境の構築と同様に、以下のコマンド1つでCI/CDパイプラインの設定ができます。

$ copilot pipeline init

こちらも対話形式で、以下の項目を設定していきます。

  • CI/CDの対象とする環境の種別(複数環境へのデプロイや順序も指定可能)
  • GitHubのリポジトリ
  • GitHubへのPushをhookするためのアクセストークン

GitHubのアクセストークンは、repoadmin:repo_hook の権限が必要となります。 以下を参考に設定します。

docs.github.com

上記項目の入力が完了すると、CodeBuildとCodePipelineのマニフェストファイルが自動生成され、GitHubへのPushをトリガーとしたCI/CDパイプラインの構築が完了します。

実際にコマンドを実行したログが以下になるのですが、これだけでCI/CDが構築出来てしまうのでかなり衝撃的です…!

f:id:mt_iri:20200716142329p:plain

動作確認

GitHubリポジトリのmasterブランチに変更をPushして、実際に実行されたCI/CDパイプラインが以下となります。

f:id:mt_iri:20200716143348p:plain

GitHubへのPushをトリガーに以下の3つのステージが実行され、ECSへ新しいバージョンのアプリケーションがデプロイされています!

  1. GitHubからソースコードのPull
  2. DockerイメージのBuild
  3. ECSへのデプロイ

まとめ

今回は、AWS Copilotを利用して、ECSの環境構築とGitHubをトリガーとしたCI/CDパイプラインの構築を紹介しました。

環境構築とCI/CDの構築を合わせても、たった2コマンドの10分程でECS上でのサービス起動まで出来てしまう衝撃的なサービスですが、将来的には更にS3バケットやデータベース、ストレージのセットアップなども出来るようになるようです!

AWS Copilotを使うことで、ローカルのDockerで開発したプロトタイプなどを誰でも簡単にECS上に立ち上げることが可能になるので、上手く運用することで様々な用途で利用できそうです。みなさんも是非一度試してみてください!