はじめまして。この記事は、私が執筆に携わらせていただきました、ハンズオン本をベースにCI/CDについて記載させていただいたものとなります。
なお、記載内容は所属会社を代表したものではなく、私の個人的な意見ということをご了承ください。
はじめに
パイプラインを当たり前のように構築できるようになることを目指して記載しております。
CI/CDとは
AWSに関係なく一般的にソフトウェア開発で使われる用語です。
下記参考:
https://it-trend.jp/cicd_tool/article/937-874
CI(継続的インテグレーション)
→ソースコードの修正とテストを自動化する。
CD(継続的デリバリー)
→開発製品と検証環境や、製品が実際に動作する本番環境との連携を自動化する。
CD(継続的デプロイ)
→修正したコードを一括で反映、展開させることを自動化する。
補足事項として、デリバリーとデプロイは下記の点で違います。
・デリバリーは人の手が残る開発プロセスの自動化
・デプロイは人の手が介在しない開発プロセスの自動化
ゆえに多くの人がイメージする開発プロセスの自動化は、CD(継続的デプロイ)となります。
CI/CDを推奨する背景
もし、CI/CDがなかった場合は以下のことが考えられます。AWSでコンテナをデプロイするケースで考えてみましょう。
1、新しくブランチをチェックアウトする。
2、Dockerfileの変更をコードリポジトリにコミット
3、Dockerfileの変更をコードリポジトリにプッシュ
4、レビュー
5、Lint
6、フォーマット
7、イメージのビルド
8、コンテナレジストリの作成
9、イメージをコンテナレジストリにプッシュ
10、コンテナレジストリからイメージをpull
11、コンテナ基盤にデプロイ
AWSの場合、ECRを利用します。ECRは異なるアカウントで同じリポジトリを設定することができます。そのため、プロファイル名を間違えてプッシュしてしまうこともあります。
デプロイするまでにはいくつかの工程を踏む必要があり、その工程を踏んだうえでソフトウェアの品質を確保する必要があります。
利益には直結しないが必要な作業をトイルと言います。これらの工程を人が作業する場合、ミスがつきもので、そのミスによってデプロイ作業に遅延が発生することが考えられます。
そこでCI/CDを導入することによってトイルを除去するために工程を自動化しようというのがCI/CDを推奨する背景となります。
AWSでCI/CDを実現するためには?
AWSでは下記のサービスが主に使われています。
AWS CodeCommit・・・コードを保管しておくGitリポジトリサービスを提供する。
AWS CodeBuild・・・コードをビルドする環境を提供する。
AWS CodeDeploy・・・実際に動作する環境にコードを自動でプロイする。
AWS CodePipeline・・・Codeシリーズのサービスの統括と他のAWSサービス、サードパーティツールとの連携を提供する。
AWS CodeStar・・・他のコードプロバイダとの連携、プロジェクト環境を提供する。
AWS CodeArtifact・・・ソフトウェアパッケージをAWS上にキャッシュして保存するサービス。
Amazon CodeGuru・・・コードのレビューやパフォーマンスを計測して推奨事項を回答するサービス。
Amazon CodeCatalyst・・・2022年12月のre:Inventに登場した統合開発サービス。
Amazon CodeWisperer・・・LLM(大規模言語モデル)を採用したAIコード支援サービス。
なお、AWSのみでCI/CDを実現するためには、AWS CodeCommit・AWS CodeBuild・AWS CodeDeployの3つのサービスをAWS CodePipelineで連携して自動化することが可能です。
具体的な手順は参考書籍でハンズオン形式で記載されていますのでそちらをご参照ください。
参考書籍
私も執筆に携わらせていただきました。
下記の書籍では初級者からでもCI/CDの構築が出来るように丁寧に説明されています。
「CodeシリーズでハッピーなCI/CDを構築しよう【AWSハンズオン虎の巻シリーズ】: 知識がなくても手を動かしながらCI/CDをAWS上に実装できる一冊!」
https://amzn.asia/d/aHqx6vF