【Code3兄弟シリーズ】CodeCommit

記事タイトルとURLをコピーする

こんにちは、技術1課の多田です。

4月に入り、弊社に3人の新卒のメンバーがジョイン、中途の方も2名ジョインされました。
新しいメンバーとともにますますパワーアップしていくサーバーワークスにご期待ください!
 

さて、今回は、通称Code3兄弟について触ってみた結果をシリーズで投稿してみる初回となります。

そもそも、Code3兄弟とは以下3つのサービスのことを指します。

AWS CodeCommit

AWS CodeDeploy

AWS CodePipline
 

Code○○というサービスのため、そのような名称が付いているのですね。
そんなCode3兄弟ですが、この記事では、AWS CodeCommit(以下、CodeCommit)を触ってみようと思います。

CodeCommitのより詳しい情報は、こちらをご覧ください(英語のページになっています)。

以下、目次です。

  1. CodeCommitとは
  2. CodeCommitのセットアップ
  3. まとめ

CodeCommitとは

CodeCommitの特徴としては次のものがあります。

  • 安全、スケーラブル、マネージドかつプライベートなGit
  • Availability Zone(以下、AZ)を跨ぎデータを冗長化
  • GitのオブジェクトはS3に、GitのインデックスはDynamoDBが活用されており、高可用性、耐障害性、冗長性が確保されている
  • AWS Key Managment Serviceによりリポジトリは暗号化される
  • アクセス権はIAMで制御
  • リボジトリのサイズは無制限
  • AWS CLIやAWS SDKのみならず、既存のGitツールとも連動
  • Amazon Simple Notification ServiceでHTTPウェブフックの作成や、AWS Lambdaとも連携可能
  • 現時点で利用できるリージョンは、バージニアリージョンのみ

本サービスのイメージ図は次の通りです。

serviceimage

 

料金は、『アクティブなユーザー 1 人につき 1 USD/月』になります。
アクティブなユーザー 1 人につき、以下を毎月ご利用になれます。

  • 10 GB のストレージ/月
  • 2,000 件の Git リクエスト

未使用のストレージおよび Git リクエストを繰り越すことはできません。ユーザーに対してより多くのストレージまたは Git リクエストが必要な場合は、以下の料金で追加できます。

  • 0.06 USD/GB/月
  • 0.001 USD/Git リクエスト


尚、ここでいう『アクティブユーザーとは、次のように定義されています。

アクティブなユーザーとは、その月に Git リクエストまたは AWS マネジメントコンソール使用して AWS CodeCommit リポジトリにアクセスするすべての一意の AWS アイデンティティ (IAM ユーザー、IAM ロール、フェデレーティッドユーザー、ルートアカウント) を指します。

CodeCommitにアクセスできるユーザー = アクティブユーザー、ということですね。


GitHub Organizations版と費用面で比較すると、次のようになります。
尚、下記の料金は、10ユーザーの年間の料金となります。

  費用 備考
CodeCommit $120 1ユーザー$1/月
GitHub Organizations $840 1ユーザー$9/月(最初の5ユーザー $25/月)

 

CodeCommitは、GitHubの機能面で比較すると、WikiやIssue等の一部機能は存在しないのですが、
運用の手間は不要で、可用性も高いため、プライベートなリポジトリとして利用するには良いといえるでしょう。

CodeCommitのセットアップ

上記の特徴がある、CodeCommitをセットアップしてみます。
セットアップ手順は次の通りです。

  1. IAMのユーザー作成及びポリシーのアタッチ
  2. gitの環境構築
  3. リポジトリの作成
  4. HTTPSでリポジトリへアクセス
  5. SSHでリポジトリへアクセス

 

1、IAMのユーザー作成及びポリシーのアタッチ

CodeCommitにアクセスするためのIAMユーザーと、ポリシーを設定します。
任意のIAMユーザーを作成し、ポリシーとして「AWSCodeCommitFullAccess」をアタッチします。
また、リポジトリへのアクセスは、SSHで行うか、HTTPSで行うかの2つの方法があります。
今回は、SSHでも実行するため、「IAMUserSSHKeys」もアタッチします。
ポリシーをアタッチした状態としては、次の通りです。
codecommit_1

次の手順でAWS CLIを使用するため、IAMユーザーのアクセスキーIDとシークレットキーIDを取得してから次の手順に移行します。

 

2、gitの実行環境構築

続いてgitの実行環境を構築します。
尚、クライントマシンは、「MacBook Pro」で、OSは「OS X El Capitan」を使用しています。
まず、AWS CLIをインストールします。CodeCommitが扱えるのは、バージョン「1.7.38」以降になります。

セットアップの詳細は、こちらをご覧下さい。

セットアップ後バージョン確認と、設定を行います。

$ aws --version
aws-cli/1.10.1 Python/2.7.10 Darwin/15.4.0 botocore/1.3.23
$ aws configure --profile CodeCommit
AWS Access Key ID [None]: アクセスキーIDを入力後、Enterを押下
AWS Secret Access Key [None]: シークレットキーを入力後、Enterを押下
Default region name [None]: us-east-1入力後、Enterを押下
Default output format [None]: jsonを入力後、Enterを押下

