Terraform入門インフラをコード化!?
「さあやってまいりましたひまじんプログラマーのお時間ですよいしょ本日はですねえー」
「テラフォーム入門というところで順平がすごいガチガチの話題を持ってきてくれた緊張していますありがとう旬ですねテラフォームは旬ですよねちょっと最近学習したのでアウトプットしていきたいなと思っておりますいいですねはいで早速入っていくんですがまず前置きとして一応僕がなぜテラフォームを学習しようと思ったというところで言うと」
「前の現場でテラフォームを使っていてただ僕あんまり触る機会はなかったんですけどなんか本当ユーザーとかアクセスキー変えて入る場所変えるぐらいの感じでしか使ってなかったんですけど」
「かっけえなと思ってたんですよねかっけえなテラフォームかっけえなだから触ってみたいなと思ってて先日僕クラウドの話Azureを例にとってやったと思うんですけどそれもあってテラフォーム今学習するちょうどいいかなと思ってやったわけなんですねなるほどテラフォームとはまず知らない人について」
「それ人について話してもらっていいですか知らない人について話してもらっていいですかはいテラフォームはですねまず何かというと人間が読み書きしやすいコードでインフラをコードで書きますとインフラをコードで書くそれで環境を作るっていうようなツールですね」
「それがテラフォームになってますざっくり言うとなんかそれはDockerファイルと何が違うんですかね確かにDockerファイルと違うところですかDockerファイルはあのねえっと」
「UbuntuOSの上にこういうライブラリインストールしてウェブサーバーを動かそうみたいなことできるじゃないですかはいDockerとは何が違うんですかねそれでいうとですね逆転したそれでいうとですねテラフォームはDockerファイルはDockerコンテナ一つに閉じてるんですけどテラフォームはもっと広くいろいろ定義できて」
「それこそじゃあAWSで例えますよAWSで例えると」

「Dockerファイルはコンテナ単位なのがEC2っていう仮想サーバーとかロードバランサーとかVPNっていうネットワークとかデータベース立ててみたりとかっていうウェブサービスを提供するのに必要なパーツ全部丸っと定義できるぜっていうのがテラフォームですかねなるほどつまりインフラストラクチャーをコードで書けるってことですかその通りなるほどじゃあこれに名前を付けるならインフラストラクチャーアズアコードとかが良さそうですねおしゃれなるほど」
「なるほどなるほどIACですね島人プログラマーで言いましたそれを我々がつけましたつけました誕生しましたということでテラフォームのもうちょっと詳しい中身やっていきますねテラフォームのまずの歴史とか基本的な要素とか」
「歴史やっていきますね知らないかも歴史まずテレフォームはミッシェル橋本さんという人が創業したハシコープ社」
「ハシコープという会社が開発したオープンソースのインフラの自動化ツールというところでベイグラントとか作った会社ですよねそうなんだハシコープは聞いたことあるけど何やってるとかよく知らんかったわあとミッシェル橋本さんも初めて聞いたわボディビルダーに聞こえたわ今なんか知らんけど僕デザイナーかなと思いましたミッシェル橋本さんだとですベイグラントそうですねあとパッカーパッカーってビムのライブラリ管理ツールじゃないの」
「ビームプログ的なイメージ作成ツールみたいな違ったかな調べますねイメージ作成ツールがありますねイメージ作成ツールビームのやつとは別なんですね少なくとも別マシンイメージって言ってるから」
「仮想マシンのマシンイメージを作るやつかならしいですねテラフォームってクラウドのAWSのいろんな機能を作れると思うんですけどイメージだけはできないみたいな」
「その部分を補うためのあれなんですかねパッカーがないですけどはいだそうですで開発が一応2014年に始まって当初のバージョンは2015年の8月にリリースされたというところなんで最近ですね俺の社会人歴と大体同じなわけだなるほどねでまずなんでこんな便利なもの生まれたのかというところで」
「インフラの管理はもともと自動化ツールないんで手動でやってましたと手動でやるとやっぱりヒューマンエラー的な部分だったり人がいっぱい必要で非効率だったりしたとこれだとあと管理がそもそもちょっと難しくないっていうところでかつてはねExcel設計書とかでね今のシステムこうなってますよっていう資料が残っててでなんかのきっかけでじゃあアップデートしようって言ってアップデートしてアップデートしたのにもかかわらずなぜか設計」

