目次

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 は以下のケースに限定される傾向:

  1. 既存ユーザーの継続利用:大量リポジトリの移行コスト > 継続利用コスト
  2. 高セキュリティ要件:VPC・IAM・KMS による完全 AWS 統合が必須
  3. CodePipeline 中心企業:CodeBuild・CodeDeploy・Lambda 統合が中心
  4. レガシーシステム:10 年以上前のアーキテクチャから新規開発なし

学習リソース・参考文献

公式ドキュメント

移行ガイド

推奨代替サービス

関連 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