[CodeCommit] 僕ぁMacのSourceTreeでCodeCommitのリポジトリを扱いたいんやっ

AWS系のブログを書くとドキドキしてしまいます← GitHubを使うことが多いので、CodeCommitはいつもおっかなびっくりです(汗
2020.08.24

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

はじめに

CX事業本部の中安です。まいどです。

先日に新しいMacBookが届きまして、色々セットアップしているのですが毎回ハマってしまいがちなことがあります。

それは、CodeCommitでGit管理されているリポジトリをSourceTreeで扱おうとするときの認証周りです。

いつも長々と調べたり人に聞いたりしてみては妙にハマったりしているので、いい加減ブログで整理しておきたいなと思いまして、今回の執筆に至りました。

タイトル通り「SourceTreeでCodeCommitのリポジトリを扱いたい」と思っている方の手助けになれば幸いです。

前提

PC環境

MacOS Catalina (10.15.6) で作業しました。

この記事で話さないこと

今回はCodeCommitでは既にリポジトリが作られていて、それに対するポリシーは当てられている前提です。なので、そのあたりの作成方法や設定方法は省略します。また、アクセスキーとシークレットキーも自分が設定したものではなく渡されたものなので、その設定方法も省略します。

AWS CLI を入れよう

新しいMacなので、awsコマンドが打てません。なのでAWS CLIを入れるところからスタートします。

ドキュメントどおりやっていきましょう。

参考: macOS コマンドラインを使用して AWS CLI バージョン 2 をインストールおよび更新する

まずはpkgファイルをダウンロード(CLIはバージョン2)

% curl "https://awscli.amazonaws.com/AWSCLIV2.pkg" -o "AWSCLIV2.pkg"

で、インストール実行です。

% sudo installer -pkg AWSCLIV2.pkg -target /
Password:
installer: Package name is AWS Command Line Interface
installer: Installing at base path /
installer: The install was successful.

インストール成功すれば、パスとバージョンを確認します

% which aws
/usr/local/bin/aws
% aws --version
aws-cli/2.0.42 Python/3.7.4 Darwin/19.6.0 exe/x86_64

さくっとインストール完了しました。

CodeCommitの認証

次にCodeCommitの認証設定をしていきます。

% aws configure --profile (任意の名前)

(任意の名前)のところは、今回は見分けが付きやすいような名前にします。

このコマンドを打つと、以下のように順番に聞かれますので打ち込んでいきます。

AWS Access Key ID [None]: (取得したAWSアクセスキー)
AWS Secret Access Key [None]: (取得したAWSシークレットキー)
Default region name [None]: (リージョン。今回は東京だったので ap-northeast-1 を入れました)
Default output format [None]: (json と入れました)

では、設定できたかどうかの確認をしてみます。

~/.aws/の配下に新しくファイルができているはずなので、それを見てみます。

% cat ~/.aws/credentials

[(任意の名前)]
aws_access_key_id = (アクセスキー)
aws_secret_access_key = (シークレットキー)
% cat ~/.aws/config

[profile (任意の名前)]
region = ap-northeast-1
output = json

設定した内容が反映されているのでOKかと。

Gitの認証ヘルパーの設定

AWS CLI には、CodeCommit で使用できる Git 認証情報ヘルパーが含まれています。Git 認証情報ヘルパーには、AWS 認証情報プロファイルが必要です。このプロファイルには、IAM ユーザーの AWS アクセスキー ID と AWS シークレットアクセスキー (デフォルトの AWS リージョン名とデフォルトの出力形式) のコピーが格納されています。Git 認証情報ヘルパーはこの情報を使用して CodeCommit で自動的に認証するため、Git を使用して CodeCommit とやり取りするたびにこの情報を入力する必要はありません。

参考: 認証情報ヘルパーを設定する

と書いてあるので、この設定をしておくとGitの各アクションをするたびに認証を挟むことがなくなるようです。

以下のコマンドを打ってGitに設定してみます。

% git config --global credential.helper "!aws codecommit credential-helper $@"
% git config --global credential.UseHttpPath true

CodeCommitリポジトリのクローン

AWSコンソールからHTTPSを押してURLをコピーします。(ちょっと訳あってsshではなくhttpsでした。。)

SourceTreeで 新規 > URLからクローン で新しく追加するよりも、gitコマンドで先にクローンする方法を取りました。

% cd (任意のディレクトリ)
% git clone (コピーしたURL) (新しく作るディレクトリ名)

例:

% git clone https://git-codecommit.us-east-2.amazonaws.com/v1/repos/MyDemoRepo my-demo-repo

SourceTreeへの反映

クローンできたらSourceTreeを開いて、Finderから当該のディレクトリをドラッグ・アンド・ドロップします。

一覧に追加されたら中に入って設定を押します。

リモートタブのConfigファイルを編集を押すと、テキストファイルが開かれます。

そのファイルに以下を追加します。

[credential]
    helper = /usr/local/bin/aws --profile (任意の名前) codecommit credential-helper $@
    UseHttpPath = true

(任意の名前)は先程にaws configure --profile ... で入力した名前になります。

設定し終えてから、PUSHなどのアクションをしてみるとリモートのリポジトリに対して操作が行えるようになったことが確認できました。

メールと名前の設定

これは新しいPCなので起きた現象かもしれませんが、ユーザ情報がないために PUSH などの操作を受け付けないよというお叱りを受けてしまいました。

そうした場合は以下のようなコマンドで設定することで解消できました。

% git config --global user.email "(メールアドレス)"
% git config --global user.name "(名前)"

最後に

ということで、このような手順で手元の環境でCodeCommitのリポジトリに対してコミットができるようになりました。

SourceTreeは便利なGUIツールなのでよく使ってるのですが、たまに認証でハマってしまうので、 自分への備忘録として書きましたが、同じように苦心している方の手助けになればと思います。

では、またまたー