terraformといえばapplyした時にできるtfstateファイルができるのですが、
これがないと他のメンバーがメンテナンスするときに同じインスタンスが作成されたり、
挙動おかしくなったりなど大変なことがおきます。(経験済みw)
これを回避するために「Gitで管理しちゃえばいいじゃんー。」
と安易に考えるのですが、中身はJSONなので
コンフリクト起きた場合死にます。(これぞ悲惨な性質を持つファイル….)
こういうのはGitで管理してはダメです!
v0.9から非常に簡単になったのでブログします。


■v0.8以前は?

S3を使ってtfstateファイルを管理することができました。
しかし、以下のようにapplyからの毎回コマンドを打ってS3に投げないといけません。

非常にめんどくさい。。


■v0.9以降は?

https://www.terraform.io/docs/backends/index.html

上記のようにremoteコマンドがなくなり、Backendsという概念に変わりました。基本、

tfstateを管理するための仕組み」

だけです。どのように管理していくか以下にまとめます。


■config.tf

https://www.terraform.io/docs/backends/types/s3.html

上記のように各環境にS3と紐付けるためにバケット名をぶち込みます。(事前にバケットを作りましょう)
以前のremoteコマンドをファイル化した感じ。

・ローカルでaws configureの設定

クレデンシャルはterraformのを利用しちゃいましょう。
適当にぶち込みます。

・terraform init

initは初期化という意味ですが、
EC2などは消えないので大丈夫w(最初は焦った)
まずinitをすることでローカルのtfstateファイルがS3に同期されます。

・terraform plan

相違ないかdry runします。
大丈夫であればapply!

・terraform apply

なんとapply時にtfstateファイルもS3に投げてくれます。
これは便利!

・S3にあるか確認

ちゃんとある!

・他のメンバーが設定変更したとき

これで同期されるので問題なし。

神か!!!!!!!!


■まとめ

terraform熱い。
ローカルのaws configure環境ごとに簡単に変えられないかな…
ansibleのawsモジュールはどうやって管理してるんだろ….

参考
https://blog.lorentzca.me/summary-of-terraform-v0-9/

The following two tabs change content below.

あだちん

1989年生まれ。 Infra Engineer(SRE) In Shibuya 2013年新卒に自宅サーバを構築し、この技術ブログを立ち上げたが、 2017年に電源が壊れConoHaにリプレイスした。 好きな構成管理ツールはAnsible,Terraform。 インフラならAWS/Docker。言語はPython。 WEBサーバならH2O。そして「脆弱性スキャナVuls」のOSS活動もしており、VulsRepo init fileのコミッターでもある。VulsのためにGolangと格闘中でエバンジェリストに任命!?HIPHOPが好きすぎてTrack Makerでもある。

2 thoughts on “[Terraform][Backends][v0.9]tfstateファイルの管理方法”

  1. > initが上記の用に完了したらローカルのtfstateファイルは名前変更しちゃいましょう。

    バックエンドを使うと、ローカルのtfstateファイルは引き続きバックエンドの情報を保管するのに利用されるので、名前変更してはあかんです。

    こんな感じで。

    {
    “version”: 3,
    “serial”: 0,
    “lineage”: “0a998281-703a-48b2-b026-d4c8bb68e8da”,
    “backend”: {
    “type”: “s3”,
    “config”: {
    “bucket”: “hello-0-9”,
    “key”: “infra/terraform.tfstate”,
    “region”: “ap-northeast-1”
    },
    “hash”: 4951114416268900123
    },
    “modules”: [
    {
    “path”: [
    “root”
    ],
    “outputs”: {},
    “resources”: {},
    “depends_on”: []
    }
    ]
    }

    1. >ゆるふわキャンパーさま
      $ terraform initしまする

コメントを残す