0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

GitHub ActionsでEC2に自動デプロイしたら.tfファイルが消し飛んだ件について

Posted at

GitHub Actionsを使って、mainブランチをマージしたら自動でEC2にデプロイされるようにしていました。
しかし、ある日Terraformの設定を再開しようとしたところ、.tfファイルがすべて消えている……!?😭🥀
この記事では、その原因と再発防止策を解説します。

人柱として、記事を読んでくださるみなさんには私と同じ轍を踏まないように原因と対策を共有したいと思います。

環境

  • Ubuntu 24.04.2
  • Terraform v1.13.3
  • GitHub Actions: self-hosted runner on EC2

原因

.ymlに書いてあった原因となった部分を抜粋

BASE=/home/ubuntu
RDIR=$BASE/releases/${{ steps.rel.outputs.REL }}
mkdir -p "$RDIR"
rsync -a --delete --exclude=".git" . "$RDIR/

--delete オプションがポイントです。

これは以下のような動作をします:

「ローカル(GitHub Actionsでcheckoutしたリポジトリ)に存在しないファイルやフォルダを、リモートディレクトリから削除する

つまり、リポジトリ外のファイル(今回はTerraform関連)まで削除されてしまいました。

私の場合:

  • 以前Terraformを置いてたのがアプリケーションフォルダと同じプロジェクトディレクトリ (/home/ubuntu/…) だった
  • デプロイ時に /releases/ がまるごと新しい構成に置き換わる
  • シンボリックリンク更新時に古い current が消される
    → その中にTerraformフォルダがあった場合、同時に消える

結果、.tfファイルが全て削除されてしまった。

対策

ここでは、場合分けして対策していきます。

パターン 対策内容
アプリディレクトリ内でTerraformを運用する場合 --exclude=".terraform/" を追加する
別ディレクトリでTerraformを管理する場合 /terraform フォルダをアプリ外に移動する

①アプリディレクトリ内でTerraformを運用する場合

BASE=/home/ubuntu
RDIR=$BASE/releases/${{ steps.rel.outputs.REL }}
mkdir -p "$RDIR"
rsync -a --delete --exclude=".git" --exclude=".terraform/" . "$RDIR/"

.ymlファイル中のrsync行を修正
--exclude.terraform/を追加することでシンボリック更新時に消されないようにする。

②別ディレクトリでTerraformを管理する場合

../
terraform/
├── main.tf
├── variables.tf
├── versions.tf
└── terraform.tfvars

.tfファイル専用のディレクトリを作成
→ アプリケーションフォルダ直下に置かなければworkflowによって削除されることはない。

結果

一通りリカバリはできたと思うので、
terraform initで初期化。
Terraformの初期化に成功した際のログは以下のようになります。
スクリーンショット 2025-10-11 161422.png

続いて、terraform validateで構成の整合性をチェックします。
これも成功!
スクリーンショット 2025-10-11 161741.png

まとめ・学び

  • rsyncの--deleteは便利だが、扱いを誤ると重要ファイルを失う

  • .tfや.envなどはリリースディレクトリ外に分離するのが安全

  • 自動化は便利だが、デプロイ先の構成を常に確認しよう

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?