EC2からCodeCommitを使ったら便利だった

サーバーで開発する際の問題としてGitのリモートリポジトリとの通信があると思います。 認証情報をいちいちサーバーに置いて、通信するのも面倒です。 CodeCommitを使用すればIAMで認証が行えるのでとても便利です。
2021.12.31

はじめに

CodeCommitを使用すると認証をIAMで行うことができます。

IAMで認証することでEC2でどうしても開発を行いたい場合などに、認証情報をサーバーにおく必要がなくなりとても便利です。 また、SSHの鍵を生成して登録するといった手間も不要になります。

今回はEC2インスタンスでCode CommitにGitでPull、Pushするまでを整理してみます。 今回は基本的に以下の記事を参考にしています。

リポジトリの作成

今回使用するリポジトリをCodeCommitで用意します。 名前はSampleとしています。

IAMポリシーとロールの作成

まず初めに以下のようなポリシーを作成します。

ポリシー

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "AllowPullAndPush",
            "Effect": "Allow",
            "Action": [
                "codecommit:GitPull",
                "codecommit:GitPush"
            ],
            "Resource": "arn:aws:codecommit:ap-northeast-1:XXXXXXXXXXXX:sample"
        }
    ]
}

今回はcode-commitという名前でポリシーを作成しました。 AWSの管理ポリシーでAWSCodeCommitPowerUserAWSCodeCommitReadOnlyがありますがこれはもっと広い権限を持っていて、ただPull、Pushしたいだけだと強すぎるので今回は必要最低限の権限のポリシーを作成しています。

これをEC2のインスタンスプロファイルとして使用できるロールにアタッチすれば準備は完了です。

インスタンスプロファイルとして作成したいので一般的なユースケースからEC2を選択します。

先ほど作成したポリシーをアタッチします。

EC2でのGitの設定

CodeCommitを使用する前にGitの設定を行う必要があります。 今回使用しているOSは「Amazon Linux 2(ami-0218d08a1f9dac831)」です。

Gitの準備

# Gitのインストール
$ sudo yum install git

# 認証情報の設定
$ git config --global credential.helper '!aws codecommit credential-helper $@'
$ git config --global credential.UseHttpPath true

# ユーザー情報の設定
$ git config --global user.email "testuser@example.com"
$ git config --global user.name "testuser"

準備ができたので、実際にリポジトリをクローンしてCommit、Pushしてみます。 今回はHTTPでクローンするのでその情報をマネージメントコンソールから取得します。

リポジトリ操作

# リポジトリのクローン
$ git clone https://git-codecommit.ap-northeast-1.amazonaws.com/v1/repos/sample
Cloning into 'sample'...
warning: You appear to have cloned an empty repository.

# Commit
$ cd sample
$ echo "This is commit from EC2" > README.md
$ git add README.md
$ git commit -m 'inital commit'

# Push
$ git push origin master
Enumerating objects: 3, done.
Counting objects: 100% (3/3), done.
Writing objects: 100% (3/3), 232 bytes | 232.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
To https://git-codecommit.ap-northeast-1.amazonaws.com/v1/repos/sample
 * [new branch]      master -> master

無事にPushできたみたいなのでWebブラウザで確認してみます。

READMEが追加されています。

感想

わずか数ステップでGitのリモートリポジトリを使用することができました。 IAMロールを使用することで他のインスタンスでも容易にCodeCommitを利用可能です。