deadこのサイトが動いているサーバはDigitalOceanで、terraformで管理しています。最近、main.tfを見ていて見づらいなと感じたので(行数は100行もないけれど大半が変更しない行だしいつも目で飛ばしてる行だった。)moduleを使ってスッキリさせようと思い立ちました。HashiCorp結果、main.tfが大分すっきりしました。ip)の設定をするモジュールに分けました。ディレクトリツリーは以下のような感じです。hashicorp/best-practicesになんとなーく則っています。variables.tf各モジュールの構成はterraform-community-modulesを真似しました。main.tfで使う変数を定義するファイル具体的にdropletモジュールの中身を見てみます。"512mb"}なるべく変数にできるものは変数化しておくとモジュールらしく再利用性が高まっていい感じです。variables.tfでデフォルト値が設定されていないものは(droplet名もデフォルト値無しの変数にすべきですね)、環境変数やterraform.tfvarsを用意して使うことを想定しています。{}など)を再度定義しているんだろう?」と思われるかもしれません。"{var.mailgun_key}"}ここは結構ハマってしまった所で、どうやら環境変数やterraform.tfvarsを利用する変数の場合は、モジュール呼び出し側のtfファイルでも定義しなければならないみたいです。ドキュメントのどこかにそのような性質を示す記述があるのかもしれませんが、見つけられていないです。apply実行ディレクトリ)のものが参照される」ので、その関係でこのような書き方をしなければならないのかなと解釈しています。cloud-config.ymlも同じくapply実行ディレクトリ以下に無いと参照されません。getでモジュールを読み込みます。モジュールはディレクトリpath以外に、github等のurlも参照できるみたいです。getすると、カレントディレクトリの.terraform/modules以下に名前がハッシュ値のシンボリックリンクが生成されモジュールのソースが参照されるようになります。modulesなところにちょっとハマりました。モジュールについての感想モジュール化は楽しいです。うまく使えば実行tfファイルがかなりシンプルになるし、色々使いまわせそうです。このサイトのドメインの移行を考えていて、移行のためdroplet名やネットワーク設定が微妙に違う環境を立ち上げる際に役立ちそうです。planを実行してみると...全てdestroyされ作り直させるプランが提示された!!!!!!!なんでじゃ!!!!!!!!terraformのmain.tfをmoduleに分解したら、全部destroyして作り直すplanを提示された。2016年10月14日この時会社に居たのでちょうど近くに居たテラフォーマーに相談した所、モジュールは別リソース扱いになるのではという話をして超納得しました。†緊急警報†さんと話した結果、モジュール化することで別リソース扱いとなり、既存のリソースは消されて新しく作り直されるのでは無いかという話をしました。2016年10月14日こりゃヤバイってことで一旦masterブランチに戻りました。GitHubtfstateを手で書き換える秘術に挑戦しようかと思ったけれど、当然リモートとローカル両方のtfstateが書き換わってしまっていたので断念。**熱狂的再征服レコンキスタ**するしか無い!!以下バックアップ。