Git LFS サーバーを Amazon S3 に立ててみた

Git LFS を利用していたところ,こんなメールがGitHubからきました.

Git LFS has been disabled on your personal account xrdnk because you’ve exceeded 
your data plan by at least 150%. Please purchase additional data packs to cover your bandwidth and storage usage:

容量オーバー!使いすぎィ!
GItHubは課金しないと1GBまでしかGit LFSが利用できないんですよね….
ということで何とかすることに.

Git LFS

大容量バイナリデータを扱うための拡張機能という理解でいます.

一般的なGit LFSの話はこちらが詳しく,
qiita.com

Unityを絡めた話だとこちらが詳しく書かれております.

www.slideshare.net

GitHubは無料枠だとアカウントごとに1GB,GitLabはリポジトリごと10GB….
Unity,特にVR等は大容量なデータを扱っているために,GitLabを用いるところが多いんだとか.
ただまあ自分はGitHubを使いたいので(草的に),Git LFSサーバーをS3に切り替えることにしました.

前準備

Git LFS

Git LFSはgitとは別にインストールする必要があります.
インストールされていない場合はインストールを.

git-lfs.github.com

ちなみにSourcetreeにはGit LFS機能が搭載されていた気がする.

qiita.com

Git LFS トラック対象ファイル設定

.gitignoreはよく使われますが,それと似たような奴を作ります..gitattributesです.

qiita.com

自分は基本的に.gitignoreや.gitattributesを作る時は,curlを叩きます.
(逐一.gitignoreや.gitattributesのテキストファイルをコピペ作成するのがめんどい)

ディレクトリをルートにして,以下のように叩きます.
VSCodeならターミナル開いて,以下をコピペして叩けばいけるはず.

curl -o .gitignore https://raw.githubusercontent.com/github/gitignore/master/Unity.gitignore
curl -o .gitattributes https://gist.githubusercontent.com/nemotoo/b8a1c3a0f1225bb9231979f389fd4f3f/raw/15f60a55a50b5c058de5e14369051ed268db0c77/.gitattributes

AWS アカウント

また,AWSアカウントがない場合は作成する必要があります.
今なら1年間無料でAmazon EC2やS3を利用できるため,無料枠で大丈夫です.

aws.amazon.com

AWSは丁寧に誘導してくれるので,基本ボタンぽちぽちしてたらできてしまいます.

実際に Amazon S3 に Git LFS サーバーを立てる

結論から言うと,以下の記事の通りに進めばできました.
丁寧に書かれているので,手順に沿って行ってください.

手順に沿って行えば,S3にGit LFS用のサーバーが立てられます.

以下,自分が行った時の注意点を書いておきます.

リージョン設定

東京リージョンにしたい場合はコメントに書かれている以下のyamlを利用するとよい感じです.

https://console.aws.amazon.com/cloudformation/home#/stacks/new?region=ap-northeast-1&templateURL=https://hx-ebi.s3-ap-northeast-1.amazonaws.com/git-lfs/2.1.0/git-lfs.yaml

CREATE_COMPLETEになるには少しラグがある

まあサーバーを立てているわけなので,少し待ちます.
自分の場合は自動で状況が変化しなかったので,右上の更新ボタンを押してみたらCREATE_COMPLETEになりました.

S3に立てたサーバーに実際にLFSオブジェクトをpushしてみる

サイズ46.1KBのpngデータをpushしてみます.

// lfs urlを変更
git config -f .lfsconfig lfs.url <<表示されたエンドポイントのURL >>
// もししっかり設定が変更されているか確認したい場合は以下のコマンドを叩き,
// Endpoint = <<表示されたエンドポイントのURL>>になっていればOK
git lfs env

そしてpush.

実際にS3を確認してみると….

同じ容量のデータがS3に格納されているのを確認できました.名前については暗号化されております.
diffで暗号化時のファイル名が書かれているので,そちらで比較しても同じでした.

終わりに

できたのでハッピー😊
とはいえ,無料枠だとS3は5GBまでなので….これを超えてしまったらそのときで….