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

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

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  8. 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"

    }
    リソース削除

    View Slide

  9. 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"

    }
    リソース作成

    View Slide

  10. 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"

    }
    リソース作成
    リソースが削除されている!

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide