Transferring CodeCommit Repositories Between Regions
Recently, the CodeCommit service from AWS became available in Canada (ca-central-1 region). As I'm Canadian, I like to keep my hosting as close to home as possible, for myriad reasons, but mainly because each commit getting appended with "eh!".
The CodeCommit service from Amazon (AWS) hosts Git repositories. That's about it. It's no Github or Gitlab, but it does ensure at-rest encryption and access is limited to specific IAM users. If you just need private Git hosting for free (or on the cheap) without any WebUI help, CodeCommit is good.
So, my repositories were only hosted in the Virginia region (us-east-1) and I needed a way to easily move the repositories to Canada. While this type of task will never happen very often, it does highlight the benefit of automation.
First, create the CloudFormation stacks that hold the CodeCommit
repositories. You have CloudFormation stacks creating your CodeCommit
resources, right? Great. Then just change the region from
ca-central-1 and relaunch. Now would be a good time to invest in
orchestration, may I suggest Ansible?
Now that the infrastructure has been created, don't forget to output the SSH url of the CodeCommit repository.
SSH_URL=$(aws cloudformation describe-stacks --stack-name $NAME --region ca-central-1 --query 'Stacks.Outputs.OutputValue' | grep '^ssh://')
Second, create a new Git remote for each repository and push all branches
to it. Call this remote
origin is already taken. This
is as simple as
cd repo git remote add canada $SSH_URL git push canada
Third, rename the
origin remote to
usa, then rename the
origin. Then tell Git to use
origin as the default remote. And we're done.
git remote rename origin usa git remote rename canada origin git push -u origin master
Fourth, do some fetches and pushes on the new
origin remote to ensure
that it is working properly.
Fifth, remove the old remote from each repository.
git remote remove usa
Finally, delete the CloudFormation stacks in Virginia, which cleans up all of the CodeCommit resources used.
aws cloudformation delete-stack --stack-name $NAME --region us-east-1