cloud-initの使い方(Terraform実行環境の構築)
2019-07-04
azblob://2022/11/11/eyecatch/2019-07-04-usage-of-cloud-init-for-terraform-env-construction-000.jpg

先日、AZ-102 の試験に合格し、昨年合格した 70-533 との組み合わせで無事 Azure Administrator Associate の資格をゲットした松枝です。

資格試験に向けた勉強中に、cloud-init.txt というものを使えば ubuntu 環境の初期セットアップが容易にできることを知りました。
基本的には MS の公式ドキュメントを参照していただければ環境構築できると思いますが、今回は Azure 上の VM に Terraform の実行環境を作りたいときの具体的な設定をご紹介します。

なぜ Terraform の実行環境をAzure上に作るのか?

Terraform は実行ファイルが1つあれば動くので手元の PC 上に環境構築しても良いのですが、Terraform を実行する人間は自分とは限らないので誰でも同じ実行環境を用意できるようにしたいです。
Terraform のバージョンさえ合っていればいいので、お手軽な cloud-init.txt を使用する方法を選択しました。

注意事項

今回は分かりやすさ重視で記載しています。
実際に使用する際は VM サイズの検討や SSH 接続の制限などの要素も設計して構築していただけたらと思います。

cloud-init.txtの準備

ubuntu 16.04 LTS の環境を想定し、下記の内容で構成します。

#cloud-config
package_upgrade: true
packages:
  - unzip
runcmd:
  - wget https://releases.hashicorp.com/terraform/0.12.3/terraform_0.12.3_linux_amd64.zip -P /tmp
  - sudo unzip /tmp/terraform_0.12.3_linux_amd64.zip -d /usr/local/bin

runcmd のところで実行したい処理を記載します。今回は Terraform のバイナリの zip ファイルのダウンロードと展開です。terraform コマンドが /usr/local/bin に配置されるようにしました。
zip ファイルの展開で unzip を使用したいので packages に記載します。

Azure CLI 2.0 を使用した Terraform 実行用VMの作成

あとは普通に Azure CLI を使ってVMを作るだけです。

Azure CLI 2.0を未導入の場合、下記リンクからインストールします。
https://docs.microsoft.com/ja-jp/cli/azure/install-azure-cli?view=azure-cli-latest

PowerShell等を立ち上げて、先ほど作成した cloud-init.txtのフォルダに移動します。

> cd <cloud-init.txtの存在するフォルダ>

Azureにログインします。

> az login

複数サブスクリプションを使用されている方はaz account show でアクティブなサブスクリプションを確認し、必要に応じで az account set で切り替えておいてください。

VM 作成先のリソースグループを作成します。

> az group create --name <リソースグループ名> --location <場所>

場所には、例えば東日本なら japaneast 、西日本なら japanwest を記載します。

VM を作成し、cloud-init.txt を使用して初期セットアップを実行します。

az vm create --resource-group <リソースグループ名> --name <VM名> --image Canonical:UbuntuServer:16.04-LTS:latest --custom-data cloud-init.txt --admin-username <管理ユーザ名> --generate-ssh-keys

実行すると下記のように実行結果が表示されます。

{
  "fqdns": "",
  "id": "/subscriptions/xxx-xxx-xxx-xxx-xxx/resourceGroups/xxx/providers/Microsoft.Compute/virtualMachines/xxx",
  "location": "japaneast",
  "macAddress": "xx-xx-xx-xx-xx-xx",
  "powerState": "VM running",
  "privateIpAddress": "10.0.0.4",
  "publicIpAddress": "xxx.xxx.xxx.xxx",
  "resourceGroup": "xxx",
  "zones": ""
}

作成された VM に Tera Term 等で接続しましょう。
SSH 接続の秘密鍵はWindowsの場合、C:\Users\<ユーザ名>\.ssh に作成されています。

terraform コマンドが上手く配置されたか確認してみましょう。

$ which terraform
/usr/local/bin/terraform

簡単に Terraform 導入済みの VM が作れましたね!
あとは GitHub から tf ファイルを持ってくるなりして、Terraform をガンガン使っていきましょう!