AWS CodeCommitを使ってGitリポジトリを作る

# はじめに

Gitのホスティングサービスの１つであるAWS CodeCommitの利用方法を、同僚に説明することになったので、手順を整理します。

# 本記事の対象
Gitを扱うことができますが、AWSにはあまり慣れていない人が対象です。
例えば、AWS CLI（AWS専用のコマンドラインツール）を使った方法は、この記事では登場しません。


# CodeCommitのリポジトリを作成する

さっそく、CodeCommitのリポジトリを作成していきましょう。

https://console.aws.amazon.com/codecommit/ にブラウザでアクセスしてください。**ダッシュボード**というページが開きます。

<img width="210" alt="CodeCommit_10.PNG" src="https://qiita-image-store.s3.amazonaws.com/0/221845/00a3fe2b-9978-5752-59d9-625acad21db3.png">

**リポジトリの作成**をクリックすると、**リポジトリの作成**という画面になります。

<img width="480" alt="CodeCommit_15.PNG" src="https://qiita-image-store.s3.amazonaws.com/0/221845/56be8dcb-49ba-27db-0d88-50d5c88d2402.png">

適当に入力してください。

- リポジトリ名: 適当に
  - 例. ci-practice
- 説明: 適当に
  - 例. CIの練習

**リポジトリの作成**をクリックすると、**Eメール通知の設定**という画面になります。

<img width="723" alt="CodeCommit_20.PNG" src="https://qiita-image-store.s3.amazonaws.com/0/221845/ce5a622a-eeb8-d716-2a5b-f9329001a089.png">

いろいろとチェックボックスがありますが、デフォルトのままよいと思います。**スキップ**をクリックすると、**リポジトリに接続**というドロワー画面が右から出てきます。

<img width="635" alt="CodeCommit_25.PNG" src="https://qiita-image-store.s3.amazonaws.com/0/221845/e6e65e7c-7f0c-4521-33b7-5203752748c1.png">

これが表示されれば、リポジトリの作成は成功です。

ここにはリポジトリをローカルにクローンする方法が記載されています。ここの情報に従って、リポジトリをクローンしてください。クローンの情報は後で確認できるので、この場は無視して**閉じる**をクリックしても構いません。

閉じると以下のような画面になります。

<img width="677" alt="CodeCommit_30.PNG" src="https://qiita-image-store.s3.amazonaws.com/0/221845/0b792ad0-46e2-8cdb-ea49-0bf9fbf47201.png">

**クローンURL**→**SSH**をクリックすると、以下のような文字列がクリップボードにコピーされます。

```
ssh://git-codecommit.●●●.amazonaws.com/v1/repos/●●●
```

これがクローンURLです。これをメモに控えます。



# プライベートキーを作成する

作成したリポジトリとSSH通信するためには、パブリックキーとプライベートキーが必要です。２つを合わせてキーペアと呼びます。

https://console.aws.amazon.com/ec2/ にブラウザでアクセスします。**EC2 ダッシュボード**が開きます。

<img width="635" alt="KeyPair_10.png" src="https://qiita-image-store.s3.amazonaws.com/0/221845/db8bb644-2eef-e774-a591-a13291b96df0.png">

左サイドバーにある**ネットワーク & セキュリティ**→**キーペア**をクリックし、**キーペアの作成**をクリックします。すると、ダイアログが出ます。

<img width="400" alt="KeyPair_15.png" src="https://qiita-image-store.s3.amazonaws.com/0/221845/c4964316-e7b3-d4d7-239b-4e8357104c04.png">

**キーペア名** に適当に名前を入力してください。名前はなんでもいいですが、CodeCommit用であることと、誰が作成したのかわかるような命名が便利だと思います。
以降の説明は例として **segur-codecommit**とします。

入力ができたら **作成** をクリックします。すると、pemファイルのダウンロードが始まります。このタイミング以外で、pemファイルを入手することはできませんので、失くさないように注意してください。

以下のパスにフォルダを作成し、ダウンロードしたpemファイルを設置します。

- Windowsの場合：`%USERPROFILE%\.ssh\aws`
- Macの場合： `~/.ssh/aws`



