← ハンズオン一覧に戻る

AWS Hands-on / CI・CD

CodeCommitにpushして、
自動デプロイを動かす

AWS CodeCommit は、Gitでバージョン管理されたコードをそのまま保管できるリポジトリサービスです。ローカルからGitでpushするだけで、CodePipelineが自動的に検知して配信先へデプロイする仕組みを構築します。

● Lv.3 複数のサービスを組み合わせられる人 ⏱ 所要 50〜70 分 コンソール+Gitコマンドを使用
01 — Prerequisites

はじめる前に

  • 必須AWS アカウントを持っていること
  • 必須マネジメントコンソールにサインインできること
  • 必須ローカルにGitをインストール済みであること
  • 必須IAMユーザーの権限編集、S3バケットの作成といった基本操作
  • あると良いgit clone / git add / git commit / git push の基本コマンドを使ったことがある

※ コンソールでの操作に加えて、お使いのパソコンのターミナルでGitコマンドを実行する場面があります。

02 — References

参照する公式ドキュメント

手順に迷ったときや、用語の意味を確かめたいときに開きましょう。

※ リンク切れの場合は、ページタイトルで検索してください。

03 — Background

背景・シナリオ

ソフトウェア開発では、コードの変更履歴をGitで管理するのが一般的です。AWS CodeCommitは、このGitリポジトリをAWS上にそのまま保管できるサービスで、CodePipelineのソースとして直接利用できます。ファイルをZIPにまとめてアップロードする方法と違い、git push という普段の開発作業がそのままパイプラインの起動につながります。

今回はCodeCommitにリポジトリを作成し、ローカルからファイルをpushし、CodePipelineがそれを検知して自動的にS3へ配信するところまでを体験します。

CodeCommitに接続するには、何が必要なの?

Gitクライアントのインストールに加えて、IAMユーザーに対して発行する「HTTPS Git認証情報」という専用のユーザー名・パスワードが必要です。これは通常のAWSマネジメントコンソールへのログイン情報とは別物です。

pushしたことは、どうやってパイプラインに伝わるの?

CodePipelineのコンソールでCodeCommitをソースに設定すると、CodePipelineが自動的にEventBridgeルールを作成します。これがリポジトリへの変更を検知して、自動的にパイプラインの実行を開始します。

Goal

CodeCommitリポジトリへファイルをpushし、CodePipelineがそれを検知して自動的にS3バケットへ配信することを確認する。さらにファイルを更新して再度pushし、再び自動的に反映されることを確認する。

04 — Architecture

つくる構成

ローカルからのGit pushが、CodeCommit・CodePipelineを経由して配信先のS3バケットまで自動的に届く流れを作ります。

💻 ローカル git push
📦 CodeCommit Gitリポジトリ
⚙️ CodePipeline 変更を自動検知
🪣 S3(配信先) 展開して配置
05 — Requirements

要件

以下の要件を満たし、Git pushからの自動デプロイを体験してください。

No要件
1使用するIAMユーザーにCodeCommit用の権限を付与し、HTTPS Git認証情報を発行する。
2CodeCommitリポジトリを1つ作成し、ローカルにクローンして適当なファイル(例:index.html)を1つ commit・push する。
3配信先用のS3バケットを1つ作成する。
4CodePipelineで、ソースステージ(AWS CodeCommit、リポジトリとブランチを指定)→デプロイステージ(Amazon S3、展開を有効)の2ステージのパイプラインを作成する(ビルドステージはスキップする)。
5パイプラインの自動実行後、配信先バケットの内容を確認したうえで、ファイルを更新して再度pushし、再び自動的に反映されることを確認する。
06 — Steps

構築の進め方

