TerraFormでAzure環境作って沼にハマったおはなし

f:id:ecb_ssakagami:20201208153432p:plain



前回の投稿からだいぶ日が空いてしまったサボり癖のある窓際社員のガミさんです
コロナが収まる気配がないですが気持ちだけは元気です

さて、本題です。
今回は社内でIaCを推進せい!ということでAzure環境をTerraFormで構築したおはなし

ハマりポイントを重点に記載をしているのでIaCってなに?TerraFormってなに?
という人はググってみよう!
必要があればIaCとTerraFormの記事もかきまする

天の声
えらいひと
おーい
ヒマやろ?
Azure環境簡単に作れるようにしてくれや!
開発環境、検証環境、商用環境も簡単につくれるようにな!
ほえー
ヒマじゃないのに・・・
今話題のIaCってやつやな
(承知しました!)
既読
2:30
えらいひと
また心の声と逆やで
ちゃちゃっと頼むわ
ほな

f:id:ecb_ssakagami:20201208171143p:plain

既読
2:30
※画像はイメージです。本当はちゃんと指示されました!
※LINE風CSSとスタンプはナコさんのサイトの素材を利用させていただいております。

続きを読む!

まずはGoogle先生に相談から
Googleせんせい

f:id:ecb_ssakagami:20201209140411p:plain

ぐぐるせんせい
なにが知りたいねん?

Azure環境をIaCでつくりたいん!
なんか知ってたらおしえてーな
既読
2:35

f:id:ecb_ssakagami:20201209140411p:plain

ぐぐるせんせい
それならTerraForm使うと幸せになれるで!

f:id:ecb_ssakagami:20201208171242p:plain

既読
2:35
それからつくられたAzure環境からIaCへのコード化はできるんか?
既読
2:36

f:id:ecb_ssakagami:20201209140411p:plain

ぐぐるせんせい
AWSさんとちゃうねん
TerraFormerみたいな便利なツールはAzure用にはないんやで!
セコセココード書いて頑張りな!

f:id:ecb_ssakagami:20201208171235p:plain

既読
2:37


さてここからがAzure TerraForm沼のはじまりでした・・・
ハマりポイントその1
恐ろしく時間だけが奪われていく
 TerraFormのリファレンスから構築に必要なリソース名を検索して実際にコードをAzureに流してみる

手動で構築したリソースとTerraFormで構築したリソースの差異を調べる

リソース内の未設定の項目のコードを書いてまた差分確認・・・
これをリソース分繰り返し実行していく
そのあとは商用、検証、開発環境用にプランをわけたりだなんだりだと・・・
本当に時間だけが搾取されていく

まさに沼

f:id:ecb_ssakagami:20201210143529p:plain



ハマりポイントその2
TerraFormの実行でエラーがよく発生する・・・
しかもエラーが発生するまでに1回あたり20分くらいかかることもある
他の人のPCだと動くお前の環境だけおかしい!(通称:おま環)問題が発生しまたも時間搾取が。。。
これを解決するのにGoogle先生とずっと会話を続け
・TerraFormのバージョンが違う
・ARMテンプレートのバージョンが違う
・BashじゃなくてPowerShellでやってみろ
・MacじゃなくてWindowsでやってみろ
といろいろアドバイスをいただいても解決しませんでした

そしてたどりつたいところはAzure CloudShellを使うということでした

おま環の駆逐を目指して今度はAzure CloudShellの調査を開始
調査、検証事項を全て書いてしまうと全3回くらいのブログ記事が書けてしまうのでちょっと割愛!
・CloudShellには元々TerraFormがインストールされているが安定版(0.13.3あたり)をインストールしよう!
binフォルダは保持されるけどセッションが切れるごとにTerraFormバージョンが元に戻るので・・・
初回実行時
mkdir bin
cd bin
wget https://releases.hashicorp.com/terraform/0.13.3/terraform_0.13.3_linux_amd64.zip
unzip terraform_0.13.3_linux_amd64.zip
$env:PATH="$HOME/bin/:"+$env:PATH
terraform -version

2回目以降
cd bin
unzip terraform_0.13.3_linux_amd64.zip
$env:PATH="$HOME/bin/:"+$env:PATH
terraform -version
・CloudShellのストレージは各アカウント容量が決まっている(5GBと説明があるが体感1GBくらい)のでTerraForm安定版のダウンロードとtfファイルくらいしか置くのをやめよう!
・毎回az loginが必要かつ20分(とは書いてあるけど5分で落ちてた時もあった)操作しないとCloudShellが落ちるので操作は一気に!
・ローカルPowerShellのTerraFormで使えていた[Invoke-SqlCmd]が使えなくなるので[sqlcmd]を使おう!
・パスワード自動生成などで[$'` ]を使用するとTerraFormがうまく動かないのでパスワード生成から外しておこう!

それ以外の注意事項は普通にTerraFormを使うのと変わらないので割愛します
※100スター⭐️到達したら真面目にTerraForm記事かきます
これでおま環もバス係数が1の状態も回避できる!

Tipsをいくつか書こうと思っていたのですがダラダラと沼のおはなしを続けてしまったので一旦おしまいにしておきます。
ちなみに書こうと思っていたTipsは↓です
・マルチテナント環境にテナントごとのリソース(ストレージとかKeyVaultとか)をループで簡単に追加したい!
・TerraFormでSQL Serverに対してSQLを自動実行する方法
などなどネタはあるのでマイペースにやっていきたいと考えています

~ecbeingでは、新しいことに楽しんでチャレンジできるエンジニアを大募集中です!~
careers.ecbeing.tech