CodeCommit入門 – Code三兄弟を知る

2015.10.20

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

はじめに

「Code三兄弟を知る」という副題をつけましたが、AWSで提供されている「Developer Tools」というまとめでくくられる以下の3サービス、通称(?)Code三兄弟についてシリーズとして取り上げていきたいと思います。

今回は第一回目として、AWS CodeCommitの導入をしようと思います。

AWS CodeCommitとは

AWS上やその他の環境で動かすアプリケーションを書く時に、どうやってバージョン管理するかという点はプロジェクトの最初に決めて置かなければなりません。

  • バージョン管理ツールは何を使う?Git?SVN?
  • リポジトリはどこに置く?社内LAN?クラウド上に自前構築?Github等のSaaS?
  • リポジトリを社外においた場合、そのセキュリティはどうやって担保する?

AWS CodeCommitは2014年11月のre:Inventで発表された、AWSがフルマネージドで提供するGitリポジトリサービスです。GitリポジトリサービスとしてはGithubが有名ですが、GitLabGitBucket等のオープンソース・ソフトウェアを導入されている方も多いかと思います。

AWS CodeCommitはフルマネージドサービスですので、自分でサーバを管理する必要なく、可用性の高いGitリポジトリを提供してくれます。更に、別のエントリで紹介する予定ですがAWS CodeDeployやAWS CodePipelineなどと連携して自動的なデプロイプロセスを実現することが可能です。

セットアップ

AWS CodeCommitはGitリポジトリです。基本的な使い方は先述のGithub等のGitリポジトリと大差ありません。最も特徴的な部分は、ユーザの単位がIAM単位となっている点でしょうか。CodeCommitリポジトリにSSHで接続するためには、通常のGitリポジトリと同様にサービス側にSSH公開鍵を登録しておきます。この際、公開鍵はIAMに紐付けて登録する形になります。

HTTPS接続の際にはAWS側の認証が必要になるため、AWS CLIの提供するCredential Helperという機能を利用する必要があります。この部分が他のGitリポジトリを利用する際と異なる手順になります。

以下では、CodeCommitにリポジトリを作成して、SSH接続を利用するユーザのセットアップを実施します。

リモートリポジトリ作成

Management Consoleで作成します。なお、上述の通りまだ東京リージョンでは利用ができませんのでVirginiaリージョンで作成します。いち早い東京上陸に期待!

全画面_2015_10_20_10_48

画面から中央のボタンを押します。

リポジトリ名と説明を入力してボタンを押せば、それだけで接続完了です。簡単ですね。

AWS_CodeCommit_Management

なお、リポジトリ名、説明ともにあとから名前の変更が可能です。ただしリポジトリ名は変更するとARN(AWS上のサービスに割り当てられる一意な識別子)も変更になるため、後述のリポジトリ接続セットアップ後は修正が必要な場合もあるのでご注意ください。

リポジトリの作成が完了したら、今度はリポジトリに接続するためのローカル端末を設定していきます。

なお、以下の手順は著者の環境(Mac OS X 10.10.5)をベースに説明させて頂きます。Windows環境でも大まかな手順は変わりませんが、細かなコマンドやファイルの位置などが異なりますので公式ドキュメントを併せて参照ください。

SSH接続セットアップ

CodeCommitリポジトリにSSHで接続するための手順を紹介します。

SSHキー登録

SSHキーの登録は通常通りssh-keygenコマンドで実行します。

~/$ ssh-keygen
~/.ssh$ ssh-keygen -t rsa -b 2048 -f codecommit
Generating public/private rsa key pair.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in codecommit.
Your public key has been saved in codecommit.pub.
The key fingerprint is:
85:be:7c:e4:67:83:df:cf:1d:de:61:8c:ee:34:90:5f mochizukimasao@localmachine
The key's randomart image is:
+--[ RSA 2048]----+
|                 |
|         .       |
|        . .      |
|       . .  .    |
|        S .o   E |
|       . + .o +  |
|        o + += = |
|         . +oo+.=|
|            oo.o=|
+-----------------+
~/.ssh$ ls -al codecommit*
-rw-------  1 mochizukimasao  staff  1679 10 20 10:59 codecommit
-rw-r--r--  1 mochizukimasao  staff   413 10 20 10:59 codecommit.pub

2ファイル作成されました。上が秘密鍵、下が公開鍵です。

IAMユーザ作成

CodeCommitへのアクセス権限を持ったIAMユーザと、公開鍵の登録を行います。

まずは操作対象のIAMユーザに対してCodeCommitFullAccessのManaged Policyを付与しておきます。

IAM_Management_Console

その後、IAMユーザの詳細画面の一番下にある「Upload SSH Public Key」のボタンを押し、先ほど作成したキーペアの公開鍵(<キー名>.pubのファイル)の中身をそのままコピー&ペーストします。

IAM_Management_Console

うまくいかなかった場合、ちゃんとそのままコピペできているかどうかを確認してください。成功した場合は、以下のようにSSH Keyの登録内容が表示されているはずです。(IDの部分はモザイク処理をかけています)

IAM_Management_Console

~/.ssh/config修正

Host git-codecommit.*.amazonaws.com
  User APKAXXXXXXXXXXXXXX
  IdentityFile ~/.ssh/codecommit

一行目は環境によらず固定です。2行目、3行目は適宜修正が必要な項目です。

2行目は先ほど公開鍵をアップロードしたあとに表示されたSSH Key ID(上の画像でモザイクをかけた部分)を記入します。 3行目は、先ほど作成したSSHの秘密鍵(.pubがつかない方)へのファイルパスを記載します。

接続確認

以下のコマンドのような出力が表示されたら、正常にCodeCommitへの接続が行えています。

~/.ssh$ ssh git-codecommit.us-east-1.amazonaws.com
Warning: Permanently added 'git-codecommit.us-east-1.amazonaws.com,54.239.20.180' (RSA) to the list of known hosts.
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リポジトリを利用するのと同様に、ローカルのGitリポジトリからのpushやpull等が行えます。もちろんコマンドラインだけではなく各種GUIツールからも利用可能です。

まとめ

Code3兄弟のうち、バージョンコントロールを担当するCodeCommitの簡単な環境セットアップを実施しました。

まだVirginiaリージョンでしか利用できませんが、AWSのフルマネージドサービスとして提供されるGitリポジトリとして単体でも活用可能です。ですが、その他のCodeDeploy、CodePipelineと組み合わせて利用することでCodeCommitの100%の力が出せると考えています。

追記 : 2017年5月に、CodeCommitの東京リージョン対応が発表されました。詳しくは以下のブログをご覧ください。[アップデート] AWS CodeCommit が東京リージョン対応 | Developers.IO

次回はCodeDeployを触ってみます。