1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

InSpecを利用してAzureリソースのテストを実行してみた!

Last updated at Posted at 2021-04-27

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_grouptest-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を利用することでテストの自動化もしやすくなるのかなと思いました。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?