Slide 1

Slide 1 text

© Link and Motivation Group Terraformでリソース名を変えたら リソース削除されてしまった!? リンクアンドモチベーション SRE 篠原 昂

Slide 2

Slide 2 text

2 © Link and Motivation Group #ハードル激低LT大会 2023/04/20 篠原 昂 株式会社リンクアンドモチベーション ● 2021年7月〜中途入社 ● SREグループ所属 ● インフラ全般や開発生産性向上まわりがメインタスク ● ←の写真はほぼ10年前 koh-sh 自己紹介

Slide 3

Slide 3 text

3 © Link and Motivation Group #ハードル激低LT大会 2023/04/20 リンクアンドモチベーション 327億円(2022年12月時点) (2022年12月時点) 11社

Slide 4

Slide 4 text

4 © Link and Motivation Group #ハードル激低LT大会 2023/04/20 モチベーションクラウド 診断 変革 ※ 2022年度 実績 10,060 社 312 万人

Slide 5

Slide 5 text

5 © Link and Motivation Group #ハードル激低LT大会 2023/04/20 Terraformとは? ChatGPT先生曰く

Slide 6

Slide 6 text

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の変更を適用 - リソースの変更を 検知

Slide 7

Slide 7 text

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の変更を適用 - リソースの変更を 検知

Slide 8

Slide 8 text

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" … } リソース削除

Slide 9

Slide 9 text

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" … } リソース作成

Slide 10

Slide 10 text

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" … } リソース作成 リソースが削除されている!

Slide 11

Slide 11 text

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 +} リソースの変更 はないね

Slide 12

Slide 12 text

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はもう 存在しないから 関係ないね。

Slide 13

Slide 13 text

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

Slide 14

Slide 14 text

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

Slide 15

Slide 15 text

15 © Link and Motivation Group #ハードル激低LT大会 2023/04/20 Terraformはいいぞ