変更要約: in-scopeサービス網羅(軸B): s1にCodeArtifact/CloudShell、s3にAmplifyの定義・役割・選択基準を追記。
4.1CI/CD パイプライン
CodePipeline によるソース→ビルド→テスト→デプロイの自動化、CodeBuild(ビルド/テスト)と CodeDeploy(デプロイ)の役割、buildspec といった CI/CD の基礎を理解します。DVA-C02 の「デプロイ」の中心です。
コードの変更を自動でビルド・テスト・デプロイする仕組みが CI/CD です。AWS では CodePipeline が全体を編成し、各段階を専用サービスが担います。
4.1.1パイプラインの段階
- CodePipeline:ソース→ビルド→テスト→デプロイの段階全体を編成する。
- CodeBuild:ソースをビルド/テストする。手順は buildspec.yml に記述する。
- CodeDeploy:EC2/オンプレ/Lambda/ECS へデプロイする。手順は appspec に記述。
- CodeCommit は Git リポジトリ(外部 Git も可)。コミットがパイプラインを起動する。※CodeCommit は 2024 年 7 月以降 新規顧客の受付を終了(既存は継続)。新規は GitHub 等+CodeConnections が一般的。
「全体の編成=CodePipeline」「ビルド/テスト手順=CodeBuild の buildspec.yml」「デプロイ手順=CodeDeploy の appspec」 は DVA で頻出です。役割の取り違えに注意しましょう。
CI/CD の肝は「役割の切り分け」です。CodePipeline はステージ(ソース→ビルド→テスト→デプロイ)を編成するだけで、実際の処理は各サービスに委譲します。ビルドとテストは CodeBuild が buildspec.yml の手順(install/pre_build/build/post_build フェーズ)で実行し、生成物(アーティファクト)を S3 に置いて次ステージへ渡します。デプロイは CodeDeploy が appspec の指示(どのファイルをどこへ・フック処理)で行います。各ステージ間はアーティファクトで連携し、承認アクションを挟めば手動承認を要求できます。ソースには CodeCommit のほか GitHub などの外部 Git も使え、コミットや Pull Request が トリガー となってパイプラインが自動起動します。失敗したステージで止まる(=不良コードが本番に届かない)のが CI/CD の安全性です。
| 段階 | 担当サービス | 定義ファイル |
|---|---|---|
| 全体の編成 | CodePipeline | (パイプライン定義) |
| ビルド/テスト | CodeBuild | buildspec.yml |
| デプロイ | CodeDeploy | appspec.yml |
| ソース管理 | CodeCommit / 外部 Git | (リポジトリ) |
CodeBuild をもう少し掘り下げます。ビルドは隔離されたコンテナで実行され、実行環境(イメージ・コンピュートサイズ)や環境変数を指定できます。パスワードや API キーは平文の環境変数に置かず、Secrets Manager / Parameter Store から参照します(前章のシークレット管理と一貫)。依存関係のダウンロードを短縮するキャッシュ(S3 やローカル)や、複数フェーズの並列実行、テスト結果レポートにも対応します。CodePipeline では1つのステージに複数アクションを置いて並列実行でき、別リージョン/別アカウントへのデプロイ(クロスアカウント)も組めます。ソース変更の検知は、ポーリングよりWebhook/イベント駆動(EventBridge)が推奨で、無駄なくパイプラインを起動します。ビルド成果物やキャッシュ、アーティファクトの保管先は基本的に S3 です。
シナリオ:本番反映前に手動承認を入れたい。 ソース(CodeCommit)→ビルド/テスト(CodeBuild の buildspec.yml)の後に CodePipeline の承認アクションを挟み、責任者が承認したら CodeDeploy が本番へ。テストが失敗すればパイプラインはそこで停止し、不良ビルドは本番に届きません。
Q. buildspec と appspec の違いは? buildspec は CodeBuild のビルド/テスト手順、appspec は CodeDeploy のデプロイ手順。Q. ステージ間はどう連携? アーティファクト(S3)で受け渡す。Q. 外部 GitHub は使える? はい、ソースステージで接続できる。
混同に注意:
①buildspec.yml=CodeBuild、appspec=CodeDeploy——取り違えが頻出。
②CodePipeline は処理を「編成するだけ」で自分ではビルド/デプロイしない。
③成果物はステージ間でアーティファクトとして受け渡される。
4.1.2依存パッケージと開発者シェル(CodeArtifact・CloudShell)
CI/CD のビルドでは、外部の公開リポジトリから依存パッケージを取得しますが、社内共有や可用性・セキュリティの観点でこれを内製化したいことがあります。AWS CodeArtifact は マネージドなパッケージリポジトリで、npm・pip・Maven・NuGet などに対応し、公開リポジトリのプロキシ/キャッシュとして機能しつつ、組織内のプライベートパッケージを共有できます。CodeBuild から CodeArtifact を参照すれば、バージョンを固定し、外部障害や不正パッケージの影響を抑えられます。一方、ブラウザだけで AWS CLI をすぐ使いたいときは AWS CloudShell が便利です。CloudShell は認証済み・AWS CLI/SDK 同梱のブラウザシェルで、ローカルにキーや CLI を用意せずに、その場でコマンドを実行できます。判断の勘所は「依存パッケージの共有/プロキシ=CodeArtifact」「ブラウザから即 CLI 実行=CloudShell」です。
| やりたいこと | 選択 |
|---|---|
| 依存パッケージの共有・公開リポジトリのプロキシ | AWS CodeArtifact |
| ブラウザから認証済みの AWS CLI を即実行 | AWS CloudShell |
4.1.3この節のまとめ
- CodePipeline(編成)/CodeBuild(buildspec)/CodeDeploy(appspec)
- コミットが自動でビルド→テスト→デプロイを起動
進捗の記録にはログインが必要です。
理解度チェック
(軽い確認用)Q1. ソース→ビルド→テスト→デプロイという CI/CD の段階全体を編成する AWS のサービスはどれですか?
Q2. CodeBuild のビルド手順を記述するファイルはどれですか?
Q3. EC2 や Lambda などへアプリケーションをデプロイする AWS のサービスはどれですか?

