AWS Amazon linuxにCode Commitを導入

code commitを導入したので記録。

#AWS code commitに関して

##code commit
リモートバージョン管理。ローカルのバージョン管理と併用して扱う。
git hubと同じ構造をawsが真似てcode commitサービスとして運用しているもの。
gitコマンドを使用。（gitコマンドを使用できるように```yum install git ```で入れておく）

##料金
無料内料金表

|人数|ストレージ|リクエスト|
|:--|:---|:---|
|5人以下|50GB|10,000件|

無料期間外でも毎月これ以内なら無料でプライベートリポジトリを管理できる。
[公式code commit料金ページ](https://aws.amazon.com/jp/codecommit/pricing/)

#Code commit 導入

code commitへの認証でIAMのロールとユーザーの２種類の認証方法がありますので両方のやり方を記載します。
IAMユーザーを使用した場合にcode commitへの接続方法は２種類（ssh,https）ありますので両方のやり方を記載します。

##導入手順一覧
1.Code commitのリポジトリ作成
2.IAM policy作成



##1.Code commitのリポジトリ作成
Code commitのサービスを開きます。
リージョンがオレゴンしかないのでオレゴンを選択します。（現リージョンがオレゴン以外だったら聞かれます。）
初めての方は以下のページが開かれるのでGet startedを選択する。初めてではない方はcreate repositoryがあるので選択する。
![キャプチャ.PNG](https://qiita-image-store.s3.amazonaws.com/0/134267/9c7bb3d0-3630-0bd0-dc3d-6f74cecefa2a.png)

Create new repositoryという画面がでてくるので、名前と説明を入力してcreate repositoryを選択する。
作成されたリポジトリを選択し、左のナビゲーションペインからsettingsを選択してRepository ARNをコピーしておく（次の手順のポリシーに必要です。）
![code.PNG](https://qiita-image-store.s3.amazonaws.com/0/134267/0dabbc56-93d3-fc58-55d6-99ccd135ed3c.png)



##2.IAM policy作成
IAMサービスを開き、左のナビゲーションペインからポリシーを選択します。
ポリシーの作成を選択後Policy Generatorを選択
アクセス許可の編集の画面が出てきますので以下の画像ように編集する。
（Amazon リソースネームは先ほどコピーしたものを貼り付ける。）
![hy.PNG](https://qiita-image-store.s3.amazonaws.com/0/134267/c007569a-f375-db24-39ec-d33b8e26e638.png)
ステートメントの追加をして次のステップを選択する。適当に名前と説明を入れて作成する。

##3.IAM ロールorユーザでの認証

ロール認証するのかユーザーで認証するのかを選びます。
ユーザーで認証でさらにssh接続するのかhttps接続するのか選びます。

---

###ロールを使用した場合の認証（ロールの場合）
ロールはすでに作られていてインスタンスにロールが振り分られているとします。
（インスタンスに割り振られてない場合。ロールを作成→インスタンスのイメージを作成→イメージから作成時にロールを割り振ってください。同じインスタンスが２つある状態になります。）
IAMのサービスを開いて。ナビゲーションペインからロールを選択します。インスタンスに割り振られているロールを選択してアクセス許可のタブを開いてポリシーのアタッチを選択します。
![キャプチャ.PNG](https://qiita-image-store.s3.amazonaws.com/0/134267/6923dcf8-2110-c0cf-4b1a-9f8c523936ee.png)
フィルターのところを「カスタマー管理ポリシー」に変更して、２で作ったポリシーを選択しポリシーのアタッチを選択。

###インスタンスの設定（ロールの場合）
以下のコマンドを入力

``` 
git config --global credential.helper '!aws --region us-east-1 codecommit credential-helper $@' 
git config --global credential.UseHttpPath true 
```

ホームディレクトリに.gitconfigができます。上記で入力した情報が入ってます。

```
cd ~
cat .gitconfig 
```

---
###IAMサービス（ユーザーの場合）
IAMのサービスを選択してナビゲーションペインからユーザーを選択
新規ユーザーを作成を選択。適当に名前を入力して作成。
認証情報をダウンロードをする。
作成したユーザーを選択して、アクセス許可のタブのポリシーのアタッチを選択。
フィルターのところを「カスタマー管理ポリシー」に変更して、２で作ったポリシーを選択しポリシーのアタッチを選択。

###IAMサービス（ユーザーの場合（ssh接続の場合））
インスタンスで`ssh-keygem`と実行しペアキーを作成。~/.ssh/のディレクトリにid_rsaとid_rsa.pubが作成されます。
作成した公開鍵(id_rsa.pub)をコピーしておく。
IAMサービスを開きナビゲーションペインからユーザーを作成を選択。作成したユーザーを選択。
認証情報のタブの「AWS CodeCommit の SSH キー」の公開鍵のアップロードを選択。
コピーした公開鍵を貼り付けてssh公開キーのアップロードを選択。
sshキーIDが出てきますのでコピーする。(後に.ssh/configのUserに貼り付けます。)
![sshきーID.PNG](https://qiita-image-store.s3.amazonaws.com/0/134267/4432b91f-6266-d319-30d5-b14ab7abe11c.png)



###インスタンスの設定（ユーザーの場合（ssh接続の場合））

```
cd ~/.ssh/
touch config
chmod 600 config
vi config
```

```text:config
Host git-codecommit.us-east-1.amazonaws.com
        User [sshキーID]
        IdentityFile [秘密鍵があるディレクトリ]
```

以下のコマンドで接続できるか確認する。
`ssh git-codecommit.us-east-1.amazonaws.com`

###インスタンスの設定(ユーザーの場合(https接続の場合))
```
cd~
mkdir .aws
vi credentials
```

アクセスキーとシークレットキーはIAMユーザー作成時にダウンロードしたものに書いてあります。

```test:credentials
[CodeCommitProfile]
aws_access_key_id=[アクセスキー]
aws_secret_access_key=[シークレットキー]
```

以下のコマンドをやるとホームディレクトリに.gitconfigが作成されます。

```
git config --global credential.helper '!aws --region us-east-1 --profile CodeCommitProfile codecommit credential-helper $@'
git config --global credential.UseHttpPath true
```

---


#参考サイト
http://dev.classmethod.jp/cloud/aws/using-codecommit-git-repository-by-iam-role/