「設計書がアップデートされずあれこれ今のやつと違くないかとなってじゃあ調査しなきゃっていうのに1ヶ月半かかるみたいなねあるわあと会社のアカウントAWSのアカウントとか覗いたときにこのEC2何?みたいなやつとかえー」
「これって止めていいのかなみたいな止めて良さそうだってなって止めたにもかかわらずやっぱり課金が発生しててなんだこれエラスティックIPが付いてるからインスタンス止めたらお金かかるじゃねえかみたいなのが全然気づけないっていうやつですよねそうなんですねAWS詳しくないと分かんないけどねそのエラスティックIPが付けられてないときだけに課金されるのねそうなんですね」
「とかいう感じで管理が難しいとだからこれ管理できたらいいよねっていうのでコードで書いてついでに効率化とかスケーラビリティとか再現性とかも実現できるツール作ろうっていうので生まれたのがこのテラフォームらしいんですねコードで書くことでGitとかでやっぱり管理できるようになるんで管理しやすいよねっていうところでなるほどね人にも簡単に共有できるようになると」
「知らない人でもコマンドをちょっと教えれば環境を作れるようになったりしますしなるほどねユニックスの哲学を感じますね全てはテキストで扱えとそれユニックスでしたっけ違ったっけ達人プログラマーじゃないそっちかもしれないちょっと俺今いろいろ哲学混じってるそれは多分達人プログラマーですね哲学ミックスインが走ってる全部ギットにあげろこの野郎っていうのがそうだ達人プログラマーですねこっちだはい」
「っていうので生まれたツールらしいですねあとはメリットとしてはやっぱり知ってるだけでかっこいいんじゃないかなと思いますねテラフォームは知らない人使ってない人はまだまだいると思うんでマウント取れるようになりますとこのエピソードでっていうところで中身に入ってていいですかちなみにこれはインフラ作れるってところで今AWSでできたんですけど他なんかできるやつあるんですかそれがですねはい」
「マルチクラウドプラットフォーム対応でしてなんとこれがAWSだったりAzureだったりGCPだったりIBMクラウドだったりどこでもいけちゃいますどこでもいけるは嘘じゃないですか有名どころはほぼカバーしてテレフォンは結構いけますね有名な」
「他にもいろんなツールあるんですよねインフラストラクチャーアズアコードで言うとクラウドフォーメーションとかですよクラウドフォーメーションは分かりやすくてAWSのサービスなのでAWS上のサービスにしか行けませんなのでAWSからGCPのこのサービス使いたいみたいになった時に基盤変えなきゃっていう時にクッソ不便ですでもテラフォームはその辺」
「吉何?吉何じゃないけど、吉何やってくれないんだけど移行が同じコードではあるのでやりやすいよねやりやすいよねっていうところがありますね僕も一応そうですねUdemyの講座で学んだんですけどAWSとテラフォームで実現するインフラストラクチャーアズコードっていう講座を受講しましてAWSのがっつり普通のシステム」

「アーキテクト設計みたいなそれこそルート53とかネットワークもそうですしウェブ3階層もそうですしなんかバケットとかも作ったりクラウドフロントキャッシュの部分とかも一通りテラフォームで作っていくみたいなところをやったんですけどで中身入っていきますさらっとさらっとでもないんですけどちょっとボリューミーになっちゃってると思うんですけどいきます頑張って消化していきましょうかじゃあそうですねこれ僕も全く触ったことないんでうん」
「ちなみにカイツさんはありますか僕は4年前ぐらいに1回やりましたねそっから変わってますよもうそう思いますはいじゃあ概要いきますまずテラフォーム自体のテラフォーム自体のって言うんですけどテラフォーム自体のバージョンは今のとこ1.5くらいまであってサポートされてるのが0.12とかそっからあと1.2ぐらいまでがサポートされてるみたいですと」
「1.345はまだアルファかベータってこと?みたいな感じですねそういうバージョンがいろいろあるのでTFenvっていうのでテラフォームのバージョンを管理してくれるものがあるんですねまずそういうのがありますと設定ファイルがあると基本的にテラフォームを使うときはファイルとしては.tfファイルこれが基本であとは.tfbars」
「これがTFVARSバリアブルのバーにS複数形のSみたいな感じですねっていうのが基本的には自分が書くコードのテラフォームのファイルというか他に自動で生成される別の拡張子のものとかあるんですけど自分が書くファイルとしては.tfか.tfbarsとかなのかなっていう基本的にはなるほど使い分けとしてはですね僕のかすかな記憶でしゃべるので間違えたら指摘してほしいんですけどえっと」
「インフラストラクチャーのアズコードテラフォームでコード書くときって便利なものがあって商用環境とステージング環境と開発環境の各環境に対して似たような構成でシステム出すじゃないですかとはいえ開発環境はサーバー上場化しなくていいみたいなっていうのをちょっと分けたいっていう」
「使い方があると思うんですけどそのフォーマットみたいなのをTFに書いておいて環境ごとに分ける数字の変数部分を多分.barsみたいなところになるほど入れ込んどくみたいなビルド時の環境変数的なやつですか環境変数とか何でしょうリソースに名前つけるときとかもなんかデブなのかあの」
「デブじゃない方は何でしたっけステージングSTGとかプロドとかプロドとかですねそういう変数とかを書いておくのがTFバーズとかだったりしますかねあんまりそんなに使わない量多くないのかなテラフォームの文脈でいうリソースっていうのはEC2とかサービス単位の話ですかそうですちょっと後に詳しく」
「詳しくやっていきますね先ほども言いましたけど基本的には一応AWSとかだと基本的にはイメージ以外のリソースは作成できますとEC2のイメージとか以外は基本的に作成できますとEC2のイメージっていまだに作り方よく分かんないもんなAMIの作成ぐらいでね作るってことはいはいはい」

