AWS CodeCommitをローカル環境のUbuntu14.04から導入したときのメモです。
SSHでgit cloneする場合は導入がスムーズだったのですが、httpsでgit cloneした場合はGitをOpenSSLでコンパイルする作業があり、思った以上に工数があったので、それの解決方法も追記しました。
IAMグループの作成
- IAMで"グループ"の項目から新しいグループの作成"を選択する。
- 手順1でグループ名の選択でグループ名(例. codecommit-test)を入力する。
- 手順2で"ポリシーのアタッチ"でAWSCodeCommitPowerUserを選択する。
- 手順3で設定の確認をしたらグループの作成を選択する。
IAMユーザーの作成
- "ユーザー"の項目から"新規ユーザーの作成"を選択する。
- ユーザー名を入力して、発行される認証情報(以下のようなアクセスキーIDとシークレットアクセスキーの情報)のcsvファイルをダウンロードして閉じるを選択する。 ※再度ダウンロードできなくなるので注意(ダウンロードしないで閉じようとすると、その旨が表示されて本当に閉じていいか確認画面が出てくる)
test-user
アクセスキー ID: XXXXXXXXXXXXXXXXXXXX
シークレットアクセスキー: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
作成したIAMユーザーをグループにアタッチ
- 作成したユーザーを選択して、"グループ"から"グループにユーザーを追加"を選択して先ほど作成した湯ループを選択してアタッチする。
公開鍵のアップロード
- ターミナルから以下のコマンドを実行
$ ssh-keygen
- IAMユーザーの"認証情報"タブ中の"AWS CodeCommit の SSH キー"の項目から"SSH 公開キーのアップロード"を選択する。
-
ssh-keygen
で作成した公開鍵の情報(.pubの識別子の中身)をコピペする。
SSHの設定
~/.ssh/config中に以下の内容を追記する
Host '<CodeCommitのエンドポイントのホスト名>'
User '<SSH ID>'
IdentityFile '<ssh-keyで鍵を生成するときに指定した鍵のパス>'
HostはCodeCommitの"Code"項目中の"Clone URL"などから確認できる。git-codecommit.<リージョン名>.amazonaws.com(2016年6月現在ではリージョン名はus-east-1のみ)となる。
UserはIAMユーザーの"認証情報"タブ中の"AWS CodeCommit の SSH キー"の項目のSSH IDとなる。
設定ができたかの確認
$ ssh git-codecommit.us-east-1.amazonaws.com
Enter passphrase for key '/home/test-user/awstest/id_rsa_codecommit_test':
You have successfully authenticated over SSH. You can use Git to interact with AWS CodeCommit. Interactive shells are not supported.Connection to git-codecommit.us-east-1.amazonaws.com closed by remote host.
Connection to git-codecommit.us-east-1.amazonaws.com closed.
以上で通常通りにgitを使えるようになる。
CodeCommitでgit cloneしてみる
sshでgitを操作する場合
$ git clone ssh://git-codecommit.us-east-1.amazonaws.com/v1/repos/test-codecommit test-repo
鍵のフレーズが問われるので、ssh-keygen
で生成したときに設定したパスワードを入力する。
httpsでgitを操作する場合
httpsで操作する場合は以下のようなエラーが出てgit cloneなどの操作ができなかったので対処法について書きます。
$ git clone https://git-codecommit.us-east-1.amazonaws.com/v1/repos/test-codecommit
Cloning into 'test-codecommit'...
fatal: unable to access 'https://git-codecommit.us-east-1.amazonaws.com/v1/repos/test-codecommit/': gnutls_handshake() failed: Illegal parameter
何もしない状態でUbuntu14.04からgit cloneをするとエラーになる。
エラーの内容としてはGnuTLSでエラーが出ます。
これに対しては、GitをOpenSSLでコンパイルする必要がある。
GitをOpenSSLでコンパイル
$ sudo apt-get update
$ sudo apt-get install build-essential fakeroot
$ dpkg-dev libcurl4-openssl-dev
$ sudo apt-get build-dep git
$ mkdir ~/git-openssl
$ cd ~/git-openssl
# gitのソースコードをダウンロード
$ apt-get source git
$ gpg --list-keys
/home/test-user/.gnupg/pubring.gpg
------------------------------
pub 4096R/AA02C70A 2011-09-01
uid Tyler Hicks <tyhicks@tyhicks.net>
uid Tyler Hicks <tyhicks@ou.edu>
uid Tyler Hicks <tyhicks@gmail.com>
uid Tyler Hicks <tyhicks@kernel.org>
uid Tyler Hicks <tyhicks@ubuntu.com>
uid Tyler Hicks <tyhicks@canonical.com>
uid Tyler Hicks <tyler.hicks@ubuntu.com>
uid Tyler Hicks <tyler.hicks@canonical.com>
sub 4096R/CB16CDD4 2011-09-01
#$ sudo gpg --armor --export AA02C70A | sudo apt-key add -
#gpg: 警告: 構成ファイル「/home/test-user/.gnupg/gpg.conf」の安全でない所有者
#OK
$ gpg --no-default-keyring -a --export AA02C70A | gpg --no-default-keyring --keyring ~/.gnupg/trustedkeys.gpg --import -
gpg: 鍵輪「/home/test-user/.gnupg/trustedkeys.gpg」ができました
gpg: 鍵AA02C70A: 公開鍵“Tyler Hicks <tyhicks@tyhicks.net>”を読み込みました
gpg: 処理数の合計: 1
gpg: 読込み: 1 (RSA: 1)
gpg: 絶対的に信用する鍵が見つかりません
$ dpkg-source -x git_1.9.1-1ubuntu0.3.dsc
dpkg-source: info: extracting git in git-1.9.1
dpkg-source: info: unpacking git_1.9.1.orig.tar.xz
dpkg-source: info: unpacking git_1.9.1-1ubuntu0.3.debian.tar.gz
次に重要な作業があり、gksu
を使うなどしてdebian/control
中のlibcurl4-gnutls-dev
をlibcurl4-openssl-dev
に書き替える。
$ gksu vim debian/control
パッケージをビルドする。しばらく時間がかかる。
$ sudo apt-get install libcurl4-openssl-dev
$ sudo dpkg-buildpackage -rfakeroot -p -uc -us
ビルドしたパッケージをインストールする。
$ cd ../
$ sudo dpkg -i git_1.9.1-1ubuntu0.3_amd64.deb
git credential helperの設定
$ git config --global credential.helper '!aws --region us-east-1 codecommit credential-helper $@'
$ git config --global credential.UseHttpPath true
すると、~/.gitconfig
に以下の内容が追記される。
[credential]
helper = !aws --region us-east-1 codecommit credential-helper $@
UseHttpPath = true
以上でgitが使えるようになる。
(追記) AWS CodeCommit CLIコマンド 一覧
CodeCommitには以下の14種類のコマンドが用意されている。
batch-get-repositories
create-branch
create-repository
delete-repository
get-branch
get-repository
get-repository-triggers
list-branches
list-repositories
put-repository-triggers
test-repository-triggers
update-default-branch
update-repository-description
update-repository-name
例えば、リモートのブランチの一覧を表示させたいときは以下のように入力する。
aws codecommit list-branches --repository-name test-codecommit --region us-east-1
参考
- gnutls_handshake() failed: Illegal parameterについて http://askubuntu.com/questions/186847/error-gnutls-handshake-failed-when-connecting-to-https-servers
- gpg: 署名を検査できません: 公開鍵が見つかりません http://d.hatena.ne.jp/labunix/20130528
- Setup Steps for HTTPS Connections to AWS CodeCommit Repositories on Linux, OS X, or Unix http://docs.aws.amazon.com/codecommit/latest/userguide/setting-up-https-unixes.html#setting-up-https-unixes-credential-helper
- AWS CodeCommit Command Line Reference http://docs.aws.amazon.com/codecommit/latest/userguide/cmd-ref.html