git-remote-codecommit(GRC)を使ってAWS CodeCommitに繋いでみたら楽になった

こんにちは。AWS歴３年生の人です。最近、インフラもコードで管理するInfrastructure as Code(IaC)に関連して、Gitを使い始めたのですが、2020年春にAWSからgit-remote-codecommitという新しいGit認証ツールがリリースされたので勉強がてら試してみました。

[AWS CodeCommit が新しい Git 認証情報ヘルパーの git-remote-codecommit を導入](https://aws.amazon.com/jp/about-aws/whats-new/2020/03/aws-codecommit-introduces-open-source-remote-helper/)



**注意**

- 本記事は2020年7月17日時点でのバージョンで確認しました。

- 記載のコードにつきましては参考となりますので、利用時の不具合について一切の責任を負いません。

  

## 結論。こんな方におすすめです。

- AWSがきっかけでGitを使い始める人。
  - AWSが提供しているGitリポジトリへ接続するための認証補助ツールなので。
- Gitの認証設定がうまくいかない人や、.gitconfigファイルの設定が不慣れな人。
  - AWSCLIのCredential設定ができれば、簡単にCodeCommitに接続できるので。



普段からCodeCommit以外のリポジトリや、複数のGit認証情報を使いこなしている方にはこのツールは不要かもしれません。



## 準備

前提条件である、PythonやAWSCLI、Gitクライアントのインストール、CodeCommitやAWSCLIのCredentialとprofile設定は済んでいるものとします。

参考

[ステップ 0: git-remote-codecommit の前提条件をインストールする](https://docs.aws.amazon.com/ja_jp/codecommit/latest/userguide/setting-up-git-remote-codecommit.html#setting-up-git-remote-codecommit-prereq)
[ステップ 1: CodeCommit の初期設定](https://docs.aws.amazon.com/ja_jp/codecommit/latest/userguide/setting-up-git-remote-codecommit.html#setting-up-git-remote-codecommit-account)



## インストール

一行 `pip install git-remote-codecommit`を実行するだけです

```bash
$ pip install git-remote-codecommit
Collecting git-remote-codecommit
  Downloading https://files.pythonhosted.org/packages/bb/f7/1180a1f2319a9120c94f33bba61e1738db8dea31b622f8aaf382f219aaeb/git-remote-codecommit-1.13.tar.gz
Collecting botocore>=1.10.4 (from git-remote-codecommit)
(snip)
Successfully built git-remote-codecommit
```

依存関係のあるパッケージもあわせて一緒に更新されますが、最後に `Successfully built git-remote-codecommit` が表示されれば成功です。

参考

[ステップ 2: git-remote-codecommit をインストールする](https://docs.aws.amazon.com/ja_jp/codecommit/latest/userguide/setting-up-git-remote-codecommit.html#setting-up-git-remote-codecommit-install)



## 使い方

例えば、AWSのprofile名を `project-a`として、リージョン `ap-northeast-1` にあるAWS CodeCommitリポジトリ `demoapp`をローカルにクローンしたい場合は以下のようにします。

```bash
$ git clone codecommit::ap-northeast-1://project-a@demoapp
Cloning into 'demoapp'...
remote: Counting objects: 40, done.
Unpacking objects: 100% (40/40), done.
```

以降は、いつものように使うだけでOKです。

毎回profile名を指定する必要はありません。また、インストールさえできれば、GUIでもクローン時に上記のように指定することで同じく使うことができました。

例：pushの例

```bash
$ git push
Counting objects: 4, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (3/3), done.
Writing objects: 100% (4/4), 363 bytes | 363.00 KiB/s, done.
Total 4 (delta 1), reused 0 (delta 0)
To codecommit::ap-northeast-1://project-a@demoapp
   9d88cfd..2247110  master -> master
```

参考

[ステップ 3: CodeCommit コンソールに接続し、リポジトリのクローンを作成する](https://docs.aws.amazon.com/ja_jp/codecommit/latest/userguide/setting-up-git-remote-codecommit.html#setting-up-git-remote-codecommit-connect-console)



## 深掘りしてみる

クローン時に指定した情報がどこに設定されているか探してみたところ`ローカルリポジトリ/.git/config`というファイルに記載されていました。

```bash
[remote "origin"]
        url = codecommit::ap-northeast-1://project-a@demoapp
        fetch = +refs/heads/*:refs/remotes/origin/*
```



## いままでの認証情報ヘルパーと比べて

いままでは下記のAWSユーザサイトを参考にGitコマンドでGit認証情報ヘルパーを設定していました。

[ステップ 3: 認証情報ヘルパーを設定する](https://docs.aws.amazon.com/ja_jp/codecommit/latest/userguide/setting-up-https-unixes.html#setting-up-https-unixes-credential-helper)



個人的には、Git初心者にとってはなかなか難しく

- GitのCredential設定もしないとならない（AWSCLIのCredential設定だけで完結しない）
- Gitクライアントによってはインストール時、もしくは.gitconfigファイルでCredential Manager設定を無効化しないと接続できない場合がある
- 異なるCodeCommitリポジトリの認証を追加したいときに、globalの.gitconfigファイルを変更していた
  - 最近、`git config`コマンドに` --local`オプションがあることを知りました

という感じだったので、今回のツールはGit初心者でもGit接続環境を導入しやすくなりました。



## まとめ

git-remote-codecommitを使って今までより比較的簡単にAWS CodeCommitに接続することができました。また、新しいツールの調査の過程でGitについても少し理解を深めることができました。