LoginSignup
2
6

More than 1 year has passed since last update.

CI/CD

アプリケーションの開発フェーズにおける自動化を行い、開発チーム、運用チームに生じる問題を解消するためのソリューションです。
AWSのCodeシリーズは、この CI/CD を果たすための役割としてサービスを提供しています。

Code Commit (継続的インテグレーション)

  • Code Commit はAWS上にプライベートな Git リポジトリをホストし、複数の開発者が共同で効率的に作業を行うために提供されたソース管理サービスです。
  • 任意のIAMユーザーからソースコードをリポジトリにpushし、プルリクエスト、コミットの機能を利用して、リポジトリのソースコードに対して変更管理を行う事が可能となり、AWS上でセキュリティを保全しながら共同開発が行えます。
  • ブランチと呼ばれる、マスターの変更管理から派生した特定の開発工程を管理するための機能を作成する事が可能で、Masterブランチから分岐したブランチにより、開発者は不特定多数のソースコードに対して並行作業をする事が可能です。
  • リポジトリのプッシュをトリガーにメールを通知させたり、ビルドの開始を Code Pipeline を使用せずに行えます。

image.png

Code Build (継続的インテグレーション)

  • ソースコード(S3,CodeCommit,Gitサービス)をコンパイルし、テストの実行、デプロイ可能なパッケージの生成を行うサービスです。
  • ビルド環境として生成される Docker Image、ECR リポジトリ、コンピュートリソース(Amazon Linux2、ubuntu) を選択し、buildspec.yml に記載された手順に沿ってビルド環境を生成していきます。
  • バッチビルドを有効化して、同時ビルドと協調(逐次)ビルドを指定出来ます。
  • ビルドしたファイルをS3にアップロードしたり、ビルド環境を Cloudwatch Logs へメトリクスおよびログを出力する事が可能です。また、通知ルールを設定して、SNSでビルド状況の通知を受けることも可能です。
  • VPC内にCodeBuildを配置する事も可能で、テスト環境として DB にアクセスしたい要件を満たすためRDS等へのアクセスする事も可能です。

image.png

Code Deploy (継続的デプロイ)

  • アプリケーションのデプロイを自動化するサービスです。
  • EC2インスタンス、オンプレミスインスタンス、Lambda関数、ECS Fargateのうちデプロイ先を採択し、デプロイグループを作成します。デプロイ先にはデプロイエージェントを導入します。
  • デプロイ設定により、任意のデプロイ方式を設定する事が可能で、LB を使用した Blue/Green方式、あるいは Inplace方式を採択する事も可能です。
  • appspec.yml と呼ばれる deploy をするための仕様書を用いて、記述通りのdeploy 方式を行う事が出来ます。
  • アプリケーションのソースコード、リビジョンは、S3,GitHubに配置し、appspec.yml と共にクライアントからデプロイが開始できます。
  • デプロイが失敗、あるいは任意のしきい値を超過した場合自動ロールバック機能が動作し、以前のアプリケーションリビジョンの状態に戻すための手動ロールバック機能が提供されています。

image.png

Code Pipeline (継続的デリバリー)

  • Source Stage / Build Stage / Deploy Stage をそれぞれ定義し、定義されたサービスのオブジェクトに対してCI/CD のステップを自動化します。
  • Source Stage では、開発者のインテグレーションにより発生した変更をCloudwatch Events またはWebhookにて検出します。
  • 検出をトリガーに後続の Build Stage で定義されたサービスのアクションが実行されます。先述したようにビルド環境を生成し、テストを実施するサイクルを提供します。(省略可)
  • ビルドが完了すると、Deploy Stage で定義したサービスに対してデプロイを自動で実施します。

image.png

Code Artifact

  • 開発に利用される python,java,nodejs等のパッケージマネージャーをAWS にキャッシュしたり、プロキシとして使用する事で、ダウンロードする手間を最小限に抑えたり、アクセスに制御を掛ける事が可能です。
  • Domain と呼ばれる後述のリポジトリを管理する定義を行い、ドメインの内部に複数のリポジトリを配置します。ドメインに対してJSON形式のポリシーを設けてアクセス制御を行う事が可能です。
  • リポジトリは使用するパッケージを含みます。アップストリームリポジトリと呼ばれる、パッケージマネージャとの外部接続の関係性、および一般リポジトリとの上下関係を持つリポジトリを定義する事が可能で、開発者は一般リポジトリとのアクセスを行う事で最新のパッケージマネージャをインターネットを介さずに入手出来ます。また、リポジトリにもポリシーが作成可能で、ここでアクセス制御を行う事が出来ます。

image.png

Code シリーズによるCI/CD の自動化

  • 順番が前後する場合や、不要なフェーズを省略する事も可能かと思いますが、これら Code サービスを使用して CI/CD の全体の流れがAWS 上で実装出来るという便利なサービスです。

image.png

2
6
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
2
6