「そんなんなんでinfrastructurethecodeでやるんだったんですよね指定できないの?もともとあるやつ使えるもともとあるやつ使えるよね改めてイメージを作ることはやらないよってそれやる人は変態でしょ意味がわからないそれができるのがパッカーなんですかねそんなこともないそれは多分AWSSDKでやるAWSの機能でやるなるほど」
「続きましてテラフォームはですねテラフォーム用の言語で書きますとはいえほぼJSONなんですけどJSONに似てるっていう感じですねキーバリューの何かってこと?キーバリュー形式なんですけどなんでJSONと違うポイント解説をいきますねほぼJSONとやれたらほぼやめるみたいなもんでしょそうです条件分岐とかできちゃうんでしょ」
「できますテレフォンショッピング当てちゃったまずはブロックという表現があって基本的にはブロックの塊をいくつも書いていくみたいな感じなんですね一般的なインクラストラクチャーズコードみたいな感じですねこのリソースの中のこれみたいなこと例えば」
「後であれですけどプロバイダーっていうテラフォームの方で決められたAWSEC2みたいなこれは何のプロバイダーの環境上にプロバイダーのAWSみたいな感じで書くんですけどプロバイダーだからどこに作るかみたいなことですかねはいそうですとかあとはテラフォームのタイプとかテラフォーム自体のバージョンの」
「何を書くのかみたいなタラフォームにもタイプがあるとうんうんうんやっぱり裏側想像してもらうと多分想像できると思っててほう」
「AWSにデプロイするためのコードとGCPでデプロイするためのコード全然違うはずじゃないですかはい絶対どっかにアダプターがあると思ってますどのサービスに対して何の設定値入れるかっていうのを入れなきゃいけないわけでそれぞれに対しての設定のキーすら違うじゃないですかうんうんうんうんなんかAWSに」
「AWSだとインスタンスタイプって言ってみたりGCPだと別の名前がついてたりすると思うんですけどその辺の切り替えをするための大元の設定ですよね多分そうですえーと」
「言うとテラフォームブロックについてはテラフォーム自体とあとはプロバイダーに分かれててどういうことかというとテラフォームはそのままなんですけどそれ自身でそれプラスプロバイダーがそれぞれ例えばAWS用とかAzure用とかのがあってそれぞれにしかもバージョンがありますと例えばAWS専用で言うとハシコープAWSっていうモジュールがあって」

「AzureでいうとHashCorpAzureRMっていうモジュールがあってさっきのテラフォームのリクワイヤードバージョンはHashCorpAWSバージョン3.0とか指定する必要があるんですねHashCorpじゃないAWSとかもあるんですか」
「そこまで調べてないないんじゃないですか分かんないですけどこれでも拡張性のためじゃないですかこれはハシコープって会社の名前が変わったりとかもしくは有志で別でやってくれたりとかした時のために残してる表記なんじゃない」
「なんか想像で言ってますよ想像でいつかオープンソースで他の人が作ったやつも使おうっていう根担がちょっと見えますよねこれ作りとしては非常に素晴らしい作りですねなるほど想像してこういうモジュールがあるゆえにマルチクラウドでいけるっていうみたいですねなるほどマジで作ってる人やばいですね確かに頭おかしくなりそうやばいよねうん」
「はいです例えばさっきのプロバイダーAWSで波括弧で書くそれを一つのブロックとするみたいな感じそういうブロックをいっぱい書きますジェイソンっぽいですねそのブロックの中にリソースを書いていくとそうですはい」
「でもプロバイダーではなくリソースを書くときはリソースブロックっていう最初プロバイダーの部分をリソースにしてAWSインスタンスみたいな書いてとかっていう感じなんですけどまずそういうブロックの塊をいっぱい書きますでJSONだとキーバリューつなぐときコロンだと思うんですけどイコールで書きます」
「ここは結構違いますね変数定義みたいでちょっと気持ち悪いですねプログラミング言語っぽいな変数定義みたいな感じで書けますね本当にちなみにその言語は後々言おうと思ってたんですけどHCL2という言語が書いてHCL2ね知ってる知ってる知ってるハシコープコンフィギュレーションランゲージ2ハシコープコンフィギュレーションランゲージ2うんうんうん」
「HCL2です1の時はちょっと課題が多かったからねやっぱりねやっぱ2はその課題を解決した感じがあるのかな知ってますねHCL2知らんわハシコープ社の言語で書きます知らん」
「これがそうですねJSON大本みたいな感じでコロンはイコールで書きますブロックをいっぱい書いていきますあとはコメントアウトも書けるヒアドキュメントも書けるヒアドキュメントとは開業がある文字のことですかそういう言い方なんですかねこれ説明難しいなと思ってたんですけど」