「CodeCommitへの接続を準備する」→「リポジトリを作成しファイルをpushする」→「パイプラインを作る」→「自動実行と更新を確認する」という順番で進めます。

  1. フェーズ1 — CodeCommitへの接続を準備する
  2. マネジメントコンソールにサインインし、リージョンを合わせる

    ブラウザで AWS マネジメントコンソールにサインインし、画面右上のリージョンが「アジアパシフィック(東京)ap-northeast-1」になっていることを確認します。

  3. IAMユーザーにCodeCommit用の権限を付与する

    IAMコンソールで、使用するIAMユーザーに管理ポリシーAWSCodeCommitPowerUser(またはそれに相当する権限)を付与します。

  4. HTTPS Git認証情報を発行する

    同じIAMユーザーの詳細画面で「セキュリティ認証情報」タブを開き、「AWS CodeCommit用のHTTPS Git認証情報」を生成します。表示されたユーザー名とパスワードは、この画面を閉じると再表示できないため、必ずダウンロードまたはコピーして保存します。

    通常のログイン情報とは別物

    この認証情報は、IAMユーザーがマネジメントコンソールにログインするためのパスワードとは異なります。Gitでの接続専用のユーザー名・パスワードです。

  5. フェーズ2 — リポジトリを作成し、ファイルをpushする
  6. CodeCommitリポジトリを作成する

    CodeCommitコンソールで「リポジトリを作成」を選び、名前を決めます(例:my-demo-repo)。作成後、リポジトリの詳細画面で「クローンURL」からHTTPSのURLをコピーします。

  7. ローカルにクローンし、ファイルをcommit・pushする

    ターミナルで次のコマンドを実行します。git clone 時にユーザー名・パスワードを聞かれたら、手順3で発行したHTTPS Git認証情報を入力します。

    # クローンURLは実際のものに置き換える
    git clone https://git-codecommit.ap-northeast-1.amazonaws.com/v1/repos/my-demo-repo
    cd my-demo-repo
    
    # 適当なファイルを1つ作成する
    echo "Hello from CodeCommit" > index.html
    
    git add index.html
    git commit -m "Add index.html"
    git push
  8. フェーズ3 — パイプラインを作る
  9. 配信先用のS3バケットを作成する

    S3バケットを1つ作成します(名前は一意に、例:codecommit-destination-yourname)。

  10. CodePipelineでパイプラインを作成する

    CodePipelineコンソールで「パイプラインを作成する」を選びます。ソースステージでは、ソースプロバイダーに「AWS CodeCommit」を選び、手順4で作成したリポジトリとブランチ(例:main)を指定します。ビルドステージの設定画面では「ビルドステージをスキップする」を選びます。デプロイステージでは、デプロイプロバイダーに「Amazon S3」を選び、手順6の配信先バケットを指定し、「展開する(Extract)」をオンにします。

  11. フェーズ4 — 自動実行と更新を確認する
  12. 配信先バケットの内容を確認する

    パイプラインの最初の実行が成功したら、配信先バケットを開き、index.html が展開された状態で置かれていることを確認します。

  13. ファイルを更新して、自動的に反映されることを確認する

    ローカルで index.html の内容を書き換え、再度 git addgit commitgit push を実行します。CodePipelineの実行履歴に新しい実行が自動的に始まっていることを確認し、完了後に配信先バケットの内容が更新されていることを確認します。

    これがゴール

    手作業でアップロードしていないのに、git push しただけで配信先の内容が変わっている——この状態を確認できたら、このハンズオンの目的は達成です。

07 — Pitfalls

つまずきポイント

初学者がよく引っかかる箇所を先回りでまとめました。答えそのものは載せていませんが、「どこを見直すか」の手がかりとして使ってください。

Pitfall 01 — pushしようとすると認証エラーになる

「git pushを実行すると、ユーザー名・パスワードを聞かれた後にエラーになる」

入力しているのが、IAMユーザーのマネジメントコンソール用ログインパスワードではなく、手順3で発行したHTTPS Git認証情報になっているかを見直しましょう。

Pitfall 02 — ソースアクションの作成でエラーになる

「CodeCommitをソースに設定しようとすると、リポジトリが見つからない、または権限エラーになる」

CodePipelineを作成しているリージョンと、CodeCommitリポジトリを作成したリージョンが一致しているかを見直しましょう。

08 — Checklist

完了チェック

要件の再確認ではなく、画面のどこを見れば達成を確認できるかをまとめました。次を順に確かめましょう。

  • CodeCommitのリポジトリ画面に、pushしたindex.htmlが表示されている。
  • パイプラインの実行履歴に、成功(緑色)のステータスが表示されている。
  • 配信先バケットに、展開された状態のindex.htmlが置かれている。
  • ファイル更新後の再pushの直後に、パイプラインの新しい実行が自動的に始まっている。
09 — Think

考えてみよう

手を動かすことに加えて、次の問いに自分の言葉で答えられるようにしておくと、理解がより深まります。

  1. CodeCommitのHTTPS Git認証情報と、IAMユーザーのログイン用パスワードが別々に分かれているのは、なぜでしょうか。
    ヒント
    片方の認証情報が漏れてしまった場合に、影響が及ぶ範囲がどう変わるか考えてみましょう。
  2. S3にZIPをアップロードする方法と、CodeCommitにpushする方法は、それぞれどんな場面に向いているでしょうか。
    ヒント
    変更履歴の管理や、複数人での共同作業のしやすさという観点で比べてみましょう。
  3. 複数人が同じリポジトリにpushするようになった場合、新たに気をつけるべきことは何でしょうか。
    ヒント
    同じファイルを同時に変更した場合に何が起きるか、変更内容を確認する仕組みがあるかどうかを考えてみましょう(このハンズオンでは扱っていない発展的な内容です)。
10 — Clean up

後片づけ

作成したリソースを順番に削除します。

  1. パイプラインを削除する:CodePipelineコンソールから、作成したパイプラインを削除します。
  2. CodeCommitリポジトリを削除する:CodeCommitコンソールから、作成したリポジトリを削除します(この操作は元に戻せません)。
  3. HTTPS Git認証情報を削除する:IAMユーザーの「セキュリティ認証情報」タブから、発行したGit認証情報を削除します。
  4. 自動作成されたIAMロールを削除する:パイプライン作成時に新規作成されたサービスロールが残っている場合は、IAMコンソールから削除します。
  5. S3バケットを空にして削除する:配信先バケットの中身を削除してから、バケット本体を削除します。

コストに関する注意: CodeCommit は、保管しているリポジトリの容量やAPIリクエスト数などに応じて課金される場合があります。少量のリポジトリであれば料金はごく小さく済みますが、検証が終わったら不要なリポジトリは削除しましょう。CodePipeline は、有効化しているパイプラインの数に応じて課金されます。S3の保存容量・リクエストにも別途料金がかかりますが、少量であれば無料利用枠の範囲内に収まることが多いです。最新の料金は AWS の公式料金ページで確認してください。