目次
AWS CodeCommit 完全ガイド v2.0
フルマネージドプライベート Git リポジトリサービス(2024-2026 年版)
概要
AWS CodeCommit は 「AWS 上で実行されるフルマネージドプライベート Git リポジトリサービス」 です。GitHub・GitLab・Bitbucket のように Git リポジトリをホスティングし、IAM による細かなアクセス制御、KMS による暗号化、VPC エンドポイント対応、CloudTrail 監査ログ、CodePipeline・CodeBuild との統合などを提供します。
重要な宣告:CodeCommit の段階的廃止予定
- 2024 年 6 月:新規顧客向けサービス一時停止
- 2024 年 11 月:サービス復帰(新規顧客受け入れ再開)
- 現状:新規顧客対応が再開されていますが、AWS は GitHub・GitLab・Bitbucket への移行を推奨
歴史と現状
2014-2023 年:標準的な Git ホスティング
AWS CodeCommit は 2014 年にリリースされ、以下の特徴で採用されていました:
CodeCommit の特徴(2014-2023):
✓ AWS ネイティブの Git ホスティング
✓ IAM による細かなアクセス制御(push/pull/delete 権限分離)
✓ KMS 暗号化・VPC エンドポイント対応
✓ CodePipeline・CodeBuild・CodeDeploy との統合
✓ プライベートリポジトリのため「外部公開不可」なコードの保管に適した
2024 年 6 月-11 月:一時停止と復帰
2024 年 6 月 6 日:新規顧客向けサービス停止
→ AWS は採用パターンに基づいて CodeCommit 弱体化判断
→ GitHub・GitLab・Bitbucket への移行推奨
2024 年 11 月:サービス復帰(新規アカウント再び対応)
→ 社内フィードバック・ユーザー要望を受けて再度開放
→ ただし「推奨」段階ではなく「利用可能」段階
現在(2026 年)の推奨状況
CodeCommit の位置付け
推奨度(新規プロジェクト):
★☆☆☆☆ CodeCommit(AWS ネイティブだが、エコシステム小)
★★★★★ GitHub(最高の採用・エコシステム・Copilot)
★★★★☆ GitLab(エンタープライズ・DevOps 統合)
★★★☆☆ Bitbucket(Jira 統合)
AWS が推奨する場合:
✓ AWS ネイティブセキュリティ(VPC エンドポイント・IAM)重視
✓ 既存 CodeCommit リポジトリからの移行コスト > 新規採用コスト
✓ CodePipeline・CodeBuild 中心の CI/CD パイプライン
コアコンポーネント
1. Repository(リポジトリ)
CodeCommit のリポジトリは標準的な Git リポジトリ。
# リポジトリのクローン
git clone https://git-codecommit.ap-northeast-1.amazonaws.com/v1/repos/my-repo
cd my-repo
# 標準的な Git 操作
git checkout -b feature/new-api
# ... coding ...
git add .
git commit -m "Add new API endpoint"
git push origin feature/new-api
# PR(Pull Request)作成
# → CodeCommit コンソール or AWS CLI
2. Branch Protection(ブランチ保護)
# ブランチ保護ルール(例:main への直接 push 禁止)
aws codecommit put-repository-triggers \
--repository-name my-repo \
--triggers '[{
"name": "main-protection",
"destinationArn": "arn:aws:sns:ap-northeast-1:123456789012:codecommit-alerts",
"branches": ["main"],
"events": ["all"]
}]'
3. Pull Requests(コードレビュー)
# PR 作成
aws codecommit create-pull-request \
--title "Add new API endpoint" \
--description "Implement GET /users/{id} endpoint" \
--targets sourceReference=feature/new-api,destinationReference=main \
--repository-name my-repo
# PR に対するレビューコメント
aws codecommit post-comment-for-pull-request \
--pull-request-id 1 \
--content "Please add unit tests" \
--repository-name my-repo
4. Approval Rules(承認ルール)
# PR マージ前に 2 人のレビューを必須化
aws codecommit create-pull-request-approval-rule \
--pull-request-id 1 \
--approval-rule-name "require-2-approvals" \
--approval-rule-content '{
"Version": "2020-01-01",
"Statements": [{
"Type": "Approvals",
"NumberOfApprovalsNeeded": 2,
"ApprovalPoolMembers": ["arn:aws:iam::123456789012:root"]
}]
}' \
--repository-name my-repo
CodePipeline 統合(重要)
CodeCommit を Source として CodePipeline で自動ビルド・デプロイが可能。
# CodePipeline パイプライン定義
Stages:
- Source:
Provider: CodeCommit
Repository: my-repo
Branch: main
- Build:
Provider: CodeBuild
Project: my-build-project
- Deploy:
Provider: CodeDeploy
Application: my-app
CodeCommit → 他サービスへの移行
GitHub への移行例
# Step 1: CodeCommit リポジトリをミラー取得
git clone --mirror https://git-codecommit.ap-northeast-1.amazonaws.com/v1/repos/my-repo
# Step 2: GitHub に新規リポジトリ作成
# (GitHub Web コンソール または gh CLI)
gh repo create my-repo --source=. --remote=origin --push
# Step 3: CodePipeline の Source を GitHub に変更
aws codepipeline update-pipeline \
--cli-input-json file://pipeline-github.json
# GitHub + AWS CodeConnections で CodePipeline 統合
aws codestarconnections create-connection \
--provider-type GitHub \
--connection-name github-connection
aws codepipeline update-pipeline --cli-input-json '{
"pipeline": {
"source": {
"Provider": "CodeStarSourceConnection",
"ConnectionArn": "arn:aws:codestar-connections:ap-northeast-1:...",
"Owner": "my-org",
"Repo": "my-repo",
"Branch": "main"
}
}
}'
GitLab への移行例
# Step 1: CodeCommit リポジトリをミラー取得
git clone --mirror https://git-codecommit.ap-northeast-1.amazonaws.com/v1/repos/my-repo
# Step 2: GitLab に新規プロジェクト作成
# (GitLab Web コンソール または gitlab api)
curl --request POST https://gitlab.com/api/v4/projects \
--header "PRIVATE-TOKEN: <your-token>" \
--form "name=my-repo"
# Step 3: ミラーリポジトリを GitLab にプッシュ
cd my-repo.git
git push --mirror https://gitlab.com/my-org/my-repo.git
# Step 4: CodePipeline を GitHub / GitLab に対応させる
# (CodeStarConnections 使用)
Bitbucket への移行例
# Step 1: CodeCommit リポジトリをミラー取得
git clone --mirror https://git-codecommit.ap-northeast-1.amazonaws.com/v1/repos/my-repo
# Step 2: Bitbucket に新規リポジトリ作成
# (Bitbucket Cloud API)
curl -X POST https://api.bitbucket.org/2.0/repositories/my-workspace/my-repo \
-u "user:password" \
-H "Content-Type: application/json" \
-d '{"scm": "git", "is_private": true}'
# Step 3: ミラーをプッシュ
cd my-repo.git
git push --mirror https://bitbucket.org/my-workspace/my-repo.git
CodeCommit を選ぶ理由(残存ユースケース)
1. AWS セキュリティ・コンプライアンス重視
VPC エンドポイント・IAM・KMS による高度なセキュリティが必須の場合。
CodeCommit でのセキュリティ:
✓ VPC エンドポイント:AWS ネットワーク内での通信(インターネット経由なし)
✓ IAM:リポジトリごと・ユーザーごとに push/pull/delete 権限を細分化
✓ KMS:リポジトリの暗号化
✓ CloudTrail:全アクセス・変更ログを記録
✓ 金融・医療・政府機関向けコンプライアンス対応
2. CodePipeline 中心の CI/CD
AWS CodeBuild・CodeDeploy・CloudFormation を活用した完全 AWS 統合 CI/CD が中心。
3. 既存 CodeCommit リポジトリからの移行コスト回避
既に数十の CodeCommit リポジトリが運用中で、移行コスト > 継続利用コスト。
4. プライベートリポジトリ
GitHub・GitLab よりセキュアなプライベートリポジトリを重視(ただし、GitHub Private も十分セキュア)。
主要ユースケース(5+)
1. 金融機関の AWS 開発
PCI-DSS・HIPAA 対応の高セキュリティ環境で CodeCommit + VPC エンドポイント + IAM で完全 AWS 統合。
2. 既存 CodeCommit ユーザーの継続利用
20+ リポジトリが既に CodeCommit で運用中で、GitHub・GitLab への移行コスト > 継続利用コスト。
3. AWS CodePipeline 中心企業
CodeBuild・CodeDeploy・CloudFormation・Lambda 統合 CI/CD が中心。
4. マイクロサービス開発
複数の小規模リポジトリを CodePipeline で自動デプロイ。
5. オンプレミス + AWS ハイブリッド環境
AWS Direct Connect を使用した専用線接続で CodeCommit VPC エンドポイントに接続。
設定・操作の具体例
CLI 操作例
# リポジトリ一覧表示
aws codecommit list-repositories
# リポジトリ作成
aws codecommit create-repository \
--repository-name my-new-repo \
--description "My new application repository" \
--tags Environment=production
# PR 作成
aws codecommit create-pull-request \
--title "Add new feature" \
--targets sourceReference=feature/new-api,destinationReference=main \
--repository-name my-repo
# PR マージ(承認後)
aws codecommit merge-pull-request-by-fast-forward \
--pull-request-id 1 \
--repository-name my-repo
# ブランチ削除
aws codecommit delete-branch \
--repository-name my-repo \
--branch-name feature/old-feature
Terraform 操作例
# CodeCommit リポジトリ作成
resource "aws_codecommit_repository" "example" {
repository_name = "my-repo"
description = "My application code"
default_branch = "main"
tags = {
Environment = "production"
Team = "platform"
}
}
# ブランチ保護(Approval Rules)
resource "aws_codecommit_approval_rule_template" "example" {
name = "require-2-approvals"
description = "Require 2 approvals before merge"
approval_rule_content = jsonencode({
Version = "2020-01-01"
Statements = [{
Type = "Approvals"
NumberOfApprovalsNeeded = 2
}]
})
}
# Approval Rule をリポジトリに適用
resource "aws_codecommit_approval_rule_template_association" "example" {
approval_rule_template_name = aws_codecommit_approval_rule_template.example.name
repository_name = aws_codecommit_repository.example.repository_name
}
SDK 操作例(Python)
import boto3
codecommit = boto3.client('codecommit', region_name='ap-northeast-1')
# リポジトリ情報取得
response = codecommit.get_repository(
repositoryName='my-repo'
)
print(f"Repository: {response['repositoryMetadata']['repositoryName']}")
print(f"Clone URL: {response['repositoryMetadata']['cloneUrlHttp']}")
# ブランチ一覧取得
branches_response = codecommit.list_branches(
repositoryName='my-repo'
)
print(f"Branches: {branches_response['branches']}")
# PR 作成
pr_response = codecommit.create_pull_request(
title='Add new API endpoint',
description='Implement GET /users endpoint',
targets=[{
'repositoryName': 'my-repo',
'sourceReference': 'feature/new-api',
'destinationReference': 'main'
}]
)
print(f"PR ID: {pr_response['pullRequest']['pullRequestId']}")
CloudFormation で CI/CD 統合
AWSTemplateFormatVersion: '2010-09-09'
Description: 'CodeCommit + CodePipeline + CodeBuild CI/CD'
Resources:
MyRepository:
Type: AWS::CodeCommit::Repository
Properties:
RepositoryName: my-repo
RepositoryDescription: My application code
Triggers:
- RepositoryEvents:
- all
Branches:
- main
CodePipelineRole:
Type: AWS::IAM::Role
Properties:
AssumeRolePolicyDocument:
Version: '2012-10-17'
Statement:
- Effect: Allow
Principal:
Service: codepipeline.amazonaws.com
Action: 'sts:AssumeRole'
ManagedPolicyArns:
- 'arn:aws:iam::aws:policy/AWSCodePipelineFullAccess'
MyPipeline:
Type: AWS::CodePipeline::Pipeline
Properties:
Name: my-pipeline
RoleArn: !GetAtt CodePipelineRole.Arn
ArtifactStore:
Type: S3
Location: my-artifacts-bucket
Stages:
- Name: Source
Actions:
- Name: SourceAction
ActionTypeId:
Category: Source
Owner: AWS
Provider: CodeCommit
Version: '1'
Configuration:
RepositoryName: !GetAtt MyRepository.RepositoryName
BranchName: main
OutputArtifacts:
- Name: SourceOutput
- Name: Build
Actions:
- Name: BuildAction
ActionTypeId:
Category: Build
Owner: AWS
Provider: CodeBuild
Version: '1'
Configuration:
ProjectName: my-build-project
InputArtifacts:
- Name: SourceOutput
OutputArtifacts:
- Name: BuildOutput
類似サービス比較表
| サービス | 対象 | 強み | 弱み |
|---|---|---|---|
| CodeCommit | AWS ネイティブ Git | VPC 統合・IAM・KMS・AWS 統合 | エコシステム小・GitHub より機能少ない・採用率低い |
| GitHub | 最高の Git ホスティング | 最高採用・Copilot・Actions・マーケットプレイス | 外部サービス・AWS 統合は CodeConnections 経由 |
| GitLab | DevOps 統合プラットフォーム | Built-in CI/CD・Kubernetes 統合・Duo AI | 複雑・セットアップ負荷・小規模には過度 |
| Bitbucket | Jira 統合 | Jira シームレス統合・Pipelines | エコシステム小・GitHub より劣る |
| Gitea | セルフホスト Git | 軽量・シンプル・セルフホスト | サポート限定・エンタープライズ向けでない |
ベストプラクティス
✅ 推奨事項(CodeCommit 使用時)
| # | 項目 | 実装例 |
|---|---|---|
| 1 | VPC エンドポイント利用 | インターネット経由ではなく AWS ネットワーク内でアクセス |
| 2 | IAM による細かな権限分離 | push/pull/delete を分離。本番リポジトリは pull のみ |
| 3 | ブランチ保護 + PR マンダトリーレビュー | main への直接 push 禁止・2 人以上のレビュー必須 |
| 4 | CodePipeline 統合 | CodeCommit → CodeBuild → CodeDeploy の完全自動化 |
| 5 | CloudTrail 監査ログ | 全リポジトリアクセス・変更を記録・監査対応に備える |
| 6 | KMS 暗号化 | リポジトリ内容を暗号化・セキュリティ高める |
| 7 | タグ管理 | リポジトリに Environment・Team・CostCenter タグを付与 |
❌ 非推奨事項
| # | 項目 | 回避理由 |
|---|---|---|
| 1 | GitHub・GitLab からの移行 | 新規開発は GitHub を強く推奨 |
| 2 | CodeCommit のみ新規採用 | エコシステムが小さい・GitHub の方が生産性高い |
| 3 | イントernet経由アクセス | VPC エンドポイント未使用時は通信が暗号化されない可能性 |
トラブルシューティング表
| 問題 | 原因 | 解決策 |
|---|---|---|
| git push が認証エラー | IAM 権限不足・SSH キー未設定 | IAM ユーザーに codecommit:GitPush 権限確認・SSH キーペア作成・~/.ssh/config 設定 |
| PR マージが失敗 | ブランチ保護ルール・conflicts | ブランチ保護確認・conflicts 解決・approval rule 合格確認 |
| CodePipeline トリガーされない | CloudWatch Events 設定漏れ | CloudWatch Events ルール確認・CodeCommit イベント有効化確認 |
2025-2026 最新動向
CodeCommit の現状
Status: 利用可能だが、推奨度は低い
✓ 既存リポジトリ:継続利用可能
✓ 新規リポジトリ:GitHub・GitLab 推奨
AWS の方針:
→ GitHub・GitLab へのマイグレーション支援
→ CodeConnections で CI/CD 統合
予想される方向性
CodeCommit は以下のケースに限定される傾向:
- 既存ユーザーの継続利用:大量リポジトリの移行コスト > 継続利用コスト
- 高セキュリティ要件:VPC・IAM・KMS による完全 AWS 統合が必須
- CodePipeline 中心企業:CodeBuild・CodeDeploy・Lambda 統合が中心
- レガシーシステム:10 年以上前のアーキテクチャから新規開発なし
学習リソース・参考文献
公式ドキュメント
移行ガイド
- AWS CodeCommit Deprecation: Complete Guide to Migrate
- AWS CodeCommit, CodeStar and Cloud9 EOL: Migration Guide
推奨代替サービス
関連 AWS サービス
実装例・マイグレーション
CodeCommit → GitHub 完全移行(3 週間)
Week 1: リポジトリ移行
├── CodeCommit → GitHub ミラー転送
├── ブランチ・タグ・コミット履歴確認
└── GitHub Teams・アクセス権設定
Week 2: CI/CD 再構築
├── CodeStarConnections で GitHub 認証
├── GitHub Actions 或いは AWS CodePipeline で CI/CD 再構築
├── テスト実行
└── パフォーマンス確認
Week 3: 本番切り替え
├── CodeCommit を読み取り専用に変更
├── 全チームメンバーに GitHub リンク通知
├── CodeCommit リポジトリアーカイブ
└── 数ヶ月後に削除
実装チェックリスト(CodeCommit 継続利用時)
- [ ] VPC エンドポイント設定確認(CodeCommit)
- [ ] IAM 権限分離(push/pull/delete 分離)
- [ ] ブランチ保護ルール設定(main への直接 push 禁止)
- [ ] PR マンダトリーレビュー(2 人以上)
- [ ] CloudTrail 監査ログ有効化
- [ ] KMS 暗号化有効化
- [ ] CodePipeline トリガー設定確認
- [ ] リポジトリタグ管理(Environment・Team 等)
まとめ
AWS CodeCommit は 「AWS ネイティブのプライベート Git リポジトリサービス」 です。VPC・IAM・KMS・CloudTrail による高度なセキュリティと AWS サービスとの統合が強みですが、エコシステムが小さく、新規採用には GitHub・GitLab・Bitbucket を強く推奨します。
既存 CodeCommit ユーザーは継続利用可能ですが、新規プロジェクトは GitHub への移行を検討してください。CodePipeline・CodeBuild・CodeDeploy との統合が必須でない限り、GitHub + GitHub Actions の組み合わせが最適です。
最終更新:2026-04-26
バージョン:v2.0