terraform cloudを使ってAWSを構築する。
なんでterraform cloudを使うの?
そもそもなんでterraform cloudを使うのって話なのですが、terraformで環境構築を実行すると
現在どんな状態でこうしたよって言う、tfstateファイルが出力され管理されます。
これをローカルを保存すると、実行後の変更反映前に消えてしまったり、他の人がterraformを実行する事で環境状況が変わった事を保存できなくなったりします。
そこでS3でtfstateファイルを保存して共有する等もありましたが、より簡単に保存、共有できるようにできるのがterraform cloudで使わない手がないって感じです。
terrafrom cloudの設定
既にアカウントは所持している物として
terrafform cloudの操作でRemoteとLocalのがあるので、どっちがよいと言う話なのですが
Remoteの場合github内で「Terraform Working Directory」で指定したフォルダ内で操作をするようです。
この場合gitに上げてからterraform cloud内で処理となり、開発中でこのフローでは柔軟性にかけ厳しいです。
そこでlocalから操作を選択します。
localからterraform cloudへのアクセス
まず、左上にあるい人のマークをクリックしてUser Settingを選択しtokenを作成します。
tokenの作成が終わったら、ローカルより接続を行います。
terraform login
上記を実行し、yesを選択後、作成したtokenを貼り付けます。
terraform cloudからAWSの操作
一番気になったのが、terraform cloudからAWSへ接続のクレデンシャルをどのように持つのか?ですが
一番簡単な方法としては、terraformクラウドで環境変数として持つことができます。
環境変数は
- Terraform Variables・・・
terraform.tfvars
にセットする値 - Enviroment Variables・・・TerraformのShell環境にセットする値
にします。
環境変数としてAWSの場合、下記の様にセットします。
access_key = “”
secret_key = “”
そもそもterraformでaws認証する方式はどんなのがあるのか?
①実行時にコマンドラインで渡す
terraform plan \
-var 'access_key=hoge' \
-var 'secret_key=hoge'
これは、毎回入力する必要があるので基本はなしです。
②変数にして渡す。
terraform.tfvarsと言うファイルを作成し
access_key = "hoge"
secret_key = "hoge"
変数として保存しておく。
③環境変数として保存しておく
TF_VAR_変数名
としておけば変数を呼び出す事ができます。
gitのrepositoryとの連動
Terraform Working Directoryを設定して、git内での実行ファイルのある場所を設定します。