「なるほど僕はそう思ってます開業がある開業を含む文字みたいなイメージですねはいそれも使えますであとは変数も宣言できますとあれこれJSONでもいけます?JSONは無理変数を宣言できますとで先ほど言ったように変数を」
「tfファイルに書いておいてその変数の中身は実際に.tfで利用したりするんですけど中身は実際に.tfbarsとかの方に書きます環境ごとに分けて作ってるから」
「環境によってそこの値が変わってくるよ的なそうですねはいドメイン名の具体的な中身とか.tfbarsとか先のenvironmentイコールdebとか書いておいたり開発環境だとlocalhostっていうホスト名になってるけど本番だとhima.comになってるみたいなもしくはhima.pro-stagingみたいなねはいはいはいはい」
「変数宣言できるということはそのデータ型も一応あるのでストリングとかブールとかセットとかタップルとかもあるみたいですねマップとかリストとかもありますねセットって何でしたっけ?セットです重複を省くみたいなリスト形式で重複を省くへーそんなのあるんだ知らなかったわありがとうそんな感じですパイソン?いやパイソンにはないないかい?ないはずあったらごめん」
「そういう何かはありそうだけどセットではないと思うタップルは記憶にありますけどあとは先ほど出てきた条件分岐ループとか書けますね」
「ここら辺がJSONとは大きく違うポイントバーッといってきましたループないに使うんだろうねめちゃめちゃいっぱいたくさんイシツ立てるとかじゃないですか10個イシツ立てるみたいな変数1,2,3,4,5,6,7,8,9,10で立てるみたいな社員全員分の開発環境を立てようみたいな時に作るんじゃないはいそんな感じですJSONとの違いでした続きまして」
「ブロックの話をもうちょっとやっていきますさっき出てきたのはテラフォームブロックとかプロバイダーブロックあとはリソースブロックですねもうなんか埋まってる感ありますよ確かにこれ以上なんかあるんですか割とブロックとしては埋まってるもうちょいあるんですけどちょっと詳しく見ていきます大きくはブロックは1つと3つかなっていうところで」
「何がですか日本語が分からないけど1つと3つが分かりやすいかなっていう思考した結果そうなったんですけど1つはテラフォームブロックで他の3つがプロバイダーリソースバリアブルブロックかなっていうとなんでかっていうとテラフォームは一番最初のコンフィギュレーションとか設定をバンと書くやつなんでそれ1つって感じでプロバイダーリソースバリアブルは関係しながら」

「呼び出し合いながらというか関連してるブロックたちなのかなっていうところでそういう分け方をしたんですけどなるほどテラフォームブロックはさっきちょろっと話したリクワイヤードバージョンテラフォーム自体はいくつを使うんですか0.13ですとかプラスリクワイヤードプロバイダーズっていうのを書いてソースとしてはAWSそれもしかも3.0以上とかっていうのを書きますこれがテラフォームブロックなんかあの」
「こういうテラフォームみたいなクラウドフォーメーションみたいなやつだと全然珍しくないんですけど実行するファイルでバージョン宣言するのって珍しいですよねプログラミングインフォーからすると確かにだいたいインストールされてるものですからねそうそうそうそうだからちょっとこれは独特ですねクラウドフォーメーションとかAWSの設定ファイルとかでも書くんですけどDockerComposeのYAMLとかもバージョン書くからなんか上の方に」
「書きましたっけ?書く書く書くでこのバージョンによって何が変わってるんだろうっていつも思いながら書く確かに書きましたね一応なんか何でしょう例えば0.13以上とかの書き方とかもできますなるほどセマンティックバージョニングってやつですかかっこいいかっこいいでしょ今度から使っていいよ使いますセマンティックバージョンが書けますはい多分伝わってないけどセマンティックってダイナミックの逆」
「いや違います違いますすいません訂正させてくださいそうですよねセマンティックバージョニングはですねはいのりさんが言ってたことではないはずです違うんだはいえっと1.23.45みたいな点を3つで区切った数字で表されるバージョニング手法ですそうですはいはいはいそこに対してなんかキャレットとかなんか使うことによってなんかキャレットこのバージョン以上みたいなの指定できたりしませんなんか」
「それはまたセマンティックバージョニングとは別の話ですその点2つで区切ってるバージョニングのことをセマンティックバージョニングって言うらしいですなるほどねメジャーバージョンマイナーバージョンパッチバージョンそうそうそうそうそのニョロニョロの話はちょっとわかりませんなるほどなんかでもジェイソンのあの」
「これJSONじゃないやバージョン管理するときとかに書きますよねNPMとかのそうだねインストールのときとかによく書くイメージですねNPMJSのバージョン管理ツールですねライブラリかライブラリ管理ツールかRubyで言うJMPythonで言うPythonで言うPythonで言うPythonで言うPythonで言うPythonで言うPythonで言うPythonで言うPythonで言うPythonで言うPythonで言うPythonで言うPythonで言うPythonで言うPythonで言うPythonで言うPythonで言うPythonで言うPythonで言うPythonで言うPythonで言うPythonで言うPythonで言うPythonで言うPythonで言うPythonで言うPythonで言うPythonで言うPythonで言うPythonで言うPythonで言うPythonで言うPythonで言うPythonで言うPythonで言うPythonで言うPythonで言うPythonで言うPythonで言うPythonで言うPythonで言うPythonで言うPythonで言うPythonで言うPythonで言うPythonで言うPythonで言うPythonで言うPythonで言うPythonで言うPythonで言うPythonで言うPythonで言うPythonで言うPythonで言うPythonで言うPythonで言うPythonで言うPythonで言うPythonで言うPythonで言う」
「っていうのがテラフォームブロックでちょっと言い忘れたんですけどその急に出てきたリクワイヤードバージョンとかリクワイヤードプロバイダーズこういうのって例えば何ブロックテラフォームブロックにおいては決められた用意されてる変数というかこれをもうこれを書いてくださいっていうブロックによって決まってますなのでプロ」
「プロバイダーとかだとまたプロファイルとかリージョンっていうパラメータを書かないといけない書かないといけないものがあったり必須じゃないものがあったりするんですけど決められてるやつですこのリクワイアドバージョンとかリクワイアドプロバイダーさんプロバイダーさんプロバイダーさん今のがテラフォンブロックです続きましてプロバイダーブロックこれはもうえっと」

