2017年4月11日火曜日

Azure仮想マシン展開用のJSONファイル

Microsoft Azureの仮想マシンを一般化して再展開する場合は、JSON形式のフォーマットでパラメーターを与える必要があります。

このフォーマット、なかなか複雑なので苦労します。私が使っているものを公開しておきます。

なお、このファイルはマイクロソフトの安納さんのブログ記事「Azure Resource Manager で作成した仮想マシンをキャプチャーする」に掲載されたものを一部修正し、可用性セットの設定を追加したものです。

もっとも、現在は「管理ディスク(managed disk)」を使った仮想マシンであれば、GUIで簡単に取り込めるので、JSONファイルの出番もあまりないかもしれません。



{
    "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
    "contentVersion": "1.0.0.0",

    "parameters": {
      "osMasterImageUri": {
      "type": "string",
      "metadata": {
        "description": "マスターイメージのURI"
      }
    },
    "vmName": {
      "type": "string",
      "metadata": {
        "description": "仮想マシンの名前"
      }
    },
    "osType": {
      "type": "string",
      "allowedValues": [
        "Windows",
        "Linux"
      ],
      "defaultValue" :"Windows",
      "metadata": {
        "description": "OSのタイプ"
      }
    },
    "adminUserName": {
      "type": "string",
      "metadata": {
        "description": "管理者ユーザーID"
      }
    },
    "adminPassword": {
      "type": "securestring",
      "metadata": {
        "description": "管理者ユーザーIDのパスワード"
      }
    },
    "vmSize": {
      "type": "string",
      "allowedValues": [
        "Standard_D1",
        "Standard_D1_v2",
        "Standard_F1"
      ],
      "defaultValue" :"Standard_F1",
      "metadata": {
        "description": "仮想マシンのサイズ"
      }
    },
    "StorageAccountName": {
      "type": "string",
      "metadata": {
        "description": "ストレージアカウントの名前"
      }
    },
    "existingVirtualNetworkName": {
      "type": "string",
      "metadata": {
        "description": "仮想ネットワーク"
      }
    },
    "subnetName": {
      "type": "string",
      "metadata": {
        "description": "サブネット名"
      }
    },
    "availabilitySetName": {
      "type": "string",
      "metadata": {
        "description": "可用性セット名"
      }
    }
  },

  "variables": {
    "api-version": "2015-06-15",
    "location": "[resourceGroup().location]",
    "publicIPAddressType": "Dynamic",
    "vnetID": "[resourceId('Microsoft.Network/virtualNetworks', parameters('existingVirtualNetworkName'))]",
    "subnetRef": "[concat(variables('vnetID'),'/subnets/', parameters('subnetName'))]",
    "nicName": "[concat(parameters('vmName'),'-nic')]",
    "publicIPAddressName": "[concat(parameters('vmName'),'-pip')]",
    "osDiskVhdName": "[concat('http://',parameters('StorageAccountName'),'.blob.core.windows.net/vhds/',parameters('vmName'),'osDisk.vhd')]"
  },

  "resources": [
    {
      "apiVersion": "[variables('api-version')]",
      "type": "Microsoft.Network/publicIPAddresses",
      "name": "[variables('publicIPAddressName')]",
      "location": "[variables('location')]",
      "properties": {
        "publicIPAllocationMethod": "[variables('publicIPAddressType')]"
      }
    },
    {
      "apiVersion": "[variables('api-version')]",
      "type": "Microsoft.Network/networkInterfaces",
      "name": "[variables('nicName')]",
      "location": "[variables('location')]",
      "dependsOn": [ "[concat('Microsoft.Network/publicIPAddresses/', variables('publicIPAddressName'))]" ],
      "properties": {
        "ipConfigurations": [
          {
            "name": "ipconfig1",
            "properties": {
              "privateIPAllocationMethod": "Dynamic",
              "publicIPAddress": {
                "id": "[resourceId('Microsoft.Network/publicIPAddresses',variables('publicIPAddressName'))]"
              },
              "subnet": {
                "id": "[variables('subnetRef')]"
              }
            }
          }
        ]
     }
  },
  {
    "apiVersion": "[variables('api-version')]",
    "type": "Microsoft.Compute/virtualMachines",
    "name": "[parameters('vmName')]",
    "location": "[variables('location')]",
    "dependsOn": [
      "[concat('Microsoft.Network/networkInterfaces/', variables('nicName'))]"
    ],
    "properties": {
      "hardwareProfile": {
        "vmSize": "[parameters('vmSize')]"
      },
      "osProfile": {
        "computername": "[parameters('vmName')]",
        "adminUsername": "[parameters('adminUsername')]",
        "adminPassword": "[parameters('adminPassword')]"
      },
      "storageProfile": {
        "osDisk": {
          "name": "[concat(parameters('vmName'),'-osDisk')]",
          "osType": "[parameters('osType')]",
          "caching": "ReadWrite",
          "createOption": "FromImage",
          "image": {
            "uri": "[parameters('osMasterImageUri')]"
          },
          "vhd": {
            "uri": "[variables('osDiskVhdName')]"
          }
        }
      },
      "networkProfile": {
        "networkInterfaces": [
          {
            "id": "[resourceId('Microsoft.Network/networkInterfaces',variables('nicName'))]"
          }
        ]
      },
      "availabilitySet": {
           "id": "[resourceId('Microsoft.Compute/availabilitySets', parameters('availabilitySetName'))]"
      }
    }
  }
  ]
}

