git push で CodeCommit にもプッシュする
去年の re:Invent で発表されて今か今かと待ちわびていた AWS CodeCommit がついにリリースされました!
CodeCommit は AWS がホスティングする Git リポジトリでフルマネージドのサービスです。リポジトリのサイズに制限はなく、高可用性が謳われています(おそらく、データは S3 に置かれてると思います)。
また IAM でユーザーを管理するので、すでに AWS を使っていれば簡単に始められます。 CloudTrail も近いうちにサポートするようなので、Git リポジトリに対する操作ログも取れます。
GitHub / BitBucket と比べると機能が劣る
Git リポジトリのホスティングといえば GitHub や BitBucket がありますが、機能面では比べるまでもなく CodeCommit が劣っています。
ブラウザでソースコードを見ることはできませんし、Git フックもまだ使えないので CI と連携することもできません。いずれ機能は増えてくると思いますが、現時点では Git リポジトリの箱としか使えません。
とはいえ、無料枠(5 アクティブユーザ、50 GB のストレージ、10,000 Git リクエスト)は太っ腹ですし、他の AWS サービスとの連携も考えると魅力的です。
そこで、いま使っているリポジトリはそのままで、git push
したときに CodeCommit にもプッシュするようにしてみました。こうしておけば、いつでも移行できます。
リポジトリを作る
US East リージョンに切り替えてリポジトリを作ります(特に迷うところはないので手順は省略)。
リポジトリ名は S3 と同じように他と被らないようにする必要があります。リポジトリを作ると URL が発行されます。
ssh://git-codecommit.us-east-1.amazonaws.com/v1/repos/kindle_alert
今回は個人で運営してる Kindle Alert のリポジトリを作ってみました(使ったことがない人はこの機会にぜひ!)。
IAM ユーザに公開鍵を追加する
冒頭で紹介した公式ブログでは HTTPS 経由での手順が紹介されていますが SSH も当然使えます。 Mac や Linux なら ssh-agent を使っているでしょうし HTTPS を選ぶ理由はありません(Windows だと事情が違うのかもしれませんが)。
IAM ユーザの詳細ページを開くと CodeCommit の公開鍵を追加できるようになっているので、普段使っている公開鍵を登録します。 aws iam upload-ssh-public-key
でもアップロードできます。
SSH Key ID というのが SSH のユーザ名になります(上の画像は一部マスクしてます)。 GitHub や BitBucket は全員が git ユーザを使いますが、CodeCommit は個別のユーザが割り当てられます。
IAM ユーザに権限を付ける
CodeCommit のポリシーが用意されているので、IAM ユーザに権限を付けます。
- AWSCodeCommitFullAccess
- AWSCodeCommitPowerUser
- AWSCodeCommitReadOnly
自分でポリシーを書けばリポジトリ単位など柔軟に権限管理できますが、今回は AWSCodeCommitFullAccess
を付けました。
正しく設定できていれば SSH が通ります(ssh-agent を使ってない場合は -i で秘密鍵を指定してください)。
$ ssh APKAJ6JXXXXXXXXXXXXX@git-codecommit.us-east-1.amazonaws.com
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 の設定だけです。現在のリモートリポジトリは BitBucket になっています。
$ git remote -v
origin git@bitbucket.org:manabusakai/kindle_alert.git (fetch)
origin git@bitbucket.org:manabusakai/kindle_alert.git (push)
origin に CodeCommit の URL を追加します。 URL は ssh://
から始める必要があります。
$ git remote set-url --add origin ssh://APKAJ6JXXXXXXXXXXXXX@git-codecommit.us-east-1.amazonaws.com/v1/repos/kindle_alert
$ git remote -v
origin git@bitbucket.org:manabusakai/kindle_alert.git (fetch)
origin git@bitbucket.org:manabusakai/kindle_alert.git (push)
origin ssh://APKAJ6JXXXXXXXXXXXXX@git-codecommit.us-east-1.amazonaws.com/v1/repos/kindle_alert (push)
あとは、いつも通り git push origin master
とすれば BitBucket と CodeCommit にプッシュされます。
まとめ
US East リージョンなのでレイテンシが気になってましたが、GitHub や BitBucket も海外にあるので差は感じませんでした。一度設定してしまえば何も意識することなくプッシュできるので、まずは試してみてはいかがでしょうか。