・Githubにプッシュした後に自動でCodeCommitにプッシュする方法の紹介
・Github Actionsでリポジトリ間のミラーリングを実施
AWS CodePipelineを利用する中で、デプロイするソースコードはCodeCommitにプッシュしていました。
CodeCommitを利用するということはソースコード管理もCodeCommitに移行せざるを得なくなります。
ただやはり、バージョン管理はGithubが有名であるためGithubを使い続けたい方もいると思います。
今回はGithubにプッシュすると自動でCodeCommitにプッシュされる方法、いわゆるミラーリングを紹介します。
連携されるとCodeCommitやCodePipelineを意識せずにGithubでソースコードを管理しつつAWSに自動でデプロイされると考えています。
サンプルデータ
今回ミラーリングするにあたって、利用するコードはRuby on Railsです。
rails newコマンドで作成したプロジェクトをそのまま利用しています。
CodeCommitやCodePipelineの設定は以前の記事を参考ください。
事前準備①(SSHキー作成とAWSに設定)
SSHキー作成
Github ActionsとCodeCommitの連携にはSSHキーが必須です。
また、SSHキー作成時のパスフレーズは空で登録する必要があります。
PS \.ssh> ssh-keygen -t rsa -b 4096 -C "メールアドレス"
Generating public/private rsa key pair.
Enter file in which to save the key (~/.ssh/id_rsa): ./codecommit_rsa
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in ./codecommit_rsa.
Your public key has been saved in ./codecommit_rsa.pub.
The key fingerprint is:
SHA256:iL2YUcrguu9UXUcjzlxsCATdeIihaSPyCf4DXXbtwxU メールアドレス
The key's randomart image is:
+---[RSA 4096]----+
4行目、5行目のパスフレーズは空で登録します。
何かしらの値を入れるとGithub Actionsでエラーになります。
作成したSSHキーをAWSに設定
上記で作成したSSHキーをAWSのIAMユーザと紐付けます。
IAMユーザーから自分のユーザー名を選択して、認証情報タブ>AWS CodeCommitのSSHキーにある「SSHパブリックキーのアップロード」を選択します。
パブリックキーの中には、上記で作成したSSHキーの公開鍵(codecommit_rsa.pub)の中身をそのままコピペします。
事前準備②(GithubリポジトリのSecretsにSSHキー情報設定)
後述する Github Actions ではSSHキーを使用します。
設定ファイルにそのまま記載せずGithubで設定した値を使用するため事前にGithubに使用する変数名と SSH キーを設定します。
使用するSSHキーは事前準備①で作成およびAWSに紐付けたSSHキーを使います。
Githubリポジトリ>Settings>Secrets へと進み、New repository secretから作成します。
New secret画面では下記2つのNameとValueを設定します。
- Name:CODECOMMIT_SSH_PRIVATE_KEY
- Value:SSHキー秘密鍵(codecommit_rsa)の内容をコピペ
- Name:CODECOMMIT_SSH_PRIVATE_KEY_IDKEY
- Value:SSHキーID(事前準備①でAWSに紐付けた際に表示されたSSHキーID[APKA…]
Github Actionsの設定
AWSとGithubリポジトリにSSHキーを紐付けることが出来たらそれらのミラーリングの設定です。
今回はGithub Actionsを利用してAWS CodeCommitにミラーリングします。
利用するGithub Actionsは下記となります。
https://github.com/marketplace/actions/mirroring-repository
設定方法は上記リンク記載の「使用法」に記載とおりです。
リポジトリに「.github/workflows/main.yml」を作成します。
main.yml に記述コードは「使用法」にあるものだとGitLabへのミラーリングも含まれているため下記を参考ください。
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 }}
12,13行目の箇所はCodeCommitのリポジトリURLに変更してください。
14行目以降の環境変数は事前準備②で設定した値を使用しています。
以上で設定完了です。
あとはGithubリポジトリにプッシュして、CodeCommitにもプッシュされていることを確認してください。
Githubにプッシュされていて、CodeCommitにもプッシュされていない場合はGithubリポジトリ>Actionsからミラーリング処理結果が出力されますので確認してください。
最後に
今回はGithubとCodeCommitの連携部分の紹介となります。
実際にはCodeCommitにプッシュされた後に、CodeBuildやCodeDeployを行いEC2インスタンスなどにデプロイされると思います。
CodeCommitにプッシュされたあとのデプロイ方法は下記を参考ください。