terraformに入門しました
こんにちは
錦織圭がジョコビッチに負けてしまいましたね。残念。 また次のグランドスラム頑張って欲しいなぁ〜
さて雑談はこの辺にして、今更terraformに入門したので、忘れないうちに覚えたことを書いておこうと思います。 ここを読んだ感じです。 www.terraform.io
本当はクラメソさんの記事を読もうとしたんですけど、無性に英語で読みたくなったので。。。 まぁ、途中で眠たくなって寝たんですが笑
インストール
リンク先ではbinaryを落としてきて、インストールしてるっぽいんですが、 パッケージ管理ツール下におきたかったので、brew使いました(Mac使ってます)
$ brew install terraform ゴニョゴニョ $ terraform -v Terraform v0.11.8
Build Infrastructure
- とりあえずprovider awsは書いておく
- 設定ファイルは Terraform format(.tf) あるいは JSON(.tf.json)で書ける
- Terraform format is more human-readable, supports comments, and is the generally recommended format
- JSON は機械向け
- 最初はとりあえずterraform initする
- applyしたとき
は実行してからわかる
- statefileで状態を管理する
- S3とかremoteに置いておくことをオススメする
Change Infrastructure
- リソースによっては一度作って再生成する場合がある
- 交換できる場合はそんなことしない
Destroy Infrastructure
- 淡々と破壊するだけ
Resource Dependencies
- リソース間に依存関係をつけることで、リソースを作成する順番を解決する
- 依存関係のないリソースは並行して作ってくれる
Provision
- リソース作った後等、何か処理をさせられる
- 色々種類がある。
- local-exec: リソース作った後にterraformの実行環境で何かする
- destory: リソースを破壊した後に後片付け処理をする。普通他に代替手段があるので使わないと思われる
- 複数個同じ種類のprovisionerを動かすこともできる
- bootstrap的なやつなので、configuration management toolの代替にはならない
configuration managementツールを使ってるなら、provisionerはそれをキックするのに使うべき
taintedリソースは作成に失敗した(と思われる)リソース。腐ってる。
- Terraformはtaintedなリソースができた時は、ただ警告っぽいのを出すだけ。
- 次に terraform apply をした時にrecreateする
Input Variables
- variables.tf に変数を定義できる。
- terraform.tfvars に変数の値を代入できる
- variables.tfの値はそれ以外にも以下の方法で代入できる
- defaultからルックアップ的に値を代入できる
Output Variables
- *.tf の任意の場所で 任意の値を出力できる。
- ユースケース的にはほぼdynamicな値であろう
Modules
- Terraformには Module Registry と言う仕組みがあり、知らない人が作ったModule(インフラ)を自分のインフラに組み込める
- Dockerで言う所の Docker Hub的な?
- sourceだけ指定すること。あとは 使う対象のModule次第で使えるパラメータが変わる
- 足したら terraform init すること
- Moduleには出力可能なoutputが定義されていて、さっきのやり方でコンソールに出力できる
- こんな感じの文法で
- ${module.NAME.OUTPUT}
- NAMEはモジュール名
- OUTPUTは対象モジュールで出力したいoutput
- 高くつく構成なので終わったら忘れずにDestroy
Remote Backends
- ステートファイルをS3とかにおくことで、同じインフラ構成をチームで管理できるようになる
- Terraform Enterpiseあるよ!いろいろできるお!
- やるときは terraform init を忘れずに
- remote backends を使っている間、stateファイルはリモートにある。ローカルにはない(本当に?)
- 管理をローカルに戻したい場合は、Remote Backendsの設定を消して、terraform init すること。そしたら戻る
わからなかったこと
- 結局providerって何?
- State Locking はステートの更新をロックするもの?それともインフラの更新の排他制御をするもの?