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/

カテゴリー: Terraform

adachin

1989年生まれのFindy/SRE。ホスティングから大規模なアドテクなどのインフラエンジニアとして携わる。現在はサービスの信頼性向上、DevOps、可用性、レイテンシ、パフォーマンス、モニタリング、オブザーバビリティ、緊急対応、AWSでのインフラ構築、Docker開発環境の提供、IaC、新技術の検証、リファクタリング、セキュリティ強化、分析基盤の運用などを担当している。個人事業主では数社サーバー保守とベンチャー企業のSREインフラコンサルティングやMENTA/TechBullで未経験者にインフラのコーチング/コミュニティマネージャーとして立ち上げと運営をしている。また、過去「脆弱性スキャナVuls」のOSS活動もしており、自称エバンジェリスト/技術広報/テクニカルサポート/コントリビュータでもある。

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 を使っています。コメントデータの処理方法の詳細はこちらをご覧ください