0Pricing
Terraform Infrastructure as Code · レッスン

movedとremovedによるStateのリファクタリング

State操作コマンドと宣言的なmovedおよびremovedブロックを使い、インフラを破壊せずにリソースの名前変更や構成変更を安全に行います。

「movedとremovedによるStateのリファクタリング」はCoddyKit上の無料Terraform Infrastructure as Codeレッスンです。 これはレッスン4/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはTerraform Infrastructure as Code学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Terraform Infrastructure as Codeコースには全4レッスンが含まれています。

リネームによる問題

設定内でリソースの名前を変更すると、Terraform は古いアドレスが消え、新しいアドレスが現れたと認識します。デフォルトではリソースを破棄して再作成するため、ダウンタイムやデータ損失につながる可能性があります。

State のリファクタリングツールを使うと、リソースが単に移動しただけだと Terraform に伝えられます。

State の確認

まず、State で追跡されている内容を一覧表示します。terraform state list コマンドを実行すると、管理対象のすべてのリソースアドレスが表示されます。

terraform state list

命令型の state mv

従来の方法は terraform state mv です。State 内のリソースアドレスを書き換えます。ここでは、インスタンスの名前を aws_instance.web から aws_instance.app に変更します。

terraform state mv aws_instance.web aws_instance.app

state mv の欠点

state mv は手動で一度だけ実行する CLI 操作です。コードには記録されないため、同じ変更を各自のマシンで行うチームメンバーは、操作を繰り返す必要があります。共同作業ではミスの原因になります。

宣言型の moved ブロック

moved ブロックを使うと、リネームを設定内に記録できます。Terraform は次回の plan で全員に対して自動的に適用するため、後からブロックを削除できます。

moved {
  from = aws_instance.web
  to   = aws_instance.app
}

モジュールへの移動

moved ブロックは、リソースをモジュールでラップする場合にも使えます。移動先のアドレスにはモジュールのパスが含まれます。

moved {
  from = aws_instance.app
  to   = module.compute.aws_instance.app
}

Plan による確認

moved ブロックを追加したら、terraform plan を実行します。正しく移動できていれば、破棄や作成は発生せず、アドレスの変更だけが表示されます。それでも置換が表示される場合は、ブロックが正しくありません。

terraform plan

State からの削除

実際のインフラを破棄せずに、Terraform にリソースの管理を停止させたい場合があります。そのための命令型コマンドが terraform state rm です。

terraform state rm aws_instance.legacy

宣言型の removed ブロック

新しい Terraform では removed ブロックを利用できます。lifecycle { destroy = false } を指定すると、実際のインフラには手を加えず、State からリソースの情報だけを削除します。

removed {
  from = aws_instance.legacy

  lifecycle {
    destroy = false
  }
}

State ファイルの分割

大規模なプロジェクトでは、terraform state mv -state-out を使って、リソースを別の State ファイルへ移動できます。モノリスを独立して適用できる複数のスタックに分割する場合に便利です。

terraform state mv -state-out=network.tfstate \
  aws_vpc.main aws_vpc.main

バックアップと安全性

Terraform は State を変更する前に .backup ファイルを書き込みます。それでもリモートバックエンドを使っている場合は、破損を避けるため、手動操作の前にチームメンバーが State をロックしていないことを必ず確認してください。

理解度チェック

リファクタリングについての知識を確認しましょう。

まとめ: 安全な State のリファクタリング

インフラを破棄せずに構成を変更できるようになりました。

  • 命令型の変更には state mv / state rm
  • 宣言型のリネームには moved ブロック
  • 破棄せずに管理対象から外すには removed ブロック
  • 置換が発生しないことを plan で必ず確認

よくある質問

「movedとremovedによるStateのリファクタリング」レッスンは無料ですか?

はい。「movedとremovedによるStateのリファクタリング」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Terraform Infrastructure as Codeコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Terraform Infrastructure as Codeコースには全4レッスンが含まれています。

「movedとremovedによるStateのリファクタリング」で何を学びますか?

State操作コマンドと宣言的なmovedおよびremovedブロックを使い、インフラを破壊せずにリソースの名前変更や構成変更を安全に行います。 ブラウザで直接実行するハンズオンコードでTerraform Infrastructure as Codeを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Terraform Infrastructure as Codeを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのTerraform Infrastructure as Codeは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン4/4です。

「movedとremovedによるStateのリファクタリング」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このTerraform Infrastructure as Codeレッスンでコードを書いて実行できますか?

はい。すべてのTerraform Infrastructure as Codeレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. リモート State バックエンド
  2. State のロックと整合性
  3. 既存リソースのインポート
  4. movedとremovedによるStateのリファクタリング
← Terraform Infrastructure as Codeに戻る