# パブリックキーを作成する
pemファイルからパブリックキーを作成します。WindowsとMacの両方の手順を紹介します。

## Windowsの場合

ここでは、PuTTYgenを使う方法を紹介します。
PuTTYをインストールしていなければインストールしてください。

PuTTYgen を起動して、**Load** をクリックします。

<img width="635" alt="KeyPair_25.png" src="https://qiita-image-store.s3.amazonaws.com/0/221845/7045bafb-ffd9-6b7b-7472-1bfcb05e530b.png">

ファイル選択ダイアログが表示されます。デフォルトの状態だと**ppk**ファイルしか選択できないので、右下のプルダウンを**All Files**に変更します。
その上で、先ほど保存したpemファイルを選択します。

<img width="635" alt="KeyPair_30.png" src="https://qiita-image-store.s3.amazonaws.com/0/221845/f7691cb5-1664-2c3e-7da5-c3470cd919bc.png">

すると、画面上部のテキストエリアにパブリックキーの文字列が表示されます。

<img width="635" alt="KeyPair_35.png" src="https://qiita-image-store.s3.amazonaws.com/0/221845/37ea0d45-ff17-8684-d951-a72bf39d4b76.png">

この文字列をメモに控えます。下の方に**Save Public Key**というボタンがありますが、これはOpenSSH形式で保存できず、CodeCommitでは使用できませんのでご注意ください。

## Macの場合

以下のコマンドを叩きます。

```bash
ssh-keygen -y
```

ファイル入力を求められるので、さきほどのpemファイルのパスを指定します。

```bash
~/.ssh/aws/segur-codecommit.pem
```

すると、パブリックキーの文字列が表示されるので、メモに控えます。

このコマンドが失敗した場合は、アクセス権限が適切でないかもしれません。以下のコマンドで、自分だけがpemファイルを操作できるように、権限を調整してください。

```bash
chmod 400 ~/.ssh/aws/tanaka-codecommit.pem
```


# パブリックキーを IAM ユーザーに関連付ける

https://console.aws.amazon.com/iam/ を開きます。

左サイドバーから **ユーザー** をクリックし、ユーザー一覧の中から自分の IAM ユーザーを選択します。

**認証情報** タブで、**SSH 公開キーのアップロード** を選択します。

先ほどメモに控えたパブリックキーの文字列を入力欄に貼り付け、**SSH 公開キーのアップロード** をクリックします。
**SSHキーID**が生成されるので、メモに控えます。



# プライベートキーをPCに登録する

以下のパスにconfigファイルがなければ作成します。

- Windowsの場合：`%USERPROFILE%\.ssh\config`
- Macの場合： `~/.ssh/config`

configファイルに以下の内容を追記します。

```bash
# AWS CodeCommit
Host git-codecommit.*.amazonaws.com
    User ＜アクセスキーID＞
    IdentityFile ＜pemファイルのフルパス＞
```

プロキシ配下の場合、プロキシの設定を以下のように追加してください。

```bash
# AWS CodeCommit
Host git-codecommit.*.amazonaws.com
    User ＜アクセスキーID＞
    IdentityFile ＜pemファイルのフルパス＞
    ProxyCommand connect -H ＜プロキシのユーザー名＞:＜プロキシのパスワード＞@＜プロキシのIPアドレス＞:＜プロキシのポート番号＞ %h %p
```

以上で、キーペアの設定は完了です。

これで、CodeCommitに対し、SSH接続でcloneやpushができるようになります。



# リポジトリをCloneする

メモに控えていたクローンURLからcloneしてみます。

ここではGitコマンドを使ってみます。

```bash
# cloneしたいディレクトリに移動
cd ＜cloneしたいディレクトリ＞

# リポジトリをclone
git clone ssh://git-codecommit.●●●.amazonaws.com/v1/repos/●●●
```

これでcloneができるはずです。

# さいごに

今まで、何となくの理解で、リポジトリやキーペアを作成していましたが、記事にまとめてみると、意外とボリュームのある作業で驚きました。参考になれば幸いです。