AWS CodeCommitを使った感想

AWS CodeCommitを使ってみたので、使うまでにやったこと、使ってみた感想をまとめました。

AWS CodeCommitとは

AWS CodeCommitは、プライベートGitリポジトリをホストするサービスです。詳しくは下記参照。
https://docs.aws.amazon.com/ja_jp/codecommit/latest/userguide/welcome.html

目的

主に下記の検証が目的です。

  1. CodeCommitのUIの使い勝手
  2. GitHubのようなプルリクエストの運用ができるか確認
    1. レビュワーを指定してレビュー依頼
    2. ソースコードの行レベルでのレビュー
    3. 承認後にマージできるようにする
  3. 誤操作防止のために、ユーザごとにmainブランチ(masterブランチ)への直接のPushの禁止、などといった制限をかけることができるか

CodeCommitを利用するまで

AWS Code Commitの利用を開始する

任意のIAMユーザでログインし、下記のように CodeCommit を選択し、画面を開きます。

リポジトリを作成する

  1. 最初はリポジトリが存在しないので、下記のボタンを押してリポジトリを作成します。
  2. リポジトリ名を入力し、作成ボタンをおすだけで、リポジトリ作成完了です。
  3. リポジトリが作成されるので、「ファイルの作成」を押して、初回コミットとして README.md を作成してみます。
    コミット時の作成者名、Eメールアドレスは自由に入力が可能でした。

  4. コミットすると、下記のように README.md が追加されます。README.md は、GitHubのように、その内容がUI上で表示されるようです。

ここまででリポジトリの作成・準備が完了です。この段階ではまだGitの認証情報がないので、まだClone・Push・Pullなどをすることができません。
続いて、Gitの認証情報の準備を進めます。

Gitユーザの作成

AWSのコントロールパネルへのログインに使っているIAMのログイン情報は、Gitの認証情報としては使えません。
ここでは、Gitのhttps認証するためのGit認証情報を生成をします。

  1. IAM の機能で設定できるので、下記のように IAM を選択し、画面を開きます。
  2. ユーザ一覧を表示します。
  3. ユーザを選択します。
  4. 「認証情報」タブを選択し、「AWS CodeCommit の HTTPS Git 認証情報」欄の「認証情報作成」を押します。

  5. すると、下記のようにユーザ名、パスワードが書かれたダイアログが開きます。これがGitの認証情報です。

リポジトリをCloneする

  1. CodeCommitのリポジトリのトップ画面に戻り、「HTTPSのクローン」を押すと、リポジトリのURLがコピーできます。
  2. VSCodeで、Cloneしてみます。リポジトリのURL、作成したGitの認証情報を使うと、無事にCloneが完了します。

    ここまででCloneすることができたので、続いて本来の目的である使いやすさなどを検証していきます。

プルリクエストの検証

developブランチを作成し、mainブランチにマージするプルリクエストを作成して検証してみました。
プルリクエストそのものは、画面に沿って操作すればできるので、以下使用した感想を記載します。

  1. プルリクエスト作成時
    • プルリクエスト作成時の画面は下記のように、GitHubと同様でマージ可能かどうか表示され、タイトルや内容を入力する箇所がありました。
    • また、下記のように差分も表示されてわかりやすいです。
    • ただそれ以外に入力項目はなく、レビュワーの指定や通知したいユーザへのメンションはできないようでした。
  2. プルリクエスト後
    • 変更の差分を確認する画面があり、ファイルごと、行ごとのコメントが可能でした。

    • プルリクエスト作成時と同じく、コメント時にメンションの指定はできないようでした。

承認制限設定の検証

承認ルールテンプレート機能を使うことで、mainブランチへマージするプルリクエストを承認がないとマージできないように設定する、といったことができます。

承認ルールテンプレートの作成

  1. CodeCommitの画面で、左のメニューから「承認ルールテンプレート」を開き、テンプレート作成ボタンを押します。
  2. 承認ルールテンプレートの内容を入力します。テンプレート名は全角文字は入力できませんでした。承認するユーザを設定することもできるのでここでは「test」というユーザを承認可能なユーザに設定します。
  3. 対象のブランチ名の指定もでき、今回はmainブランチへマージするプルリクエストを制限したいので、mainと記載します。また、このルールを適用するリポジトリを指定することもできたので、指定しておきました。

承認ルールテンプレートの動作確認

  1. 下記のように、 user1というユーザで、feature/test1ブランチをmainブランチにマージするプルリクエストを作成しました。承認ルールテンプレートが適用され、この段階では、マージできない状態になっており、「1 中 0 のルールが満たされました」という表示が、承認ルールで設定した条件がまだ満たされていないことを表しています。
  2. 承認することができるユーザで、「承認」ボタンを押して承認します。
  3. その後、1.でプルリクエストを作成したユーザuser1の画面に戻ると、「マージ」ボタンが出現しており、マージができる状態になっていることがわかります。表示も「承認されました」に変わっています。
  4. ちなみに、「マージ」ボタンを押すと、下記のような画面が表示されマージへと進むことができるようになります。この辺りもGitHubと同様なことができる画面です。

承認テンプレート機能を使うことで、承認がないとマージできないといった運用をすることがCodeCommitでもできそうです。

ユーザの制限設定の検証

操作ミス防止で、mainブランチへの直接Pushできないように制限する設定をします。
このような制限はIAMの ポリシー を作成することで制限することができす。

  1. 「IAM」と検索し、IAMのポリシーの画面を開き、表示される画面で「ポリシーを作成」ボタンを押します。
  2. 「JSON」タブを押すと、テキストエリアが表示されます。
  3. 表示されたテキストエリアに、下記を入力します。refs/heads/main の「main」の部分が、制限するブランチ名です。
  4. 画面下のボタンを押して画面遷移し、ポリシー名をcodecommit-deny-push-main-branch として、登録まで進めると、ポリシーの作成は完了です。
  5. 作成したポリシーをユーザに設定します。IAMのユーザの詳細画面を開くと、「Permissions Policies」という欄があり、「アクセスアクセス権限の追加」を押下します。
  6. 下記のように、「AWSCodeCommitPowerUser」「codecommit-deny-push-main-branch」を設定します。(「AWSCodeCommitPowerUser」はCodeCommitを操作するための権限です。)
  7. ここまでで設定は完了です。試しに、上記を設定したユーザで、ローカルにて、mainブランチへのコミットを直接プッシュすると、下記のようなエラーになります。

感想

ここまで使用した感想のまとめです。

  1. プルリクエストを作る→レビューしてもらう→承認後UI上でマージ操作、の一連の流れができる
  2. プルリクエストでレビュワーの指定はできない
    1. GitHubでは、レビュワーを指定してレビュー対象者を指定していましたが、CodeCommitではできないようでした。ので、レビューしてもらうときはCodeCommit外で連絡する必要があります。
  3. プルリクエストやレビュー時のコメントでメンションの指定ができない
    1. メンションを使ってユーザに通知したい、といったことがCodeCommitではできないようでした。

GitHubに比べると機能は足りないですが、最低限のプルリクエストの運用は可能そうでした。
また、CodeBuildやCodeDeployなどとの連携は取りやすいと思いますので、
今後このあたりの連携についても、調査していこうかなと思います。