CodeCommitが利用できるリージョンがバージニアリージョンのみなので、リージョンは固定ですね。
続いて、gitをインストールします。

$ brew install git

次に、credential.helperを使ってHTTPSを使ってアクセスするために認証情報を設定します。

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

実行後、「~/.gitconfig」を参照してみます。以下の状態になっていれば設定が適切に行われています。

$ cat .gitconfig
[credential]
    helper = !aws --region us-east-1 --profile CodeCommit codecommit credential-helper $@
    UseHttpPath = true

 

3、リポジトリの作成

続いて、リポジトリの作成を行います。
AWS マネジメントコンソールより作成を行います。
CodeCommitのサービスページへ移動後、「Get started」ボタンをクリックします。


codecommit_2

 

次に、作成するレポジトリ名と、レポジトリの説明を記載します。
記載後、「Create repository」ボタンをクリックします。

codecommit_3

 

作成に成功すると、次のような画像が表示されます。ボタン数クリックで、レポジトリが作成できました。

codecommit_4

 

4、HTTPSでリポジトリへアクセス

リポジトリ名をクリックし、「Code」ページに移動します。
その後、「Clone URL」をクリックすると、「HTTPS」を選択すると、アクセスするURLが表示されますので、コピーしておきます。
codecommit_5

ローカルマシンのターミナルにて次のコマンドを実行します。

$ git clone https://git-codecommit.us-east-1.amazonaws.com/v1/repos/20160404-Repo 20160404-Repo1
loning into '20160404-Repo1'...
warning: You appear to have cloned an empty repository.
Checking connectivity... done.

これでローカルにGitレポジトリが扱えるようになりました。

 

5、SSHでリポジトリへアクセス

リポジトリへアクセスするために、IAMユーザーに公開鍵を設定する必要があります。
そのため、ローカルマシンで「ssh-keygen」コマンドで秘密鍵と公開鍵作成します。

秘密鍵と公開鍵の生成方法については、弊社前田のこちらのブログをご覧下さい。

公開鍵は生成後、標準出力して出力した内容はコピーします。
その後、AWSマネジメントコンソールへ移動して、IAMユーザーページへ遷移して「Security Credentials」タブをクリックします。


ローカルマシンでセットアップした公開鍵をアップロードするので、「Upload SSH public key」ボタンをクリックします。

codecommit_6

 

遷移後のページで、先ほどコピーした公開鍵の内容を転記し、「Upload SSH public Key」ボタンをクリックします。

codecommit_7

 

アップロードが完了すると、以下のように公開鍵のリストに表示されます。
ここで表示されている、「SSH Key ID」をコピーしておきます。

codecommit_8

ローカルマシンに戻り、「~/.ssh/config」に次の内容を保存します。

Host git-codecommit.*.amazonaws.com
  User SSH Key ID
  IdentityFile 秘密鍵のパス

さて、今度は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 clone ssh://git-codecommit.us-east-1.amazonaws.com/v1/repos/20160404-Repo 20160404-Repo2
Cloning into '20160404-Repo2'...
Warning: Permanently added the RSA host key for IP address '72.21.203.185' to the list of known hosts.
warning: You appear to have cloned an empty repository.
Checking connectivity... done.

これで、ローカルマシンで開発ができるようになりました。
早速、gitコマンドを実行してみます。
 

$ touch README
$ git add README
$ git commit -m 'first commit'
[master (root-commit) b7ec56b] first commit
 Committer: Sadayoshi Tada <tada@Sadayoshi-no-MacBook-Pro.local>
Your name and email address were configured automatically based
on your username and hostname. Please check that they are accurate.
You can suppress this message by setting them explicitly:

git config --global user.name "Your Name"
git config --global user.email you@example.com

After doing this, you may fix the identity used for this commit with:

git commit --amend --reset-author

1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 README $ git log commit b7ec56b0633b66c50dea30f4b4513509c41cb6ae Author: Sadayoshi Tada <tada@Sadayoshi-no-MacBook-Pro.local> Date: Mon Apr 4 09:54:58 2016 +0900

first commit

$ git push origin master Counting objects: 3, done. Writing objects: 100% (3/3), 223 bytes | 0 bytes/s, done. Total 3 (delta 0), reused 0 (delta 0) remote: To ssh://git-codecommit.us-east-1.amazonaws.com/v1/repos/20160404-Repo * [new branch] master -> master

READMEファイルをリポジトリへアップしました。
AWSマネジメントコンソールでも確認してみます。

codecommit_9

リポジトリにREADMEファイルが表示され、アップロードされていることが確認できました。

まとめ

今回はCodeCommitの特徴のまとめと、実際にレポジトリを作ってみました。
次回は、CodeDeployを使ってCode3兄弟とより仲良くなりたいと思います。