この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
はじめに
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の管理ポリシーでAWSCodeCommitPowerUser
やAWSCodeCommitReadOnly
がありますがこれはもっと広い権限を持っていて、ただ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を利用可能です。