「プロバイダー何のプロバイダーを使うかっていうのを一応もう一回一応もう一回指定しておくんださっきので設定できてるかどうか分かんないからもう一回設定しておこうかなみたいなプロバイダーブロックの中に何か書くことあるでしょありますそれを設定するためのブロックだと思うよ多分プロバイダーブロックの中には例えばプロファイル何のアカウントで入るかとかですかねAWSの中のあとはリージョンどの地域に」
「作っていくかっていうところですねなので多分プロバイダーの中で設定しなきゃいけないけど一個一個のリソースに紐付けられない全体設定みたいなやつうんうん」
「を書く領域なんだと僕は思ってましたなるほどちょっと待ってくださいここまで整理するとテラフォームブロックはテラフォームの動作自体を確定させるための設定でプロバイダーブロックはテラフォームっていろんなクラウドに対して作れるからその各プロバイダーに対しての設定を書く場所でその下のリソースブロックっていうのがそのプロバイダーの中で作っていくリソースの設定を自由に書ける場所っていう感じの区分けですかねはい」
「ありがとうございます僕も整理されました助け合っていきましょう今のがプロバイダーブロックです次にリソースブロックですねリソースブロック今のりさんが言ってましたけどプロバイダーでAWSを指定してたらリソースではAWSのインスタンスこれも一応プロバイダーそういうラベルみたいなのがあってその」
「リソースにつける名前で並括弧でパラメータ中身に書くみたいな感じになってるんですねなのでプロバイダーその後のラベルっていうところはこれも決められたものが用意されてますAWSの決まったリソースがあると思うんでEC2だったらこの設定値があるよみたいなEC2のことだったらラベルにはAWSUnderbarInstanceっていうのが用意されてたり」
「VPCだったらAWSUnderbarVPCとかそういうラベルは決まってますこの辺やっぱドキュメント見てVPC作るときなんて書くんだっていうのを頑張って探しながらやる感じですねなるほどねそれがプロバイダーあ違うリソースブロックですなのでこのリソースブロックを書くのが基本的にテラフォームの8割ぐらい占めるのかなというところです」
「僕の昔使った記憶で言うと最近のアップデートで追加された設定値とかが反映されてないので使えなかったりなんかうまく動かなかったりする記憶がありましたが今は改善されてるかもしれません願いましょうはい」
「リソースブロックでした次最後バリアブルブロックこれはもう変数っていうところでコード内で使用される値をパラメーター化し再利用性を高めましょうという感じですね一応これ今.tfファイルの話をしていて変数の中身は.tfbarsにさっき書くって言ったんですけどじゃあ.tfの方のバリアブルブロック何書くかっていうとその」

「型とかを書きますねほんとちょろっとしか書かないイメージなんですけど例えば.tfbarsの方にはプロジェクトイコール中身をテストプロジェクトとかって中身を書いておいて.tfの方にはバリアブルその変数名プロジェクト型タイプはストリングですとかっていう書き方をしてましたちなみにバリエーションとかもできるんですかね」
「バリデーションですかできるのかなヒマプロ-なんとかっていう名前じゃないと受け付けませんっていう情報書いておいてできるのかな余計なこと言いましたね列挙型とか使えるならいけそうですけどね少々お待ちください確かにできたらいいですねこれバリアブルブロックあんま書くことないなと思ってたんですよねタイプしか書かなかったんでちょっと軽くググるとデフォルト値の設定もできますねあーはいはいはい」
「書けそうですね文字数とかバリアブルブロックの中にバリデーションっていうブロックが書けそうパラメーターみたいなのがあるんですねパラメーターというかブロックっていう言い方でしょ中カッコで書くやつバリアブルブロックの中にバリデーションブロックっていうのを作れてそこで入れ子ですか入れ子入れ子」
「入れ子で書けそうよそうするともしかしたらパラメータになるかもしれないですバリアブルの中のバリデーションパラメータって言い方になるね書けるみたい先頭何文字が何という文字でとか文字数全部で何文字以内でとかっていうのを何々勝つみたいな条件文みたいな書き方で」
「書きそうですドキュメント見てるとなるほどありがとうございますこれで非常に保守性の高い感じのものが作れますね管理しやすいちなみにそのバリアブルズブロックで設定したやつってリソースブロックで使えるってことですかそれを」
「使いますそこにバリアブルの方に定義しておくことによって繰り返し使えて便利だよね的なことですかね実際の中身は.tfbarsの方に書いてあるので呼び出すときは.tfbarsファイルの方に書いてあれば$bar.何とか変数名で呼び出せってシールスクリプトみたいな変数名呼び方ですねなるほどJavaScriptみたいな」
「JavaScriptもそうなんですかJavaScriptもだら中格好で囲いますか使いますねっていう感じですねそれがありがとうございます具体的な中身の方を見ていきましたありがとうございます書ける気がしてきましたバリアブルズのところだけまだ意味が分かってないんですけど」
「どういうことですか型を指定するだけ変数自体はバリアブル2中身はそうですねクラスのオブジェクト思考のコードでいうインターフェースみたいなものですよねインターフェースみたいなのがテラフォームの.tfファイルのバリアブルに書いてあって中身は.barsに書く.tfbarsなるほど」

