Gitリポジトリサービス「AWS CodeCommit」を知る
目次
AWS CodeCommitとは?
アプリケーション開発において、ソースコードや設定ファイルの管理は非常に重要なタスクとなっています。また、それらをエクセルをはじめとしたオフィスアプリケーションで実施すると、更新の手間やファイルのロック等の関係でファイル管理が非常に困難になってしまいます。そのような課題を解決するために、世間では「Git」というバージョン管理システムを利用することが一般的になっています。そのGitを利用したサービスの一つとしてAWSが提供している「AWS CodeCommit」があります。この記事では、AWS CodeCommitの魅力について、わかりやすくご紹介します。
Gitとは?
まず、CodeCommitを理解するためには、Gitについて知ることが重要です。Gitとは、ファイル管理とバージョン管理を行うことができる管理システムです。通常のアプリケーション開発では、1人では行わず、複数の開発者が同時に異なる場所から作業を行います。それによってファイルの更新のデグレーション(ソフトウェアの改修によってシステムの品質が低下するトラブル)や更新履歴が追えなくなってしまうことが起きます。ファイルのデグレーションはそのままシステム障害に直結し、更新履歴が追えなくなることは、監査等の際に指摘される可能性があります。Gitはこのような事態にならないよう、コードの変更履歴を追跡できる仕組みを提供します。Gitを使うことで、誤ってファイルを削除した場合の復元や、過去のバージョンに戻りたい場合でも容易に対応できるのが特徴です。Gitは、リポジトリ(変更履歴が保存される場所)を中心に動作します。各開発者はリポジトリのコピーを手元で保持し、作業内容をローカルで保存できます。これにより、チーム内で効率的に開発を進めることができます。
AWS CodeCommitとは?
AWS CodeCommitは、AWSが提供するGitベースのソースコード管理サービスです。クラウド上でソースコードを安全に保存、管理、共有できるサービスであり、Gitの機能をそのまま利用できるため、従来のGitユーザーでも簡単に移行可能です。
AWS CodeCommitとGitHubの比較
Gitベースのソースコード管理サービスとして、AWS CodeCommitとよく比較されるのが「GitHub」です。ここでは、両者の特徴を比較していきます。
GitHubとは?
GitHubは、世界中で最も人気のあるGitベースのファイル管理プラットフォームです。2018年にMicrosoftに買収されたことにより、Microsoft傘下のサービスとなっています。GitHub上で様々なオープンソースプロジェクトが立ち上がっていたり、開発者コミュニティとのコラボレーションが行われていたりと、事実上のデファクトスタンダードとなっており、優れた環境を提供しています。GitHubは企業向けのプライベートリポジトリも提供しており、様々な規模のチームが利用しています。
CodeCommitとGitHubの比較
- セキュリティ…CodeCommitはAWS IAMでの厳密なアクセス制御と暗号化が可能です。GitHubにも権限制御の組み込みセキュリティ機能がありますが、IAMほどの柔軟性はありません。
- スケーラビリティ…CodeCommitは無制限のリポジトリサイズが提供されています。GitHubはプランによりリポジトリサイズの制限があります
- 他のサービスとの連携…CodeCommitはAWSの他のサービスとの連携が密に可能です。GitHubはGitHubActionsといったCICDの機能や、タスク管理機能のほか、AWS、GoogleCloud、Microsoft Azureなどの他のクラウドのとの連携も可能です。
- 価格…CodeCommitはリポジトリ自体は無料で利用可能です。なお、連携する他のAWSサービスの料金がかかることには留意が必要です。GitHubは無料プランがありますが、機能が制限されるため課金プランの選択が必要な場合が多いです。
それぞれのユースケースは?
CodeCommitは、AWSの強力なセキュリティ機能を活用できるため、特にセキュリティに厳しい業界や企業に向いています。IAMを利用してアクセス制御が容易に行えるため、厳密な権限管理が求められる場合には大きなメリットとなります。また、既存のAWS環境がある場合もCodeCommitがいいでしょう。一方で、社内でAWS以外のクラウドを利用している場合はGitHubが適しています。また、開発を外部委託している場合はGitHubのほうが委託会社の教育コストが低くなるでしょう。
AWS CODEシリーズを活用して柔軟な開発環境を実現するスタイルズのDevOps(CI/CD)導入支援サービスはこちら→
AWS CodeCommitにおけるセキュリティ
認証認可
認証はIAMユーザーのGitクレデンシャルを払いだすか、パブリックキーとプライベートキーのペアを生成してSSHで認証を行うか、の方法になります。SSHの場合、発行したパブリックキーはIAMユーザーと紐づいている必要があります。認可については、Gitクレデンシャルやパブリックキーが紐づいたIAMユーザーや、IAMロールにポリシーを適用することできめ細やかな権限設定が可能です。
外部とのコラボレーション
外部のユーザーとのコラボレーションは、先述の認証情報を共有するか、外部のユーザーがAWSアカウントを保有している場合はIAMロールとAWS STSのAssumeRoleAPIを用いたスイッチロールを利用することにより、外部ユーザーとのコラボレーションが可能です。
暗号化
リポジトリ自体はAWS KMSと連携して暗号化がされます。自動で暗号化されるため、能動的に設定を行う必要がありません。
AWS CodeCommit の運用方法と承認ルール
CodeCommitはきめ細やかな権限設定が可能ですが、具体的にどのような権限を用意し、どのような運用をすればいいのか、記載していきます。
ユーザーの定義
以下のような役割のユーザー区分を用意することで、セキュアかつ効率的な運用が実現できます。
- 開発者ロール…担当のプロジェクトにおけるリポジトリのみ、アクセス権限が付与されます。アプリケーションコードの更新(追加・修正・削除)やプルリクエストを行う役割で、コメントの作成やPull、Pushが可能です。
- チームリーダーロール…担当のプロジェクトにおけるリポジトリのみ、アクセス権限が付与されます。プルリクエストの承認を行う役割を持ちます。
- 管理者ロール…すべてのリポジトリに対して権限を持ちます。プルリクエストにコメントしたりマージ、Closeする権限を持ちます。
開発のながれ
CodeCommitを利用したアプリケーション開発は通常のGitを用いた流れとほとんど同じです。具体的には下記のような流れになります。
- リポジトリの作成…CodeCommitでリポジトリを作成し、そこにソースコードを保存します。リポジトリはAWSマネジメントコンソールやCLIを使って簡単に作成できます。
- ローカル環境での作業…各開発者はリポジトリをクローンし、ローカル環境で作業を行います。変更が完了したら、Gitコマンドを使ってコミットし、ローカルの変更を保存します。
- プッシュとコードレビュー…ローカルでコミットされた変更は、リモートのCodeCommitリポジトリにプッシュされます。その後、他の開発者やリーダーが変更内容をレビューし、品質の確認やフィードバックを行います。
大きな違いは、他のAWSサービスと連携することで、3以降の手順を自動化することができます。例えば、プッシュされたコードは、AWS CodeBuildやCodePipelineを利用して自動ビルド・テストを行うことができます。このパイプラインにより、テストからデプロイまでの工数を大幅に削減することができます。
AWS CODEシリーズを活用して柔軟な開発環境を実現するスタイルズのDevOps(CI/CD)導入支援サービスはこちら→
まとめ
AWS CodeCommitはソースコードを効率的に管理し、ファイルのデグレーションによるシステムエラーなどを防ぐだけでなく、開発者にとってストレスがない環境を提供します。GitHubなどの同様のサービスと比較し、AWSにおけるほかのサービスとの連携やセキュリティの機能が豊富です。また、AWS CodeBuildやCodePipelineと連携することで高速にアプリケーションの更新が可能となります。利用する際は他のサービスとの連携や開発フローの整理も重要です。
注記
2024年7月、AWSはCodeCommit を含む複数のサービスの新規利用受付を終了すると発表しました。CodeCommit の代替としては、GitHub や GitLab などの外部の Git リポジトリサービスが候補となります。これらのサービスは、AWS との連携機能も提供しており、CodeCommitからの移行も比較的スムーズに行える可能性があります。