Azureリソースを構築したあとに、ちゃんとリソースができているかの
テストを行う際にInspecというものがあると知ったので使ってみました。
InSpecとは
Rubyで作成されており、環境構築が正しく行われているかを
確認するためのオープンソースのツールとなります。
Azure、AWS、GCPのクラウドでの構築にも対応しています。
環境
- RedHat:8.3
- InSpec:4.33.1
事前に準備が必要なもの
InSpecでAzureに接続するためのサービスプリンシパルが必要となりますので
事前に作成しておいてください。
また、以下の情報が接続時に必要となります。
- サブスクリプションID
- クライアントID
- クライアントシークレット
- テナントID
参考サイト
以下サイトを参考にしながら実施してみました。
InSpecのインストール
# curl https://omnitruck.chef.io/install.sh | sudo bash -s -- -P inspec
インストールされたバージョンを下記コマンドで確認します。
# inspec version
4.33.1
Azure環境変数の設定
InSpecがAzure環境に接続するための環境変数を設定していきます。
# export AZURE_SUBSCRIPTION_ID="xxxxxxxx-xxx-xxxx-xxxx-xxxxxxxxxxxx"
# export AZURE_CLIENT_ID="xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx"
# export AZURE_CLIENT_SECRET="xxxxxxxxxxxxxxxx"
# export AZURE_TENANT_ID="xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
#
InSpecのAzure用のプロファイルを作成
以下コマンドでプロファイルを作成していきます。
※カレントディレクトリに作成されます。
# inspec init profile --platform azure azure_test
※azure_test
はプロファイル名で任意に設定できます。
プロファイルは以下のように作成されます。
# ls -lR azure_test
azure_test:
total 8
drwxr-xr-x. 2 root root xx xxx xx xx:xx controls
-rw-r--r--. 1 root root xx xxx xx xx:xx inspec.yml
-rw-r--r--. 1 root root xx xxx xx xx:xx README.md
azure_test/controls:
total 4
-rw-r--r--. 1 root root xx xxx xx xx:xx example.rb
#
テストコードの記載
テストコードはプロファイル内のcontrols
配下に格納していきます。
いまあるexample.rb
とは別にck_vnet.rb
を作成します。
テストの内容はリソースグループtest_group
にtest-vnet
というVNETが存在するかという確認になります。
describe azurerm_virtual_networks(resource_group: 'test_group')
.where(name: 'test-vnet') do
it { should exist }
end
テストの実行
# inspec exec azure_test -t azure://
Profile: Azure InSpec Profile (azure_test)
Version: 0.1.0
Target: azure://[tenantid]
Azure Virtual Networks - api_version: 2018-02-01 user_provided test_group Microsoft.Network/virtualNetworks with name == "test-vnet"
? is expected to exist
Profile: Azure Resource Pack (inspec-azure)
Version: 1.43.5
Target: azure://[tenantid]
No tests executed.
Test Summary: 1 successful, 0 failures, 0 skipped
#
上記は1つのテスト成功した旨が表示されています。
本当は色が成功したテスト緑色、失敗した場合は赤色で表示され視覚的にもわかりやすいです。
最後に
今回試したのは簡単なテストでしたが、比較する方法もいろいろと用意されているみたいなので組み合わせていくことでいろんなテストができそうでした。
InSpecを利用することでテストの自動化もしやすくなるのかなと思いました。