Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Terraformでリソース名を変えたらリソース削除されてしまった!?/Casual LT 2...

Terraformでリソース名を変えたらリソース削除されてしまった!?/Casual LT 230420 Link and Motivation

【ハードル激低LT大会ッ! #02】
リンクアンドモチベーション登壇資料(2023/04/20)

『Terraformでリソース名を変えたらリソース削除されてしまった!?』

#ハードル激低LT大会 #リンクアンドモチベーション #リンモチ
=============================================
【イベント情報】
■イベントページ
 https://smarthr.connpass.com/event/278899/

【株式会社リンクアンドモチベーション】
■お問い合わせ
 [email protected]
■Entrancebook
 https://note.com/lmi/n/n179505e048f4
■テックブログ
 https://link-and-motivation.hatenablog.com/
=============================================

More Decks by リンクアンドモチベーション

Other Decks in Technology

Transcript

  1. 2 © Link and Motivation Group #ハードル激低LT大会 2023/04/20 篠原 昂

    株式会社リンクアンドモチベーション • 2021年7月〜中途入社 • SREグループ所属 • インフラ全般や開発生産性向上まわりがメインタスク • ←の写真はほぼ10年前 koh-sh 自己紹介
  2. 6 © Link and Motivation Group #ハードル激低LT大会 2023/04/20 コードとAWSなどのリソースの間にtfstateという概念が存在 コードの差分やリソースの変更を検知して整合性を合わせてくれる

    どういう仕組み? tfstate コードの変更を リソース(state) に適用 example- instance resource "aws_instance" "example" { ami = "ami-12345678" instance_type = "t2.micro" … } - stateの変更を適用 - リソースの変更を 検知
  3. 7 © Link and Motivation Group #ハードル激低LT大会 2023/04/20 リファクタリングでコード内のリソース名を変更すると ただし、名前を変えると?

    tfstate コードの変更を リソース(state) に適用 example- instance -resource "aws_instance" "example" { +resource "aws_instance" "example2" { ami = "ami-12345678" instance_type = "t2.micro" … } - stateの変更を適用 - リソースの変更を 検知
  4. 8 © Link and Motivation Group #ハードル激低LT大会 2023/04/20 リファクタリングでコード内のリソース名を変更すると •

    aws_instance.exampleの削除 ただし、名前を変えると? tfstate aws_instance .exampleがコ ードからいな い! example- instance -resource "aws_instance" "example" { +resource "aws_instance" "example2" { ami = "ami-12345678" instance_type = "t2.micro" … } リソース削除
  5. 9 © Link and Motivation Group #ハードル激低LT大会 2023/04/20 リファクタリングでコード内のリソース名を変更すると •

    aws_instance.exampleの削除 • aws_instance.example2の新規作成 ただし、名前を変えると? tfstate aws_instance .example2が コードに増えて る! example- instance -resource "aws_instance" "example" { +resource "aws_instance" "example2" { ami = "ami-12345678" instance_type = "t2.micro" … } リソース作成
  6. 10 © Link and Motivation Group #ハードル激低LT大会 2023/04/20 リファクタリングでコード内のリソース名を変更すると •

    aws_instance.exampleの削除 • aws_instance.example2の新規作成 ただし、名前を変えると? tfstat e aws_instance .example2が コードに増えて る! example- instance -resource "aws_instance" "example" { +resource "aws_instance" "example2" { ami = "ami-12345678" instance_type = "t2.micro" … } リソース作成 リソースが削除されている!
  7. 11 © Link and Motivation Group #ハードル激低LT大会 2023/04/20 movedブロックを追記して名前の変更を定義することで、 stateは同じリソースとして理解してくれる。

    movedブロックを使うと解決できる tfstate exampleと example2は 同じものだよ! example- instance -resource "aws_instance" "example" { +resource "aws_instance" "example2" { ami = "ami-12345678" instance_type = "t2.micro" … } +moved { + from = aws_instance.example + to = aws_instance.example2 +} リソースの変更 はないね
  8. 12 © Link and Motivation Group #ハードル激低LT大会 2023/04/20 movedブロックは冪等性があるので、そのまま残しておいてOK. むしろ古いstateとの互換性維持のため、残しておく方が推奨。

    適用した後は? tfstate exampleと example2は 同じものだよ! example- instance resource "aws_instance" "example2" { ami = "ami-12345678" instance_type = "t2.micro" … } moved { from = aws_instance.example to = aws_instance.example2 } exampleはもう 存在しないから 関係ないね。
  9. 13 © Link and Motivation Group #ハードル激低LT大会 2023/04/20 Terraform公式ドキュメントには、 「Refactoring」というページがある。

    その中でmovedブロックや他のリファクタリング方法に ついても解説されている。 公式のリファクタリング専用ページがある https://developer.hashicorp.com/terraform/language/modules/develop/refac toring
  10. 14 © Link and Motivation Group #ハードル激低LT大会 2023/04/20 Terraform公式ドキュメントには、 「Refactoring」というページがある。

    その中でmovedブロックや他のリファクタリング方法に ついても解説されている。 リファクタリング専用ページがある https://developer.hashicorp.com/terraform/language/modules/develop/refac toring リソースに変更を加えずに、安全にリファクタリングができる!