📈

【図解】AWS ECR / ECSとDockerを活用した効果的なCI/CDフロー:GitHub Actionsを添えて〜

2024/05/13に公開

はじめに

こんにちは、Takeです。都内の自社開発企業でエンジニアとして働いています。

本記事では、AWS ECR / ECSとDocker、そしてGitHub Actionsを活用したCI/CDフローの全体像を図解します。

具体的な構築手順には触れず、これらの技術がどのように組み合わせられているかに着目し視覚的に解説していきます。

主な使用技術

  • VSCode:コーディング用のエディタ
  • GitHub Actions(GA):コード変更を自動でビルド、テストするCI/CDツール
  • Docker:アプリをコンテナ化するツール
  • AWS
    • ECR (Elastic Container Registry):Dockerコンテナイメージを管理するサービス
    • ECS (Elastic Container Service):コンテナ管理とオーケストレーションサービス

全体の流れ

  1. 開発者がVSCodeでコードを変更し、GitHubにpushする。
  2. GAがpushをトリガーにビルドやテストを実行し、Dockerを使用してコンテナイメージを作成。
  3. このイメージはAWS ECRに保存されてAWS ECSでデプロイされる。

パートごとに解説

コードがpushされてからGitHub Actions(GA)まで

以下のコマンドでローカルブランチの変更をリモートのGitHubリポジトリにpushする。

git add ~
git commit -m "commit message"
git push origin HEAD

すると、コードはGAに送られて自動的にビルドやテストが行われる。この際、Dockerがコンテナイメージを作成する。

GAからAWS ECRへ

ビルドとテストが成功したDockerイメージは、AWS ECR にアップロードされる。

補足として、ECR(Elastic Container Registry)はAWSのマネージドコンテナレジストリーサービスであるといわれてもパッとしないので、ECRの主な役割はDockerイメージの管理を行うサービスと覚えておこう。

具体的には、IAMを使用したアクセス制御やプライベートネットワーク接続に対応し、セキュリティの高い環境でコンテナイメージを管理できるメリットがある。

また、ECSとの関係では、ECSがECRからコンテナイメージを直接取得し、オーケストレーションとスケーリングを管理する連携プレーも魅力的だ。

これらの一連のプロセスにより、開発からデプロイまでのワークフローをセキュアかつオートメーション化して効率的な保守運用が可能となる。

AWS ECRからECSへ

続いてECRに保存されたDockerイメージは、ECSによってpullされて、必要な設定や初期化を行うentrypoint.shスクリプトが実行される。

pullとは、「ECS」がECRのコンテナレジストリからコンテナイメージを取得するプロセスを指す。具体的には、ECSがECRに保存されているコンテナイメージを取得しコンテナを起動する操作を行う。これにより、正確なバージョンのもとアプリケーションを管理できる。

pullについて着目👀

ECSからアプリケーション反映まで

上記では主に「Kick」の概念に着目する。

ECSでコンテナが起動するとアプリケーションが稼働し始める。ここで「kick」というプロセスが生じることがある。ECSにおいては特定のタスクが実行されたことを指し示す際に用いられることがある。(誤っていたらお手数ですがコメント頂けたら幸いです、kickを使ってみたかった⚽️)

具体的には、ECSがタスク定義に従って新しいタスクインスタンスを起動する行為、すなわちコンテナイメージを実際のコンテナとしてデプロイしてアプリケーションを稼働させる過程を指す。

このプロセスを通じて、ECSは指定された設定に基づき自動的にコンテナを配置しアプリケーションが予定通りに動作するよう管理する。

kickについて

https://www.m3tech.blog/entry/2020/12/23/090444

参考

https://zenn.dev/praha/articles/9e561bdaac1d23

https://zenn.dev/suzuki_hoge/books/2022-03-docker-practice-8ae36c33424b59

https://dev.classmethod.jp/articles/container-docker-and-ecs-for-beginner-jp/

https://dev.classmethod.jp/articles/re-introduction-2022-ecr/

https://excalidraw.com/

最後に

ここまで読んでいただきありがとうございました!
今回の記事が良かったと思ったらぜひ「いいね」を押していただけると嬉しいです 🎉

noteでも記事を執筆していますので、ぜひチェックしてみてください。
https://note.com/take_lifelog/n/n58df7ce7af6f

他にもこのようなことについて記載しているのでお読みいただければ幸いです。

https://zenn.dev/take_tech/articles/275e5f4242973d

https://zenn.dev/take_tech/articles/374817f256ec9d

最後までお読みいただき、誠にありがとうございました!

Discussion