「そうすることによって元のフォーマットが書いている.tfファイルが見やすいまま保たれるよねっていう思想なんですかねいろんなパターンがグローバル変数みたいなの作っちゃってるからそれを少しでも安全にするためにやってるんですかね安全何でも使えるようにしないというか」
「ちなみに環境もし分けるとしたら環境ごとにTFバーズファイル分けるんですよね確か違うっけ環境環境っていうとAWSとAzureDevとプロダクションそこまで分かんないかどうやったっけめっちゃ記憶曖昧ですあそこめっちゃ分けそうな気がします分けた気がするんだよな設計によるっていう感じですかそれともテラフォームとして分けなきゃいけないって話ですか」
「設計によるんだけど分けて使った方が使いやすいとかなのかなって思ったんだけどちょっと曖昧なんでやめましょうこの話はドットTFバーズをいくつも作れるかどうかちょっと分からんですすいませんちょっとじゃあ一瞬調べれば分かるちょっと待ってねえっと」
「いろんなやり方があるみたいでディレクトリで分けることはあるみたいよメインTFのメインTF指定するのかメインTFの場所でテラフォームコマンドするんだっけそれでいうとそのディレクトリカレントディレクトリ内の.tfが全部実行されるんですよただ注意点としてそのカレントディレクトリのサブディレクトリの.tfは実行されないんですねっていう感じなんで」
「メインがないところでは別に.tfがあるカネットディレクトリなら実行されるかなと思います分けようと思えば分けれるんだディレクトリ分ければってことだねそんなことしたら二重三重管理になるからちょっと良くない気がするけどねすいません何も言えない雑談でしたがいい思考でした有識者の方ちょっとお待ちしてますっていうところで次」
「行動の話をしていったので次は実行したらどうなるっていうところをちょっと言いたくてテラフォームっていうのは他にもさっき出てきたのは.tfファイルと.tfbarsがありますとそれは基本的に自分で作るものです次に実行したときコマンドを叩いてそのコマンドも後で言うんですけどインフラAWSに環境を作りましたっていうときに.tfstateファイルっていうのが自動で生成されます」
「これが実行履歴とかを追跡できるようなステイトを管理するものになっててクラウドに起動されたものがここに勝手にコードとしてバーっと出てくるんですねなので2回目同じところにもう1回コードをちょっと修正して展開するってなった時にここの.tfステイトファイルと見比べて差分は何かってやって」
「差分だけ変更してアップデートしたりしてくれるようなファイルになってますそういうのがありますなるほど前回何やったかっていうやつをテキストで保存してるんですかねそうですねそういうことで毎回全部更新するんじゃなくて変わったとこだけできたりとかロールバックできたりとかする都合ですねローリングアップデートですかローリングアップデートじゃないです違いますか別のエピソードの話持ってくるのでやめなさいすいません順番どうなるか分かんないんだからはい」

「はいっていう.tfstatefileっていうのも自動生成されますはいでここからですねコマンドの話をやっとしていきます今までコード書きましたけどどうやって実行すんねんっていうところですねはいで注意点としてまずWindowsだとテレフォームサポートされてるのがGitbashのみこれ言い方で合ってますかこれ言い方で合ってますちょっと違うのかなどういうことえ」
「テレフォームってそもそもインストールして使うんじゃないですか僕はそう思ってましたけどWindowsはまずGitbashってなんだGitで使えるバッシュ違いますGitbashっていうのはGitが入ってるバッシュバッシュですそれバッシュと何が違うんですかWindowsの場合だと何でしたっけ」
「あれあるじゃないですかコマンドプロンプトあるじゃないですかでもあれ全然Linuxライクな動きしないじゃないですかGitとかインストールすれば使えるんですけどめんどくさいんでGitbashっていうそれ専用のターミナルがあってですねそれをインストールするとなんとそのシェルでGitが使えるしかも動きがちょっとLinuxっぽいコマンドになってるというシェルでございますパワーシェルと違うんですねパワーシェルと違うのは多分Gitが入ってるかどうかみたいなところだと思います」
「わーわかんねーここら辺ちょっとあれなんすけどそんなことあるんだねそうなんですよなんかGitBushじゃないと動きませんって言うとまあまああり得るあり得る多分テレフォンで使ってるライバルが入ってないんじゃないパワーシェルにうんうんうんでMacはコンソールターミナルでOKみたいです」
「ユニックス系ですからねちょっと曖昧ですすいません流れとしてコマンドを叩くまでのまずテラフォームのコード書きましたそしたらテラフォームイニットコマンドというのでイニットっていうのを使ってまず初期化をしますごめんなさいイニットに関してはどのタイミングですべきかっていうのは僕だいぶ曖昧なので説明できないんですけどとりあえず一番最初は絶対やりますその他でも」
「多分モジュールとかはそうだと思うんですけどそこら辺の設定大元の設定みたいなところをいじったときはこのイニットは毎回やらなきゃいけないとは思うんですちょっとごめんなさいテラフォームイニットまず最初は絶対やりますで次テラフォームFMTフォーマットですねFMTコマンド叩くのが良いかなとこれは」
「書いたテラフォームのコードを一気に成形してくれます形きれいにしてくれるイコールの位置を整理するとかしてくれるこれはまあすごいねそれやってくれた方が見やすい勝手に書いてくれるんだこれはもうやった方がいいかなと思います結構思想強いですね書き方の思想を押し付けてくるタイプの思想なんですねまあいいと思いますけどそれはそれでヤムルなんてただエラー入ってくるだけですからねうんそうですね」
「フォーマットしてくれます続きましてテラフォームプランっていうコマンドでPLANですねこれで今書いたコードを実行するとこういう変更とか新しいものを作ったりとかあとは破壊されるものをデストロイとかって言うんですけど無くなっちゃうものとか」

