GitLabリポジトリをCodeCommitリポジトリにミラーリングする

こんにちは、望月です。

最近、GitLabを触る機会が多く、いろいろと試しているところです。

GitLabからCodePipelineを利用したい場合、GitLab Runnerを利用し、S3にファイルをアップロードするといった方法があり、弊社ブログでも紹介しています。

GitLabリポジトリへのPushをトリガーにS3にファイルをアップロードする

GitLab RunnerでCI/CDしてみる(前編)

今回、やったみた方法はGitLabリポジトリをCodeCommitリポジトリをミラーリングする方法になります。CodeCommitリポジトリにミラーリングできれば、それをソースにし、CodePipelineを走らせることができるかと思います。

こちらの方法はGitLab Runnerを必要としないため、GitLab Runnerを管理するといった手間がなくなります。

やってみた

CodeCommitリポジトリの作成

CodeCommitにミラーリング用のリポジトリを作成します。ここではgitlab-mirroringという名前でプロジェクトを作成しました。

作成したリポジトリのURLは後で利用します。

$ aws codecommit create-repository --repository-name gitlab-mirroring
{
    "repositoryMetadata": {
        ……
        "cloneUrlHttp": "https://git-codecommit.ap-northeast-1.amazonaws.com/v1/repos/gitlab-mirroring",
        ……
    }
}

IAMポリシーの作成

CodeCommitリポジトリへのミラーリングに必要な権限のIAMポリシーを作成します。

AWSアカウントID及びリポジトリ名は自分の環境に合わせて、JSONファイルにして保存してください。

{
  "Version": "2012-10-17",
  "Statement" : [
    {
      "Effect" : "Allow",
      "Action" : [
        "codecommit:GitPull",
        "codecommit:GitPush"
      ],
      "Resource" : "arn:aws:codecommit:ap-northeast-1:xxxxxxxxxxxx:gitlab-mirroring"
    }
  ]
}

先程のJSONファイルを指定し、IAMポリシーを作成します。

作成したIAMポリシーのArnは後で利用します。

$ aws iam create-policy --policy-name gitlab-mirroring-policy --policy-document file://gitlab-mirroring-policy.json
{
    "Policy": {
        "PolicyName": "gitlab-mirroring-policy",
……
        "Arn": "arn:aws:iam::xxxxxxxxxxxx:policy/gitlab-mirroring-policy",
……
    }
}

IAMユーザの作成

IAMユーザを作成し、先程作成したIAMポリシーを割り当てます。

AWSアカウントIDは自分の環境に合わせてください。

$ aws iam create-user --user-name gitlab-mirroring-user
$ aws iam attach-user-policy --user-name gitlab-mirroring-user --policy-arn arn:aws:iam::xxxxxxxxxxxx:policy/gitlab-mirroring-policy
$ aws iam create-service-specific-credential --user-name gitlab-mirroring-user --service-name codecommit.amazonaws.com
{
    "ServiceSpecificCredential": {
……
        "ServiceName": "codecommit.amazonaws.com",
        "ServiceUserName": "xxxxxxxxxxxx",
        "ServicePassword": "xxxxxxxxxxxx",
……
    }
}

Git認証情報の作成

GitLabで利用するGit認証情報を作成します。

ServiceUserNameとServicePasswordについては、後で利用します。

$ aws iam create-service-specific-credential --user-name gitlab-mirroring-user --service-name codecommit.amazonaws.com
{
    "ServiceSpecificCredential": {
……
        "ServiceName": "codecommit.amazonaws.com",
        "ServiceUserName": "xxxxxxxxxxxx",
        "ServicePassword": "xxxxxxxxxxxx",
……
    }
}

GitLabプロジェクトの作成

GitLabプロジェクトを作成します。ここではcodecommit-mirroringという名前でプロジェクトを作成しました。

ファイルはREADME.mdのみ配置しています。

GitLabにてミラーリングの設定

リポジトリのメニューから「Settings」→「Repository」を選択します。

項目から「Mirror a repository」を開きます。

ミラーリングに必要な情報を入力し、「Mirror repository」をクリックします。

  • Git repository URL
    • https://<ServiceUserName>@git-codecommit.ap-northeast-1.amazonaws.com/v1/repos/gitlab-mirroring
    • 作成したGit認証情報のServiceUserNameを入力します
  • Mirror direction
    • Push
  • Authentication method
    • Password
    • 作成したGit認証情報のServicePasswordを入力します

ミラーリングの動作確認

追加した設定から、更新アイコンをクリックし、同期を開始します。

CodeCommitのリポジトリを確認し、ミラーリングが動作していることを確認します。

ミラーリングは手動だけでなく自動でも実行されますがタイミングによっては最大5分ほど更新間隔が空くので注意しましょう。

まとめ

GitLabのリポジトリを手軽にCodeCommitのリポジトリへミラーリングすることができました。

GitLab RunnerでシンプルにS3にソースをアップロードするぐらいであれば、こちらのミラーリングを利用したほうがGitLab Runnerを管理する手間がなく、良さそうな感じでした。

同期に若干時間がかかってしまうため、そこが許容できるようであれば、こちらの方法を検討するのも良いかと思います。