AWS CodeCommitを使ってみたので、使うまでにやったこと、使ってみた感想をまとめました。
目次
AWS CodeCommitとは
AWS CodeCommitは、プライベートGitリポジトリをホストするサービスです。詳しくは下記参照。
https://docs.aws.amazon.com/ja_jp/codecommit/latest/userguide/welcome.html
目的
主に下記の検証が目的です。
- CodeCommitのUIの使い勝手
- GitHubのようなプルリクエストの運用ができるか確認
- レビュワーを指定してレビュー依頼
- ソースコードの行レベルでのレビュー
- 承認後にマージできるようにする
- 誤操作防止のために、ユーザごとにmainブランチ(masterブランチ)への直接のPushの禁止、などといった制限をかけることができるか
CodeCommitを利用するまで
AWS Code Commitの利用を開始する
任意のIAMユーザでログインし、下記のように CodeCommit
を選択し、画面を開きます。
リポジトリを作成する
- 最初はリポジトリが存在しないので、下記のボタンを押してリポジトリを作成します。
- リポジトリ名を入力し、作成ボタンをおすだけで、リポジトリ作成完了です。
- リポジトリが作成されるので、「ファイルの作成」を押して、初回コミットとして
README.md
を作成してみます。
コミット時の作成者名、Eメールアドレスは自由に入力が可能でした。
- コミットすると、下記のように
README.md
が追加されます。README.md
は、GitHubのように、その内容がUI上で表示されるようです。
ここまででリポジトリの作成・準備が完了です。この段階ではまだGitの認証情報がないので、まだClone・Push・Pullなどをすることができません。
続いて、Gitの認証情報の準備を進めます。
Gitユーザの作成
AWSのコントロールパネルへのログインに使っているIAMのログイン情報は、Gitの認証情報としては使えません。
ここでは、Gitのhttps認証するためのGit認証情報を生成をします。
IAM
の機能で設定できるので、下記のようにIAM
を選択し、画面を開きます。
- ユーザ一覧を表示します。
- ユーザを選択します。
- 「認証情報」タブを選択し、「AWS CodeCommit の HTTPS Git 認証情報」欄の「認証情報作成」を押します。
- すると、下記のようにユーザ名、パスワードが書かれたダイアログが開きます。これがGitの認証情報です。
リポジトリをCloneする
- CodeCommitのリポジトリのトップ画面に戻り、「HTTPSのクローン」を押すと、リポジトリのURLがコピーできます。
- VSCodeで、Cloneしてみます。リポジトリのURL、作成したGitの認証情報を使うと、無事にCloneが完了します。
ここまででCloneすることができたので、続いて本来の目的である使いやすさなどを検証していきます。
プルリクエストの検証
developブランチを作成し、mainブランチにマージするプルリクエストを作成して検証してみました。
プルリクエストそのものは、画面に沿って操作すればできるので、以下使用した感想を記載します。
- プルリクエスト作成時
- プルリクエスト作成時の画面は下記のように、GitHubと同様でマージ可能かどうか表示され、タイトルや内容を入力する箇所がありました。
- また、下記のように差分も表示されてわかりやすいです。
- ただそれ以外に入力項目はなく、レビュワーの指定や通知したいユーザへのメンションはできないようでした。
- プルリクエスト作成時の画面は下記のように、GitHubと同様でマージ可能かどうか表示され、タイトルや内容を入力する箇所がありました。
- プルリクエスト後
- 変更の差分を確認する画面があり、ファイルごと、行ごとのコメントが可能でした。
- プルリクエスト作成時と同じく、コメント時にメンションの指定はできないようでした。
- 変更の差分を確認する画面があり、ファイルごと、行ごとのコメントが可能でした。
承認制限設定の検証
承認ルールテンプレート機能を使うことで、mainブランチへマージするプルリクエストを承認がないとマージできないように設定する、といったことができます。
承認ルールテンプレートの作成
- CodeCommitの画面で、左のメニューから「承認ルールテンプレート」を開き、テンプレート作成ボタンを押します。
- 承認ルールテンプレートの内容を入力します。テンプレート名は全角文字は入力できませんでした。承認するユーザを設定することもできるのでここでは「test」というユーザを承認可能なユーザに設定します。
- 対象のブランチ名の指定もでき、今回はmainブランチへマージするプルリクエストを制限したいので、
main
と記載します。また、このルールを適用するリポジトリを指定することもできたので、指定しておきました。
承認ルールテンプレートの動作確認
- 下記のように、
user1
というユーザで、feature/test1
ブランチをmain
ブランチにマージするプルリクエストを作成しました。承認ルールテンプレートが適用され、この段階では、マージできない状態になっており、「1 中 0 のルールが満たされました」という表示が、承認ルールで設定した条件がまだ満たされていないことを表しています。
- 承認することができるユーザで、「承認」ボタンを押して承認します。
- その後、1.でプルリクエストを作成したユーザ
user1
の画面に戻ると、「マージ」ボタンが出現しており、マージができる状態になっていることがわかります。表示も「承認されました」に変わっています。
- ちなみに、「マージ」ボタンを押すと、下記のような画面が表示されマージへと進むことができるようになります。この辺りもGitHubと同様なことができる画面です。
承認テンプレート機能を使うことで、承認がないとマージできないといった運用をすることがCodeCommitでもできそうです。
ユーザの制限設定の検証
操作ミス防止で、mainブランチへの直接Pushできないように制限する設定をします。
このような制限はIAMの ポリシー
を作成することで制限することができす。
- 「IAM」と検索し、IAMのポリシーの画面を開き、表示される画面で「ポリシーを作成」ボタンを押します。
- 「JSON」タブを押すと、テキストエリアが表示されます。
- 表示されたテキストエリアに、下記を入力します。
refs/heads/main
の「main」の部分が、制限するブランチ名です。
12345678910111213141516171819202122{"Version": "2012-10-17","Statement": [{"Effect": "Deny","Action": ["codecommit:GitPush"],"Resource": "*","Condition": {"StringEqualsIfExists": {"codecommit:References": ["refs/heads/main"]},"Null": {"codecommit:References": false}}}]} - 画面下のボタンを押して画面遷移し、ポリシー名を
codecommit-deny-push-main-branch
として、登録まで進めると、ポリシーの作成は完了です。 - 作成したポリシーをユーザに設定します。IAMのユーザの詳細画面を開くと、「Permissions Policies」という欄があり、「アクセスアクセス権限の追加」を押下します。
- 下記のように、「AWSCodeCommitPowerUser」「codecommit-deny-push-main-branch」を設定します。(「AWSCodeCommitPowerUser」はCodeCommitを操作するための権限です。)
- ここまでで設定は完了です。試しに、上記を設定したユーザで、ローカルにて、mainブランチへのコミットを直接プッシュすると、下記のようなエラーになります。
12345678$ git pushEnumerating objects: 5, done.Counting objects: 100% (5/5), done.Writing objects: 100% (3/3), 261 bytes | 261.00 KiB/s, done.Total 3 (delta 0), reused 0 (delta 0), pack-reused 0To https://git-codecommit.us-east-2.amazonaws.com/v1/repos/xxxxx! [remote rejected] main -> main (You don't have permission to push changes to this branch.)error: failed to push some refs to 'https://git-codecommit.us-east-2.amazonaws.com/v1/repos/xxxxx'
感想
ここまで使用した感想のまとめです。
- プルリクエストを作る→レビューしてもらう→承認後UI上でマージ操作、の一連の流れができる
- プルリクエストでレビュワーの指定はできない
- GitHubでは、レビュワーを指定してレビュー対象者を指定していましたが、CodeCommitではできないようでした。ので、レビューしてもらうときはCodeCommit外で連絡する必要があります。
- プルリクエストやレビュー時のコメントでメンションの指定ができない
- メンションを使ってユーザに通知したい、といったことがCodeCommitではできないようでした。
GitHubに比べると機能は足りないですが、最低限のプルリクエストの運用は可能そうでした。
また、CodeBuildやCodeDeployなどとの連携は取りやすいと思いますので、
今後このあたりの連携についても、調査していこうかなと思います。