「実行するコードの部分はここですみたいなのが出てくるんですよGitの差分みたいなのが表示されるんですねすごい親切ですね実行したらこうなるよってのがちゃんと分かるから実行した後にうわっやっちゃったっていう事件がなくなるわけですねなくなります一応ちょっと言うとその後いよいよ実行するコマンドでテラフォームアプライっていうコマンドで実行するんですねPPLY今のコードを」
「インフラのクラウドの方に反映させるっていう並行なんですけどテラフォームアプライだけだとまずテラフォームプランと同じ変更内容がバーって出るんですよで出て本当にこれを実行しますかイエスかノーを叩くっていうことをやるんでテラフォームプランいらないっちゃいらないんですけどというよりはテラフォームプランでまずどういう変更がされるかっていうのを確認してテラフォームアプライオプションでオートアプルーブっていうのをつけて実行することでイエスノー聞かさずに」
「実行するっていうような感じになるんでプランやってアプライのオートアプローブがいいのかなっていうミスがないです」
「アプライの方はチェック用かプランの方これでいいのかなっていうのをチェックして実際に実行するときに大丈夫かどうか確認して実行するみたいな感じになるのかっていうのが流れですねコード書いてイニットFMTフォーマットでプランでアプライあとはオートアップループつけるかどうか」
「っていうのがテラフォムのコードを実行する流れになってますなるほどねじゅんぺいのさウォータープルーブめっちゃウォータープルーフに聞こえてしょうがないんですけど音声で違うように聞こえるのは致命的ですねウォータープルーブ」
「なんかウォータープルーフ入ってるんだよな何で言ってたのお化粧とかの水弾くタイプのやつ水に強い化粧品じゃないですか自動承認ですねウォータープルーフっていうのが流れになってますこれは先ほど言ったカレントリレクトリの.tfを全部読み込みますよっていうサブディレクトリは読みませんっていう感じです」
「あとはもし作った環境をぶち壊したいとなるとテラフォームデストロイっていうコマンドで全部ぶち壊してくれます一応指定もできるんですけどね特定のやつだけ単語のチョイスがいいですね」
「確かにテラフォームプランとかちょっとかっこよすぎますけどねデリートじゃなくてデストロイなのも僕は好きですねそうなんだデストロイな確かにスッて消すんじゃなくてグシャーって感じじゃないですか確かにね」

「ちなみにLaravelのORMもですねデリートメソッドとデストロイメソッドありますね何が違うんですか引数が確か違った気がする動きは一緒なのにってこと?なーにそれデストロイだとID渡して消せるんですけどデリートだとオブジェクトをディスに入れてからじゃないと消せなかったような気がするなこんな話はどうでもいいんですよ」
「はいテラフォームを実行するまでのコマンドの話でしたなんとなく分かったシンプルですねコマンド他にもあるんですけど基本的にはこれぐらいしか使わないんじゃないかなインフラストラクチャーズアコードはこんなもんですなるほどねいいですねハードル下がりました」
「あとは実際に直しシステムでやってみるとここのこれどうやって設定するんだが山ほど積み重なるって感じですねそこが一番の山ですよねリソースによってのパラメータをひたすらこれが必須で必須じゃないんだこれいらないんだとかっていうそこの苦悩が多いですかねっていう感じでした一応テラフォームの基本はこれで終わりになります一応応用というか」
「インフラインフラ言ってますけどオンプレとかの方にも一応対応してるみたいでハイブリッド環境とかにも向けて自動化も一応可能というツールらしいですちなみにハイブリッド環境って言ってるのは何と何のハイブリッドですかオンプレの想像で言いますね多分パブリッククラウドとオンプレですねシステム連携するタイプのシステムマルット」
「デプロイできるやでって話ですよね多分そうじゃないですか多分クラウドに置きたくない超機密情報はオンプレに置いといてでもそこと連携させたいみたいな連携させたくなるのか超機密情報とパブリッククラウドだけでなくなんじゃないですかオンプレ側でデータベースでデータ取ってマスキングしてなんか」
「統計データとかにしてクラウドに送るみたいなまさにそれっぽいですオンプレミスのデータセンター内でも使用することができますって書いてますね僕は書いてましたそうやってありがとうございます僕はもう分かってましたけどねちょっとふわふわしちゃってましたありがとうございます」
「はいっていう感じであとは例身近なところで言うと前も出ましたけどNetflixとかAirbnbとかも結構使ってるみたいですねテラフォーム企業としてNetflixはだってねインスタンス数万個あるらしいですよ」
「そうですねAzureの時に15万台以上それがコロナ前なんで今やばい超不当客ですねそれはフォーブン使うわNetflixなら使うわ多分ループしかも同じようなインスタンスいっぱい立ってますよね絶対立ってるそうですねそんな感じでまとめとしてはテレフォームによってコードのインフラが定義できて」

「誰でも再現性高くミス減らして管理がしやすくなりましたよっていうのがまとめになりますなるほどねこれめちゃめちゃ便利なツールなんですけど駆け出しというかあんまりね多分若いエンジニアの人にはこの魅力伝わりきらないんじゃないかなとやっぱ思っててですねそうですね僕も未だにめんどくさいが勝ちますからねいやあのねめんどくさいよこれないとそれ言われたら余計めんどくさくなるよ」
「これがないとマジでめんどくさいんですよこれがあるから本番適用めっちゃ楽になるしあとシステム変えた時とかもいいんよこれがない時の設計書アップデートとかしないから絶対人間5人集まったらちゃんとしないから一人ならちゃんとするんですけどねしないこれ伝わんないんですよねなかなか」
「仕事って早く終わらせるためにすごい仕組み化するのが大事だと思うんですけどこれもうその一環ですね動作が安定してればですねあとはテラフォームは最近使ってないので分かんないですけども確かにテラフォームある使う前のことを経験してると」
「よりだよマジバカバカしくなるからねこれなんでデプロイするのにリハーサル2回もやって3週間かかってんのってなりますから確かになこれ将来僕コードすらも書かなくてよくなるんじゃないかなと思ってるんですよどういうことですか構成図GUIで作ってそれがコードになってそれをデプロイできる社会来るんじゃないかなって思うんですよねまあまあまあまあまあ」
「そうですねインフラストラクチャーアズグラフIAGの時代が来ます作ればいいんじゃないですかはいやろうと思えばできそうですけどねただ画像でやるよりもテキストで書いた方が楽説あるかもしれないですねひょっとしたらどうなんでしょうでもまだないってことはブルーオーシャンですよ多分テラフォームザムービーっていう」
「映画館みたいなテラフォーマーズザムービーみたいになってますねテラフォームザムービー作って視覚的にテラフォームのコードを生成するGUIツール面白い面白いオープンオープンじゃない4D4DXなんとかIOドローIOドローIOドローIO」
「とかと連携しちゃってねドローアイロンのファイルからその構成読み取ってテラフォームのファイルに変換するっていうツールいいですねテラフォームザムビー4DXピンドローアイロン要素が多いわ小学生みたいになってるから超究極みたいになってるから」
「はいということでテラフォーム入門編でございましたありがとうございました非常にイメージがついたイメージつきましたファイルを作ってコードを書いてイニットしてアプライして環境を作るというわけですねそうですね設定ファイルを頑張って覚えなきゃいけないですね覚えるのは無理です熟練のエンジニアでも超速でドキュメント開いてますそうですよねとんでもない種類あるんだよねだよね」

「頑張ろうこれでもあれですよね多分インフラの作り方というか構成図書ける人じゃないと書けないですよね確かにちょっとむずいかもしれないですね作用なんならこのテラフォームファイル作る前に」
「構成図書いてますそうですよねだからぜひこれから駆け出しでちょっとテラフォーム興味湧いたよっていう人はまずはちょっとインフラを作るというかパブリッククラウドでインフラを作るところから始めてそれをコードにするっていう感じでステップ踏まないとって感じですよね多分あとはもっと言うとすでにある環境のテラフォーム化もできるのでなんとテラフォームファイルにエクスポートが確かできたんですよ僕がGCBされてる時はへー」
「エクスポートしたファイルはぐっちゃぐちゃなことをやってるので人間が読んでわからない変数が入ってたりするので変数名変えたりとかきれいにしていくっていう作業をちょっとちまちまやってましたけど僕はエクスポートあるんですねエクスポートできるエクスポートっていう名前だったか忘れたけどエクスポートできる既存のものに適用することできるので工事大変だってなってる人はぜひご検討くださいいついつ」
「まとめですか僕が52分なんで締めようかなと思ってハッシュタグひまじんプログラマーそこ忘れたハッシュタグひまじんプログラマーで様々なご意見ご要望お待ちしておりますひまじんはひらがなプログラマーはカタカナハッシュタグはシャープでございますハッシュタグはしてますあとはGoogleフォームですねお便りお待ちしてます全部読みますので」
「たくさんお待ちしています全部読むかは分からないですが全部読みます何卒よろしくお願いしますそれではまた次回バイバイ」