LoginSignup
4
1

More than 1 year has passed since last update.

AWS Codeサービスを利用したCI/CDパイプラインの仕組み(CodePipeline・CodeCommit・CodeBuild・CodeDeploy)

Last updated at Posted at 2023-04-10

内容

業務でAWSのCodeサービス(CodePipeline・CodeCommit・CodeBuild・CodeDeploy)によるCI/CDパイプラインの構築を実施したので、知識のアウトプットのため本記事をまとめます。
デプロイはECS Fargateへのデプロイを想定しています。

目次

CI/CDとは

CI(継続的インテグレーション)・CD(継続的デリバリー)とは、提供するソフトウェアのアップデート作業を自動化し、アプリケーションのプロセスを向上するための手段のこと。
アップデート作業には「テスト」「ビルド」「デプロイ」などの手順があり、手動でこれを実施する場合、人為的なミスが生じたり、知識のある人員が退職などで離れてしまうなどといったリスクが生じる。
CI/CDパイプラインを構築し自動化を実現することで、このような人為的なミスや属人化を軽減する事ができる。

AWS Codeサービスの説明

AWSでCI/CDパイプラインを構築するのに使用するサービスとして、「CodePipeline」「CodeCommit」「CodeBuild」「CodeDeploy」があります。
これらの「Codeシリーズ」を利用することでCI/CDパイプラインを比較的簡単に実現できる。

CodeCommit

Gitリポジトリをホストする、スケーラブルなマネージド型ソース管理サービス。
スタンダードなGitツールが利用可能。

CodeBuild

フルマネージド型のビルドサービス。
ソースコードのコンパイル、テストの実行、パッケージの生成などを実施。

CodeDeploy

EC2やECS Fargateなどへのアプリケーションのデプロイを自動化するデプロイサービス。
Blue/Greenデプロイや自動ロールバックなど、複雑なアップデートに対処。

CodePipeline

アプリケーションのアップデートを素早く信頼できるアップデートを可能にする継続的デリバリーサービス。
ソフトウェアリリースプロセスの見える化が可能。

CI/CDパイプラインの流れ

全体像は以下のようなフローとなる。
スクリーンショット 2023-04-10 16.06.16.png

① CodePipeline起動

  • CodeCommitへプッシュ・マージによりブランチが変更されるとCloudWatchが検知し、CodePipelineを走らせる

image.png

② Sourceステージ

  • CodePipelineのソースステージでCodeCommitからソースコードを取得
  • ソースアーティファクトとしてS3へ格納
    • ソースアーティファクトが格納されるS3バケット:codepipeline-[リージョン]-[数字]/[パイプライン名]/[SorceArtifact名]/

image.png

③ Buildステージ

  • ②のソースステージで出力したソースアーティファクトを元に、アプリケーションのコンパイルやテストを実行
  • ビルドされたソースコードを使ってdocker-compose.yml(Dockerfile)からDockerイメージを作成
  • DockerイメージをECRへプッシュ
  • ビルドアーティファクトとして以下のファイルをS3へ出力
    • appspec.yml
    • taskdef.json
    • imagedefinitions.json(ECS Blue/Greenデプロイの場合はimageDetail.json
    • ビルドアーティファクトが格納されるS3のバケット:codepipeline-[リージョン]-[数字]/[パイプライン名]/[BuildArtifact名]/

image.png

④ Deployステージ

  • ③で出力したビルドアーティファクトのappspec.yml(デプロイ定義ファイル)とtaskdef.json(タスク定義ファイル)を元に、ECRにプッシュされたDockerイメージをECS Fargateにデプロイ、ECSタスクを起動(コンテナを起動)

image.png

最後に

以上がAWS Codeサービスを用いたCI/CDパイプラインの仕組みです。
今回はECS Fargateの例を用いての説明のため、ECS Fargateの知識がない方にはデプロイフェーズのイメージが付きづらい点もあったかと思いますが、全体的な仕組みとしてはEC2へのデプロイにおいてもほぼ同じようなイメージかと思います。

ここまで読んでいただきありがとうございました。

4
1
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
4
1