Help us understand the problem. What is going on with this article?

Azure Resource Manager(ARM)の小ネタ:仮想マシンの自動シャットダウン設定をJSONテンプレートから行う

More than 3 years have passed since last update.

はじめに

2016年11月にAzureポータルから仮想マシンの自動シャットダウンが設定できるようになりました。
テスト環境や開発環境などを指定時間になったら強制的にシャットダウンさせることによって、不要なコストアップを避ける事ができます。

詳しくはAnnouncing auto-shutdown for VMs using Azure Resource Manager(英語)もしくは、MSさとうなおきさんの【Azureなう 12/2号】本番環境でも仮想マシンを自動シャットダウンあたりを参照ください。

実行例

ポータル画面上で以下の状態になっているものを。。。
image

ポータル画面からは変更せずにAzure PowershellからNew-AzureRmResourceGroupDeploymentコマンドを使って実行します。

PS C:\> New-AzureRmResourceGroupDeployment -ResourceGroupName KTKRLINUX-rg -TemplateFile .\autoshutdown-template.json -TemplateParameterFile .\autoshutdown-parameters.json


DeploymentName          : autoshutdown-template
ResourceGroupName       : KTKRLINUX-rg
ProvisioningState       : Succeeded
Timestamp               : 2017/01/20 6:36:11
Mode                    : Incremental
TemplateLink            : 
Parameters              : 
                          Name             Type                       Value     
                          ===============  =========================  ==========
                          vmName           String                     KTKRLINUXVM01
                          shutdownStatus   String                     Enabled   
                          shutdownTime     String                     1700      
                          shutdownTimezone  String                     Tokyo Standard Time
                          shutdownNotification  String                     Disabled  
                          shutdownNotificationTime  Int                        15        
                          shutdownNotificationWebHook  String                     http://example.com/

Outputs                 : 
DeploymentDebugLogLevel : 

ポータル画面をリロードして自動シャットダウンの設定が変更されたことを確認します。
image

JSONテンプレート

今回紹介したJSONテンプレート本体とサンプルパラメータを以下に示します。

テンプレート本体

autoshutdown-template.json
{
    "$schema": "http://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
    "contentVersion": "1.0.0.0",
    "parameters": {
        "vmName": {
            "type": "string"
        },
        "shutdownStatus": {
            "type": "string",
            "defaultValue": "Enabled"
        },
        "shutdownTime": {
            "type": "string"
        },
        "shutdownTimezone": {
            "type": "string",
            "defaultValue": "Tokyo Standard Time"
        },
        "shutdownNotification": {
            "type": "string",
            "defaultValue": "Disabled"
        },
        "shutdownNotificationTime": {
            "type": "int",
            "defaultValue": 15
        },
        "shutdownNotificationWebHook": {
            "type": "string",
            "defaultValue": "http://example.com/"
        }
    },
    "variables": {},
    "resources": [
        {
            "type": "Microsoft.DevTestLab/schedules",
            "name": "[concat('shutdown-computevm-',parameters('vmName'))]",
            "apiVersion": "2016-05-15",
            "location": "[resourceGroup().location]",
            "dependsOn": [],
            "properties": {
                "status": "[parameters('shutdownStatus')]",
                "taskType": "ComputeVmShutdownTask",
                "dailyRecurrence": {
                    "time": "[parameters('shutdownTime')]"
                },
                "timeZoneId": "[parameters('shutdownTimezone')]",
                "notificationSettings": {
                    "status": "[parameters('shutdownNotification')]",
                    "timeInMinutes": "[parameters('shutdownNotificationTime')]",
                    "webhookUrl": "[parameters('shutdownNotificationWebHook')]"
                },
                "targetResourceId": "[resourceId('Microsoft.Compute/virtualMachines',parameters('vmName'))]"
            }
        }
    ]
}

サンプルパラメータ

autoshutdown-parameters.json
{
  "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentParameters.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "shutdownStatus": {
      "value": "Enabled"
    },
    "vmName": {
      "value": "TESTVM01"
    },
    "shutdownTime": {
      "value": "1900"
    },
    "shutdownNotification": {
      "value": "Disabled"
    }
  }
}

おわりに

JSONテンプレートはAzure Powershellほどではありませんが、copyIndex()などの機能を使うことによって複数の仮想マシンに対して同じ操作を一括設定ができたりします。
今回紹介した、単独仮想マシンに対する設定変更レベルであれば、ポータル画面から実施したほうが早いですが、色々と拡張することにより効率的に利用できるのではと思います。

yotan
Azureコンサルタント/イクメン/カワイイモノズキ/デジタルモノズキ/バイクノリ/Microsoft MVP for Azure
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした