- 公開日
- 最終更新日
【Terraform】コードをPushする際に.gitignoreで管理対象から除外する
この記事を共有する
目次
はじめに
皆さん、こんにちは!サービスGの三宅です。
Terraformを使ってインフラをコード管理しているとプロジェクト内で自動的に生成される.terraform
フォルダなどの大きなファイルがGitの管理対象となってしまうことがあります。
これらのファイルはGitHubなどのリモートリポジトリにプッシュするとファイルサイズ制限に引っかかってエラーとなることがあります。
そこでこれらのファイルをGitの管理対象から除外する方法として、.gitignore
を使う方法を試しましたのでその内容について共有します。
前提
- 事前にGitHub上で
terraform
というリモートリポジトリを用意しておきます。 - 今回は開発環境としてAmazon EC2(Amazon Linux 2023)を利用します。
- 開発環境では下記のようなディレクトリ構造で実施します。
GitHubにプッシュするとエラーが発生
まず、上記のディレクトリで作業を進め、GitHubにプッシュしてみます。
1. 変更を追加し、コミットしました
$ git commit -m "Add initial Terraform project structure and modules"
ここでは.terraform/
内のファイルも含めてコミットしています。
2. GitHubリモートリポジトリを設定し、プッシュを試みます
$ git push origin main
すると、以下のようなエラーが返ってきました。
Counting objects: 100% (18/18), done.
Delta compression using up to 2 threads
Compressing objects: 100% (10/10), done.
Writing objects: 100% (17/17), 160.32 MiB | 21.34 MiB/s, done.
Total 17 (delta 1), reused 5 (delta 0), pack-reused 0
remote: Resolving deltas: 100% (1/1), done.
remote: error: Trace: fad95edb339294dd244898d210df40e5483642d66d10e8ecdbc0541a0edc4c43
remote: error: See https://gh.io/lfs for more information.
remote: error: File .terraform/providers/registry.terraform.io/hashicorp/aws/5.82.2/linux_amd64/terraform-provider-aws_v5.82.2_x5 is 626.73 MB; this exceeds GitHub's file size limit of 100.00 MB
remote: error: GH001: Large files detected. You may want to try Git Large File Storage - https://git-lfs.github.com.
To https://github.com/git-test/terraform.git
! [remote rejected] main -> main (pre-receive hook declined)
error: failed to push some refs to 'https://github.com/git-test/terraform.git'
このエラーは、GitHubに100MBを超える大きなファイルをプッシュしようとしたために発生しています。
エラーメッセージにもありますが、.terraform/providers/registry.terraform.io/hashicorp/aws/5.82.2/linux_amd64/terraform-provider-aws_v5.82.2_x5
というファイルが 626.73MB と非常に大きいため、GitHubの制限を超えているとのことです。
GitHub での大きいファイルについて - GitHub Docs
.gitignoreを使ってファイルを除外する
今度はプッシュする前に事前にterraform/.gitignore
を作成しておきます。
ファイル内にはプッシュ時に管理対象から除外するファイルやディレクトリを記載します。
.terraform/
これで.terraform/
フォルダにあるすべてのファイルがGitの管理対象外となります。
過去のコミット履歴を削除
ただし、.gitignore
を追加しただけでは既にコミットされた大きなファイルはGitの履歴に残ったままとなり、再度GitHubにプッシュしても同じエラーが発生します。そのため、git filter-repo
コマンドを使用して、リポジトリの履歴から大きなファイルを削除する必要があります。
※前述で設定したリモートリポジトリURLなど、 .git/config ファイルに格納されている一部の構成が削除されます。
リポジトリからの機微なデータの削除 - GitHub Docs
再度Githubにプッシュする
履歴から不要なファイルを削除した後、変更を追加しコミットしました。
$ git commit -m "Add .gitignore to exclude .terraform/ directory"
再びGitHubリモートリポジトリを設定しプッシュを試みます。
$ git push origin main
以下のようにプッシュ成功の結果が返ってきました。
Enumerating objects: 15, done.
Counting objects: 100% (15/15), done.
Delta compression using up to 2 threads
Compressing objects: 100% (10/10), done.
Writing objects: 100% (15/15), 1.2 MiB | 1.2 MiB/s, done.
Total 15 (delta 5), reused 5 (delta 0), pack-reused 0
To https://github.com/git-test/terraform.git
e2db616..e5c5858 main -> main
以下のコマンドでも確認してみると.gitignore
ファイルが正しく機能しており、.terraform/
は無視されていることが確認できます。
On branch main
Ignored files:
(use "git add -f <file>..." to include in what will be committed)
.terraform/
nothing to commit, working tree clean
まとめ
Terraformを使ったインフラのコード管理はとても便利ですが、大きなファイルを誤ってプッシュしてしまうとエラーに直面します。その対処の一つとして今回は.gitignore
を使った方法を紹介しました。
初めから.gitignore
を用意しておくことでコミット履歴の削除などの手間はかかりませんが、もし誤って100MBを超えるファイルをコミットしてしまった場合でも今回の手順を試すことで対処することができます。
さいごに
この記事がどなたかの役に立てば幸いです。
この記事は私が書きました
三宅 啓右
年内を目標にAWS資格全冠を目指して奮闘中です 猫派でしたが最近犬派になりました。