AWS

【Github Actions】GithubリポジトリをAWS CodeCommitに連携する方法

・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から作成します。

Githubリポジトリ>Settings>Secrets

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にプッシュされたあとのデプロイ方法は下記を参考ください。