今さら聞けない! Active Directory入門

2017年4月10日(月)に「今さら聞けない! Active Directory入門」というタイトルで無料セミナーを行ないました。

スライドは「今さら聞けない! Windows Server 2016 Active Directoryドメインサービス入門」として公開しています。

私が初めてActive Directoryに触ったのが1997年ですから20年経ったことになります。

今でも基本的な構造は全く変わっていないのは、当初の設計が良かったからでしょう。

もっとも、1997年当時は今と違うこともたくさんあって、ドキュメントには「Windows NTでは、ローカルグループとグローバルグループが分かりにくかったので、Active Directoryでは単に『グループにする』とありましたが、実際にはユニバーサルグループが追加されて、さらに複雑になっています(しかし、分かりやすくはなりました)。

DSA
▲Windows NT 5.0ベータ1での管理画面

2017年4月7日金曜日

クラウドコンピューティングの定義: rapidly provisioned and released

訳あって、改めてクラウドコンピューティングの定義を調べています。

米国商務の国立標準技術研究所(NIST)の定義は、WordファイルだったのがPDFになっていました。

The NIST Definition of Cloud Computing

この翻訳はいくつかあるのですが、最も有名なものが情報処理推進機構(IPA)のものでしょう。

NISTによるクラウドコンピューティングの定義

クラウドコンピューティングは、共用の構成可能なコンピューティングリソース(ネットワーク、サー バー、ストレージ、アプリケーション、サービス)の集積に、どこからでも、簡便に、必要に応じて、ネットワーク経由でアクセスすることを可能とするモデルであり、最小限の利用手続きまたはサービスプロバイダとのやりとりで速やかに割当てられ提供されるものである。

以前読んだものを少し違う、と思って調べたらAgile Catさんによる別の翻訳もありました。

とても重要な NIST のクラウド定義:対訳

クラウド・コンピューティングとは、コンフィグレーションが可能なコンピューティング・リソース(ネットワーク/サーバー/ストレージ/アプリケーション/サービス)で構成される共有層への、オン・デマンドのネットワーク・アクセスを可能にするための、利便性の高いモデルのことだ。そして、それらのリソースは、最小の管理手順もしくは、サービス・プロバイダーとのやりとりにより、迅速に供給され、また、解消されるものとなる。

太字部分の原文はこうなっています。

rapidly provisioned and released

一般的な「release」の意味は「解放する」でしょう。スポーツフィッシングでよくある「catch and release」のreleaseです。

クラウドコンピューティングで「(利用者が)仮想マシンをリリースする」と言えば「仮想マシンを物理的な結びつきから解放する」「削除する」の意味になります。

一方で、releaseには「提供」の意味もあります。通常は「出版」の意味で使いますが、IT分野では「製品がリリースされる」のような使い方をします。

クラウドコンピューティングで「(クラウド事業者が)新しい仮想マシンをリリースする」と言えば「社内で準備していたものが、一般提供(社内だけのものから一般解放)された」となり、「高性能な仮想マシンを使う準備ができた」になります。

このように、誰が主体かによってまるで違う意味になってしまいます。

さて、本当はどうなんでしょうね。

クラウドでは「すぐに確保する」ことと同じくらい「すぐに(追加費用なしで)解放する」ことが大事なので、「解消」説を採用したいと思います。

そういえば、CRMを提供しているクラウドサービスの会社「Salesforce」の方が、何かの講演で言ってました。

Salesforceの顧客満足度はとても高い。
なぜなら「不満のある人はすぐに解約する」。

半ば冗談のようでしたが、これは非常に大事なことだと思います。

DSC00409
▲我が家のSurface RT、不要になったけどなかなか捨てられない