AWS CodeCommitについて

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

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

1. AWSマネジメントコンソールからCodeCommitのコンソールへアクセスする。
1. `リポジトリの作成` を押下する。
![001.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/367074/370a9cd8-8235-1dfe-c174-5d8fa2a54ea1.png)
1. 以下の情報を入力して、`作成` を押下する。  
　リポジトリ名：任意の文字列  
　説明　　　　：任意の文字列  
　タグ　　　　：任意
![002.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/367074/04e6f62c-198e-2e17-09ca-4010bf711479.png)
1. 自動的にリポジトリのページに遷移し、 `成功` と表示されれば作成完了。
![003.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/367074/c1462c24-04fc-3661-4ee6-88be513fb51e.png)

# CodeCommitへの接続方法
## 事前準備
ローカルのPCからCodeCommitのリポジトリに接続するためには、AWSマネジメントコンソール上でGit認証情報を作成する必要がある。
詳細は[公式のガイド](https://docs.aws.amazon.com/ja_jp/codecommit/latest/userguide/setting-up-gc.html)を参照。
その作成方法は以下。（IAMユーザの作成とGitのインストールは実施済みの前提です。）
ここでは、HTTPSで接続するための認証情報の作成方法を取り上げる。

1. AWSマネジメントコンソールからIAMのコンソールへアクセスする。  
1. 対象のユーザの詳細画面に遷移し、 `認証情報` タブから `AWS CodeCommit の HTTPS Git 認証情報` の `認証情報を生成` を押下する。  
![004.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/367074/c90d56e0-8a23-d9e8-5534-a8307e21e25f.png)
![005.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/367074/94529ead-10a0-26a7-9665-e00414cb9a85.png)
1. 自動的に認証情報が生成されるため、表示された認証情報を控えるか、 `証明書のダウンロード` を押下してcsvファイルとして保存する。
![006.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/367074/d56de345-ccc1-e189-0a2d-ace713bd5bd9.png)

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

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

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

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

となる。

### SSHキーの作成とAWSへの公開鍵の登録
以下のコマンドを実行して、SSHキーを作成する。
パスフレーズは必ず空で作成する。

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

SSHキーを作成したら、IAMのコンソールから対象のIAMユーザに公開鍵を紐付ける。
`AWS CodeCommit の SSH キー` の `SSH パブリックキーのアップロード` から、作成したXXX_rsa.pubの中身をアップロードする。
![007.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/367074/a09ee05a-bd1d-a62c-a410-6a211d6f12d9.png)

### 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…]）

![008.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/367074/fd95d6ca-8e96-4ece-658a-a057d3dc8cbb.png)

### 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へのミラーリングが自動的に行われるようになる。