こんにちは
今回はGitHubとCodeCommitをミラーリングしてみたので、備忘録としてここに残しておきます。
なお、方法としてSSHを用いるものと、IAMロール + OIDC を利用するものの2つありますが、今回は比較的簡単な前者にて実装しました。
(もし時間があればOIDCのほうもやってみようかなと思います
■前提
・CodeCommitを利用するCI/CD環境が存在する
・GitHubリポジトリを作成済み
■流れ
1. IAMユーザーの作成
2. SSHキーのアップロード
3. GitHub上でsecretの登録
4. GitHub Actions の作成
5. ミラーリングの実施
■手順
1. IAMユーザーの作成
まずはAWSコンソール上でIAMユーザーを作成します
名前はなんでもOKですが、IAMポリシーで AWSCodeCommitFullAccess などのCodeCommitを実行する操作権限を付与します
2. SSHキーのアップロード
・ローカルなどでSSHキーを作成します
※2026/03時点では ed25519 方式だとAWSの登録時にエラーとなったので注意が必要です
ssh-keygen -f ~/.ssh/codecommit_github_mirroring
→ /home/ログインユーザー/.ssh 配下に codecommit_github_mirroring の名前で作成します(codecommit_github_mirroring.pubも同時に作成されます)
ls -la
→ codecommit_github_mirroring と codecommit_github_mirroring.pub が作成されていればOKです
・AWSコンソール上で作成した公開鍵を登録します
IAM > ユーザー > ユーザー名 > セキュリティ認証情報 > AWS CodeCommit の SSH 公開キー > SSH 公開キーのアップロード を押下して、公開鍵を貼り付けます
→ 登録後、SSH公開キーがアップロードされた旨のメッセージが表示されればOKです
・SSH キー ID は後ほど利用するのでメモしておきましょう
3. GitHub上でsecretの登録
・GitHub上で作成した 秘密鍵 と SSHキーID を登録します
リポジトリ名 > Actions secrets and variables > Actions > New Repository Secret を押下し、下記情報を記入します
秘密鍵用
Name:CODECOMMIT_SSH_PRIVATE_KEY
Secret:codecommit_github_mirroring の中身を貼り付ける
SSH キー ID用
Name:CODECOMMIT_SSH_PRIVATE_KEY_ID
Secret:SSHキーID
→ 登録後、画面上にそれぞれ存在することを確認します
4. GitHub Actions の作成
・こちらに従いGitHub Actionsの定義ファイルを作成します
階層は下記のようにプロジェクトのルートディレクトリ直下に作成します
ルートディレクトリ
└ .github
└ workflows
└ main.yml
main.yml
※参照元では ubuntu-latest を指定していましたが、実行の度にどのバージョンを指定するか分からないので、今回はあえてバージョンを指定しています
name: Mirroring
on: [ push, delete ]
jobs:
to_codecommit:
runs-on: ubuntu-22.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/<codecommit_repository_name>
ssh_private_key:
${{ secrets.CODECOMMIT_SSH_PRIVATE_KEY }}
ssh_username:
${{ secrets.CODECOMMIT_SSH_PRIVATE_KEY_ID }}
→ secrets.CODECOMMIT_SSH_PRIVATE_KEY と secrets.CODECOMMIT_SSH_PRIVATE_KEY_ID でGitHub 上に登録した情報を指定しています
5. ミラーリングの実施
・GitHubeへプッシュし、ミラーリングが実行されることを確認します
→ 下記の画像のようにGitHub上で実行が成功しており、CodeCommit側のレポジトリ上にコードが反映されていれば成功です
■まとめ
いかがでしたでしょうか?
ミラーリングを利用する機会はそこまで多くはないと思いますが、一度やってみるとそこまで難しくなかったです。
また、これらの技術を知っているのといないのでは、提案力に大きな差が出るとも感じたので、今回やってみてよかったです。
