Calendarの2日目の記事です。CalendarTerraform事始めTerraformが扱うデータ、ファイルまとめTerraform事始めTerraformはリソースの作成、変更、削除を、IAMのクレデンシャル情報を使いAPIを経由してそれらの操作をユーザーの代わりに行います。使い始めるにあたっては、クレデンシャル情報を記述したファイルをコマンドを実行するディレクトリの直下に配置してください。アクセスキー、シークレットキーはコミットに含めないように気をつけてください。環境変数やファイル分割などを使ってキーの管理を外部化するとリポジトリの管理も楽になるでしょう。先述の通り、Terraformは与えられたクレデンシャル情報を使用してAWSのAPI経由でリソースに対する操作を行います。Language(HCL)は、Terraform、PackerやVagrantなどで有名なHashiCorp社によって開発されました。HCLは多数の組み込み関数と演算子を持っていて、インフラ構成を宣言的かつ複雑なロジックを内包しながら記述することができます。JSONとの互換性によりTerraformはHCLで記述されたレシピをJSONとしてパースし、そのJSONオブジェクトをリクエストボディとして対象となるAPIに対して送信してリソースの操作を行います。Terraformの動作プロセスTerraformが扱うデータ、ファイルTerrafomは、リソースを作成するための設定ファイルやクレデンシャル情報以外にもいくつかのメタデータを管理しています。デフォルトの設定でローカルに吐き出される.terraform/terraform.tfstateというファイルは、Terraformで管理されているクラウド上のリソースの情報(AWSではARNやID、リソースごとの設定情報やメタデータなど)がJSONの形で保存されています。Terraformがインフラの実体に対して変更を加えるときには、実体そのものをAPIなどを使って参照しているのではなく、このterraform.tftateを見てその差分から適切な処理を決めているわけです。その他には、モジュールへのシンボリックリンクやプラグインの本体も保存されています。これらのデータは基本的にユーザーが意識して管理をする必要はありませんが、唯一terraform.tfstateのみTerraformのBackends機能を使用して管理方法を変えることができます。www.terraform.ioTerraformはterraform.tfstateとレシピの差分を見てリソースの操作を決めるため、stateの管理下に対象のリソースが無ければ当然AWSのAPIに対してリソースの作成をするためのHTTPリクエストを送信することになります。これが、レシピを共有している別のユーザーによって既に行われた操作だった場合、つまり、terraform.tfstateを共有していないユーザーがそれぞれ同じレシピを適用しようとした場合に、二回目以降のリソース作成でエラーが起きてしまいます。メタデータを含むディレクトリの.terraformにはOS毎のプラグインのバイナリも含まれているため、このディレクトリをVCSで管理することは得策とは言えません。Storageのようなパブリッククラウドのオブジェクトストレージを利用してterraform.tfstateをオンラインで管理し全ユーザーでそれを共有することができます。個人の場合もチーム開発の場合も、基本的にBackends機能を利用したほうが開発はスムーズに進むでしょう。バイク月別アーカイブリンクPortfolioはてなブログをはじめよう!mic_psmさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。