【使い方メモ】10分で使えるAmazon CodeCommit

 Amazon CodeCommitは、プライベートGitリポジトリをホスティングするAWSのマネージドサービスです。先日、複数の友人からCodeCommitについて質問されたので、情報の整理もかねて、利用手順を整理していきます。他にも、分かりやすい解説ブログはあるのですが、手順の最初から最後までが書かれているものが見つからないので、AWSにそれほど慣れてない方でも使用できるように、なるべく丁寧に書いていきたいと思います。分かりにくい部分などありましたら追記しますので、ぜひコメントいただければと思います。

  • リポジトリの作成
  • 作成したリポジトリをgit cloneする(HTTPS編)
  • 作成したリポジトリをgit cloneする(SSH編)

Amazon CodeCommitでのリポジトリの作成方法

 リポジトリは非常に簡単に作成することができます。まず、CodeCommitの画面に遷移します。

f:id:ketancho_jp:20170910150853p:plain

 初めてアクセスしたときは、上記のような画面になると思います。ここでは「今すぐ始める」としてください。すると、下記のようなリポジトリ作成画面に遷移します。

f:id:ketancho_jp:20170910151006p:plain

 ここでは、「CodeCommit-Sample」というリポジトリを作成します。「リポジトリの作成」ボタンを押下してください。以上で、リポジトリの作成が完了です。簡単ですね。

HTTPSでCodeCommitリポジトリに接続する

 CodeCommitを初めて使う方は、git clone時につまずく方が多いようです。GitHubなどの他のGitサービスに比べて、接続までの手順が1手2手多いことが原因のようです。CodeCommitでは、HTTPS方式SSH方式 のふたつの方式でリポジトリに接続することができます。ここではまず、HTTPS方式について説明していきます。

 HTTPS 方式はIAMユーザのアクセスキー、シークレットキーを利用して接続する方式です。普段からAWS CLIを用いている方は、こちらの方式の方が簡単だと思います。

前提

  • gitがインストールされている
  • AWS CLIがインストールされている

IAMユーザを作成する

 まず、リポジトリに接続できる権限を持つIAMユーザを作成します。CodeCommit関連の権限と、IAMの一部権限が必要になります。IAMユーザは、IAM > ユーザ > ユーザを追加 と遷移することで作成することができます。ここでは、CodeCommitUser というIAMユーザを作成します。

f:id:ketancho_jp:20170910152303p:plain

 次のページでIAMユーザの権限を設定します。既存のポリシーを直接アタッチから下記のポリシーをアタッチしてください。

  • AWSCodeCommitPowerUser
  • IAMSelfManageServiceSpecificCredentials
  • IAMReadOnlyAccess

f:id:ketancho_jp:20170910152942p:plain

 ユーザを作成すると、下記のようにアクセスキー、シークレットキーが表示されます。次の手順で必要になるので、控えておいてください。

f:id:ketancho_jp:20170910154216p:plain

AWS CLIの設定

続いて、CodeCommitUserのアクセスキー、シークレットキーを入力します。--profile コマンドでプロファイル名をつけることにします。先ほど作成したIAMユーザのアクセスキーとシークレットキーを入力してください。リージョンは、東京リージョンを示すap-northeast-1としていますが、利用するリージョンが他リージョンであれば、適宜変更してください。

$ aws configure --profile CodeCommitUser
AWS Access Key ID [None]: AKIA****(ご自身のものを入力してください)
AWS Secret Access Key [None]: pnjT****(ご自身のものを入力してください)
Default region name [None]: ap-northeast-1
Default output format [None]: json

認証ヘルパーの設定をする

続いて、gitの認証ヘルパーの設定を行います。CodeCommitUser となっている部分は、先ほどaws configureコマンドで指定したプロファイル名を指定してください。

$ git config --global credential.helper '!aws --region ap-northeast-1 --profile CodeCommitUser codecommit credential-helper $@'
$ git config --global credential.UseHttpPath true

git cloneする

ここまでで準備完了です。git cloneコマンドを実行してみてください。

$ git clone https://git-codecommit.ap-northeast-1.amazonaws.com/v1/repos/CodeCommit-Sample
Cloning into 'CodeCommit-Sample'...
warning: You appear to have cloned an empty repository.

SSHでCodeCommitリポジトリに接続する

続いて、SSHキーを作ってCodeCommitに接続する手順を見ていきます。

SSHの秘密鍵&公開鍵を作成する

ssh-keygen コマンドで、秘密鍵と公開鍵を作成します

$ ssh-keygen 
Generating public/private rsa key pair.
Enter file in which to save the key (/Users/**/.ssh/id_rsa):  【Enter】
Enter passphrase (empty for no passphrase): 【Enter】
Enter same passphrase again: 【Enter】
Your identification has been saved in /Users/**/.ssh/id_rsa.
Your public key has been saved in /Users/**/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:UqU2xePE4h66R1czb3HPCam8OVXYBaYUzzjSN/r7eV4 **@**-no-MacBook-Air.local
The key's randomart image is:
+---[RSA 2048]----+
|         oo o.o. |
.. 省略
+----[SHA256]-----+

$ ll .ssh/ | grep id
-rw-------   1 ** staff 1679  9 23 08:47 id_rsa
-rw-r--r--   1 ** staff  417  9 23 08:47 id_rsa.pub

秘密鍵は、適当な名前に変えてあげるといいでしょう。

$ mv .ssh/id_rsa .ssh/codecommit-sample

公開鍵をIAMユーザに紐付ける

作成した公開鍵をIAMユーザに紐付けます。 まず、公開鍵のテキストをコピーしてください。

$ cat .ssh/id_rsa.pub 
ssh-rsa AAAAB3NzaC1(省略)

コピーした公開鍵をIAMユーザに紐付けます。 IAM > ユーザ > アップロード対象のユーザを選択 > 認証情報 > SSH公開鍵のアップロード を選択すると、下記のようなダイアログが表示されるので、こちらに先ほどのテキストを貼り付けましょう。

f:id:ketancho_jp:20170930145715p:plain

下記のようにSSHキーIDが表示されればOKです。 このIDはローカルPCの設定で必要になるので控えておいてください。

f:id:ketancho_jp:20170930154132p:plain

ローカル環境のSSH設定を行う

.ssh/config ファイルに、下記の情報を書き込みます。 User には先ほどのSSHキーIDを書き込みます。 Host はリージョンによって変わるので注意が必要です。

Host git-codecommit.ap-northeast-1.amazonaws.com
 User APK*** (SSHキーID)
 IdentityFile ~/.ssh/codecommit-sample

最後に Git Clone できるか確認します。

$ git clone ssh://git-codecommit.ap-northeast-1.amazonaws.com/v1/repos/CodeCommit-Sample
Cloning into 'CodeCommit-Sample'...
warning: You appear to have cloned an empty repository.

うまくいっているようです。

まとめ

CodeCommit は、数クリックで Git リポジトリを作成してくれる非常に便利なサービスです。 また、他のCode*サービスとの連携も豊富で、マネージドなCI/CD環境を作る際の起点となるサービスです。

あとは、GitHub や Bitbucket のように Pull Request の機能がつくとなおありがたいです。 AWSさんの今後のアップデートに期待です。

(2017/12/16追記)Pull Request 機能がリリースされました!

www.ketancho.net