こんにちは、技術1課の多田です。
4月に入り、弊社に3人の新卒のメンバーがジョイン、中途の方も2名ジョインされました。
新しいメンバーとともにますますパワーアップしていくサーバーワークスにご期待ください!
さて、今回は、通称Code3兄弟について触ってみた結果をシリーズで投稿してみる初回となります。
そもそも、Code3兄弟とは以下3つのサービスのことを指します。
Code○○というサービスのため、そのような名称が付いているのですね。
そんなCode3兄弟ですが、この記事では、AWS CodeCommit(以下、CodeCommit)を触ってみようと思います。
CodeCommitのより詳しい情報は、こちらをご覧ください(英語のページになっています)。
以下、目次です。
- CodeCommitとは
- CodeCommitのセットアップ
- まとめ
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とも連携可能
- 現時点で利用できるリージョンは、バージニアリージョンのみ
本サービスのイメージ図は次の通りです。
料金は、『アクティブなユーザー 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をセットアップしてみます。
セットアップ手順は次の通りです。
- IAMのユーザー作成及びポリシーのアタッチ
- gitの環境構築
- リポジトリの作成
- HTTPSでリポジトリへアクセス
- SSHでリポジトリへアクセス
1、IAMのユーザー作成及びポリシーのアタッチ
CodeCommitにアクセスするためのIAMユーザーと、ポリシーを設定します。
任意のIAMユーザーを作成し、ポリシーとして「AWSCodeCommitFullAccess」をアタッチします。
また、リポジトリへのアクセスは、SSHで行うか、HTTPSで行うかの2つの方法があります。
今回は、SSHでも実行するため、「IAMUserSSHKeys」もアタッチします。
ポリシーをアタッチした状態としては、次の通りです。
次の手順で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」ボタンをクリックします。
次に、作成するレポジトリ名と、レポジトリの説明を記載します。
記載後、「Create repository」ボタンをクリックします。
作成に成功すると、次のような画像が表示されます。ボタン数クリックで、レポジトリが作成できました。
4、HTTPSでリポジトリへアクセス
リポジトリ名をクリックし、「Code」ページに移動します。
その後、「Clone URL」をクリックすると、「HTTPS」を選択すると、アクセスするURLが表示されますので、コピーしておきます。
ローカルマシンのターミナルにて次のコマンドを実行します。
$ 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」ボタンをクリックします。
遷移後のページで、先ほどコピーした公開鍵の内容を転記し、「Upload SSH public Key」ボタンをクリックします。
アップロードが完了すると、以下のように公開鍵のリストに表示されます。
ここで表示されている、「SSH Key ID」をコピーしておきます。
ローカルマシンに戻り、「~/.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マネジメントコンソールでも確認してみます。
リポジトリにREADMEファイルが表示され、アップロードされていることが確認できました。
まとめ
今回はCodeCommitの特徴のまとめと、実際にレポジトリを作ってみました。
次回は、CodeDeployを使ってCode3兄弟とより仲良くなりたいと思います。