AWS CodeCommitについて


CodeCommitとは

AWSが提供するマネージド型のソース管理サービス。
Git の標準機能がサポートされており、Git からの移行が容易。
また、CodeCommitのリポジトリとGitHubやGitLabのリポジトリをミラーリングすることも可能。

CodeCommitへのリポジトリ作成手順

  1. AWSマネジメントコンソールからCodeCommitのコンソールへアクセスする。
  2. リポジトリの作成 を押下する。
  3. 以下の情報を入力して、作成 を押下する。
     リポジトリ名:任意の文字列
     説明    :任意の文字列
     タグ    :任意
  4. 自動的にリポジトリのページに遷移し、 成功 と表示されれば作成完了。

CodeCommitへの接続方法

事前準備

ローカルのPCからCodeCommitのリポジトリに接続するためには、AWSマネジメントコンソール上でGit認証情報を作成する必要がある。
詳細は公式のガイドを参照。
その作成方法は以下。(IAMユーザの作成とGitのインストールは実施済みの前提です。)
ここでは、HTTPSで接続するための認証情報の作成方法を取り上げる。

  1. AWSマネジメントコンソールからIAMのコンソールへアクセスする。
  2. 対象のユーザの詳細画面に遷移し、 認証情報 タブから AWS CodeCommit の HTTPS Git 認証情報認証情報を生成 を押下する。
  3. 自動的に認証情報が生成されるため、表示された認証情報を控えるか、 証明書のダウンロード を押下してcsvファイルとして保存する。

CodeCommitへの接続と操作

前述の事前準備が完了したら、通常のGi操作と同様にCodeCommitリポジトリに対しても git clonegit commit などを行うことができる。
初回の操作時に認証情報の入力を求められるため、事前準備で払い出した認証情報を入力すればよい。

GitHubとCodeCommitの連携方法

CodeCommitはGitHubやGitLabとミラーリングを行うことが可能。
ここでは、GitHubとのミラーリングについて説明する。

設定手順

GitHubとのミラーリングを行うための設定手順を示す。
大まかな流れとしては、

  1. SSHキーの作成
  2. AWSへの公開鍵の登録
  3. GitHubリポジトリのSecrets設定
  4. GitHub Actionsの設定

となる。

SSHキーの作成とAWSへの公開鍵の登録

以下のコマンドを実行して、SSHキーを作成する。
パスフレーズは必ず空で作成する。

ssh-keygen -t rsa -b 4096 -C "GitHubアカウントのメールアドレス"

SSHキーを作成したら、IAMのコンソールから対象のIAMユーザに公開鍵を紐付ける。
AWS CodeCommit の SSH キーSSH パブリックキーのアップロード から、作成したXXX_rsa.pubの中身をアップロードする。

GitHubリポジトリへのSecrets設定

ミラーリングにはGitHub Actionsを使用するため、GitHubのActions secretsに以下の2つを設定しておく。
変数名は任意。

  • SSH秘密鍵
    Name:CODECOMMIT_SSH_PRIVATE_KEY
    Value:SSHキー秘密鍵(作成したXXX_rsa)の内容を貼り付ける
  • SSHキーID
    Name:CODECOMMIT_SSH_PRIVATE_KEY_ID
    Value:SSHキーID(公開鍵をAWSに紐付けた際に表示されたSSHキーID[APKA…])

GitHub Actionsの設定

Secretsの設定まで完了したら、GitHubリポジトリにGitHub Actionsのワークフローを登録する。
.github/workflows/main.yml を作成し、以下の内容で保存する。

name: Mirroring

on: [ push, delete ]

jobs:
  to_codecommit:
    runs-on: ubuntu-18.04
    steps:
      - uses: actions/checkout@v1
      - uses: pixta-dev/repository-mirroring-action@v1
        with:
          target_repo_url:
            ssh://git-codecommit.ap-northeast-1.amazonaws.com/v1/repos/xxxxx
          ssh_private_key:
            ${{ secrets.CODECOMMIT_SSH_PRIVATE_KEY }}
          ssh_username:
            ${{ secrets.CODECOMMIT_SSH_PRIVATE_KEY_ID }}

target_repo_urlの値は、対象のCodeCommitリポジトリのSSH URLに変更する。
これにより、GitHubへのプッシュを契機としてCodeCommitへのミラーリングが自動的に行われるようになる。