LINEで送る
Pocket

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/

LINEで送る
Pocket

カテゴリー: Terraform

あだちん

1989年生まれ。 ランサーズ/SRE。 ホスティングから大規模なアドテクなどのインフラエンジニアとして携わり、他社インフラレスポンス改善、ランサーズでの副業、ansibleでのインフラコード化を推進し、未経験によるエンジニアのMENTAなども実施している。また、「脆弱性スキャナVuls」のOSS活動もしており、自称エバンジェリスト/広報/VulsRepo init file,chatwork通知のコントリビュータでもある。現在はDocker開発環境の提供,AWSで新サービスのインフラ構築,PHPバージョンアップ,分析基盤を担当しておりDigdag,embulk,BigQueryを使いこなし中。

2件のコメント

ゆるキャン · 2017/07/18 7:48 pm

> 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”: []
}
]
}

    あだちん · 2017/07/18 10:34 pm

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

コメントを残す

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください