【AWS CodeCommit】リポジトリを別の AWS アカウントに移行する

はじめに

テントの中から失礼します、CX事業本部 Delivery部のてんとタカハシです!

CodeCommit で管理しているリポジトリを別の AWS アカウントに移行する機会がありましたので、その手順について記載します。

前提

  • 移行元および移行先アカウントの Code Commit にアクセス可能な権限を持っていること
  • CodeCommit へのアクセスには git-remote-codecommit を使用する
  • スイッチロールには aws-vault を使用する

下2点は移行のために必須な要件ではありませんが、本記事ではどちらも使用する前提で手順を記載します。それぞれの詳細については下記をご参照ください。

移行元のリポジトリ

リポジトリ「sample-repository」の中身はテキストファイルが1つです。

プルリクエストはマージ済みが1つ、リクエスト中が1つです。

master ブランチにはコミットが2つです。

master ブランチの他に作業用ブランチが1つです。

タグは「0.1.0」の1つです。

移行手順

下記のドキュメントを参考にリポジトリを別の AWS アカウントに移行します。

手順をざっくり言うと、移行元リポジトリをクローンして、移行先リポジトリにプッシュするだけなので非常に簡単です。

1. 移行先のリポジトリを作成

移行先の AWS アカウントでリポジトリを作成します。通常は移行前後でリポジトリ名を変える必要はないと思いますが、ここでは区別が付きやすいように、移行先のリポジトリ名を「sample-repository-2」にしています。

2. 移行元のリポジトリをクローンする

移行元のアカウントからリポジトリ「sample-repository」を手元にクローンします。

% aws-vault exec <移行元アカウント>

% git clone --mirror codecommit::ap-northeast-1://sample-repository sample-repository
Cloning into bare repository 'sample-repository'...
remote: Counting objects: 7, done.
Unpacking objects: 100% (7/7), 589 bytes | 98.00 KiB/s, done.

3. 移行先のリポジトリにプッシュする

続いて、移行先アカウントにスイッチロールしてから、手順1で作成したリポジトリに対してプッシュします。これで移行作業は一旦完了です。

% aws-vault exec <移行先アカウント>

% cd sample-repository

% git push codecommit::ap-northeast-1://sample-repository-2 --all
Enumerating objects: 7, done.
Counting objects: 100% (7/7), done.
Delta compression using up to 8 threads
Compressing objects: 100% (3/3), done.
Writing objects: 100% (7/7), 555 bytes | 555.00 KiB/s, done.
Total 7 (delta 2), reused 0 (delta 0), pack-reused 0
remote: Validating objects: 100%
To codecommit::ap-northeast-1://sample-repository-2
 * [new branch]      feature/sample-branch-02 -> feature/sample-branch-02
 * [new branch]      master -> master

移行後のリポジトリ

リポジトリ「sample-repository-2」の中身は移行前と変化なくテキストファイルが1つです。

プルリクエストは0件になっています。プルリクエスト自体は Git ではなく、CodeCommit の機能ということで、git clone → git push の流れでは移行できないようです。

コミットは移行前と変化ありません。

ブランチも移行前と変化なし。

タグは0件になっています。タグ自体は Git の機能ではありますが、後述する手順が必要になります。

タグの移行

先ほど移行先のリポジトリに対してプッシュを実行した際は、オプションで --all を指定していましたが、今回は --tags を指定します。

% git push codecommit::ap-northeast-1://sample-repository-2 --tags
Total 0 (delta 0), reused 0 (delta 0), pack-reused 0
To codecommit::ap-northeast-1://sample-repository-2
 * [new tag]         0.1.0 -> 0.1.0

すると、移行先のリポジトリにタグが追加されていることを確認できます。

おわりに

CodeCommit で管理しているリポジトリを別の AWS アカウントに移行する手順は非常に簡潔でした。プルリクエストの情報が消えてしまうなど差分が発生する箇所がありますので、実施する際はあらかじめ把握しておくと良いと思います。

今回は以上になります。最後まで読んでいただきありがとうございました!