CI/CD
アプリケーションの開発フェーズにおける自動化を行い、開発チーム、運用チームに生じる問題を解消するためのソリューションです。
AWSのCodeシリーズは、この CI/CD を果たすための役割としてサービスを提供しています。
Code Commit (継続的インテグレーション)
- Code Commit はAWS上にプライベートな Git リポジトリをホストし、複数の開発者が共同で効率的に作業を行うために提供されたソース管理サービスです。
- 任意のIAMユーザーからソースコードをリポジトリに
push
し、プルリクエスト、コミットの機能を利用して、リポジトリのソースコードに対して変更管理を行う事が可能となり、AWS上でセキュリティを保全しながら共同開発が行えます。 - ブランチと呼ばれる、マスターの変更管理から派生した特定の開発工程を管理するための機能を作成する事が可能で、Masterブランチから分岐したブランチにより、開発者は不特定多数のソースコードに対して並行作業をする事が可能です。
- リポジトリのプッシュをトリガーにメールを通知させたり、ビルドの開始を
Code Pipeline
を使用せずに行えます。
Code Build (継続的インテグレーション)
- ソースコード(S3,CodeCommit,Gitサービス)をコンパイルし、テストの実行、デプロイ可能なパッケージの生成を行うサービスです。
- ビルド環境として生成される Docker Image、ECR リポジトリ、コンピュートリソース(Amazon Linux2、ubuntu) を選択し、
buildspec.yml
に記載された手順に沿ってビルド環境を生成していきます。 -
バッチビルド
を有効化して、同時ビルドと協調(逐次)ビルドを指定出来ます。 - ビルドしたファイルをS3にアップロードしたり、ビルド環境を Cloudwatch Logs へメトリクスおよびログを出力する事が可能です。また、通知ルールを設定して、SNSでビルド状況の通知を受けることも可能です。
- VPC内にCodeBuildを配置する事も可能で、テスト環境として DB にアクセスしたい要件を満たすためRDS等へのアクセスする事も可能です。
Code Deploy (継続的デプロイ)
- アプリケーションのデプロイを自動化するサービスです。
- EC2インスタンス、オンプレミスインスタンス、Lambda関数、ECS Fargateのうちデプロイ先を採択し、
デプロイグループ
を作成します。デプロイ先にはデプロイエージェント
を導入します。 - デプロイ設定により、任意のデプロイ方式を設定する事が可能で、LB を使用した
Blue/Green方式
、あるいはInplace方式
を採択する事も可能です。 -
appspec.yml
と呼ばれる deploy をするための仕様書を用いて、記述通りのdeploy 方式を行う事が出来ます。 - アプリケーションのソースコード、リビジョンは、S3,GitHubに配置し、
appspec.yml
と共にクライアントからデプロイが開始できます。 - デプロイが失敗、あるいは任意のしきい値を超過した場合
自動ロールバック
機能が動作し、以前のアプリケーションリビジョンの状態に戻すための手動ロールバック
機能が提供されています。
Code Pipeline (継続的デリバリー)
- Source Stage / Build Stage / Deploy Stage をそれぞれ定義し、定義されたサービスのオブジェクトに対してCI/CD のステップを自動化します。
- Source Stage では、開発者のインテグレーションにより発生した変更を
Cloudwatch Events
またはWebhook
にて検出します。 - 検出をトリガーに後続の Build Stage で定義されたサービスのアクションが実行されます。先述したようにビルド環境を生成し、テストを実施するサイクルを提供します。(省略可)
- ビルドが完了すると、Deploy Stage で定義したサービスに対してデプロイを自動で実施します。
Code Artifact
- 開発に利用される python,java,nodejs等のパッケージマネージャーをAWS にキャッシュしたり、プロキシとして使用する事で、ダウンロードする手間を最小限に抑えたり、アクセスに制御を掛ける事が可能です。
- Domain と呼ばれる後述のリポジトリを管理する定義を行い、ドメインの内部に複数のリポジトリを配置します。ドメインに対してJSON形式のポリシーを設けてアクセス制御を行う事が可能です。
- リポジトリは使用するパッケージを含みます。
アップストリームリポジトリ
と呼ばれる、パッケージマネージャとの外部接続の関係性、および一般リポジトリとの上下関係を持つリポジトリを定義する事が可能で、開発者は一般リポジトリとのアクセスを行う事で最新のパッケージマネージャをインターネットを介さずに入手出来ます。また、リポジトリにもポリシーが作成可能で、ここでアクセス制御を行う事が出来ます。
Code シリーズによるCI/CD の自動化
- 順番が前後する場合や、不要なフェーズを省略する事も可能かと思いますが、これら Code サービスを使用して CI/CD の全体の流れがAWS 上で実装出来るという便利なサービスです。