Mac OS X で Azure CLI を使う

インストール方法とログイン方法など。最近MSアカウントに対応したのでログインまでのやり方です。

インストール

最初にnode.jsとnpmをインストールしましょう。公式サイトからダウンロード・インストールすればOKです。

あとはコンソールで以下のようにazure-cliをグローバルにインストールします。まぁお好みで。

sudo npm install -g azure-cli

最近だとDockerイメージもあるのでDocker導入済みならそちらを使うこともできます。公式ドキュメントを参照。

新しいバージョンへのUpdateはnpm update –g azure-cliとかでOKかと思います。

あとは通常どおりazureコマンドで利用できます。

image

ログイン

Azure CLIで操作する前にログインする必要があります。v0.9.10より古いバージョンでは証明書を使ったログインか、Azure AD上のアカウント(組織アカウント)を利用する必要がありました。

証明書を使用したログイン

もし手元に証明書がない場合は最初にダウンロードします。

azure account download

証明書ファイルが手に入ったらaccount importでインポートします。

azure account import "file location"

file locationのところにダウンロードした証明書を指定してください。あとは対象の証明書で管理できるサブスクリプションに対して操作が可能になります。

組織アカウントを使用したログイン

loginコマンドを使います。

azure login -u <account UPN (email address>

最近GAしたRBAC(ロールベースのアクセスコントロール)は組織アカウントだけが対象なのでこちらを使う必要があります。

Microsoftアカウントを使用したログイン

loginコマンドにユーザーIDを渡さないで実行します。

azure login

すると http://aka.ms/devicelogin にアクセスを促されます。コンソールはそのままでブラウザでURLにアクセスします。
image

コードの入力を促されるので、コンソールに表示されているコードを入力します。(Enter the code —–となっているところ)
image

あとは通常のサインインプロセスが走るのでMSアカウントでサインインします。まぁ組織アカウントでもサインインできますが。

無事サインインできればブラウザを閉じてもOKです。
image

どうでもいいですけど、Safariだとなんかフォントがいまいちですね。
しばらく待つとコンソール上でサインインが完了し、サブスクリプションの一覧が表示されます。
image

あとは通常通り操作が可能です。

その他

組織アカウントを多要素認証で保護している場合などは以下のようなエラーが発生します。

$ azure login -u xxxx@xxxxxx
info:    Executing command login
Password: ***************
+ Authenticating...
error:   Interactive login is required. Use 'azure login' to interactively login.
info:    Error information has been recorded to azure.err
error:   login command failed

この場合はMicrosoftアカウントでのサインイン方法でブラウザから認証を行ってください。

Windows 10のGame DVRが動かない

Windows 10でGame DVRが使えます。が、Win+Gのショートカットで起動するウィンドウの録画などの機能が使えませんでした。(XBoxのアプリ立ち上げてもその部分だけサポートされてないとかでる)

解決策はKB3010081のHotfixを適用しましょうという感じ。

これでバッチです。(なおこのパッチ適用しないとHTTP Live Streaming (HLS)が使えないのかMSEdgeでAppleのイベントのストリーミング見れませんでした)

それから関係ないと思うけど、パッチ適用後MADOSMAがちゃんとモバイルコンパニオンで認識するようになった(

Windows Server 2016 TP3のコンソールを閉じてしまったら

画面まっくろでどうしようもないですウワァァ—–。゚(゚´Д`゚)゚。—–ン!!!!

という方はCTRL+ALT+DEL押してセキュリティメニューだしましょう。

image

Sign out選べば(RDPとかで)再接続したときにちゃんと表示されます。あとはTask Manager表示させて新しいタスクの実行とかでcmd.exeでも起動すればいいでしょう。

※ パスワードも変更できますよ。

Server Core普段使ってる人には自明かもしれません。

Raspberry Pi 2とWindows 10 IoT Coreで温度センサーを使ってみる

公式(?)にあるサンプルはちょっとわかりづらかったので簡単な解説的な?ちなみにこちらです。

※というかMCP3002使った時のコード間違ってるんだよねーあとでPRするかな、、、

Raspberry Pi 2にWindows 10 IoT Core(Build10240=Public Release)をのせてるものとします。あとセンサーとしては一般的な3ピンなアナログ温度センサー、A/DコンバーターはMCP3002を使うものとします。

MCP3002のデータシートはこちら

ちなみに回路的にはこちらのBlogの通りです。温度センサーの極性とRaspberry Pi2のGPIOのピン間違わなければまぁ問題ないでしょう。

※回路図のせようと思ったけどhttp://fritzing.org/にサインアップできないので断念。
※あと温度センサーによるのかもしれないけど誤差とかにも注意しましょう(使ったやつは個体によって最大±4℃の精度らしい。。。)。キャリブレーションできるようにアプリ作っておくといいかもですね。

さてWindows 10 IoT Coreで動作するUniversalなアプリを作ってセンサーからデータを読み取ってみましょう。
まずはSPIデバイスの初期化。

        private const string SPI_CONTROLLER_NAME = "SPI0";
        private const Int32 SPI_CHIP_SELECT_LINE = 0;
        private SpiDevice SpiDisplay;

        private async Task InitSPI()
        {
            try
            {
                var settings = new SpiConnectionSettings(SPI_CHIP_SELECT_LINE);
                settings.ClockFrequency = 500000;
                settings.Mode = SpiMode.Mode0;

                string spiAqs = SpiDevice.GetDeviceSelector(SPI_CONTROLLER_NAME);
                var deviceInfo = await DeviceInformation.FindAllAsync(spiAqs);
                SpiDisplay = await SpiDevice.FromIdAsync(deviceInfo[0].Id, settings);
            }

            /* If initialization fails, display the exception and stop running */
            catch (Exception ex)
            {
                throw new Exception("SPI Initialization Failed", ex);
            }
        }

SPI0使うように設定してSpiDeviceのインスタンス作ってる感じです。

データ読み取るには以下のようにデバイスのTransferFullDuplex()を呼び出せばいいです。

byte[] readBuffer = new byte[3];
byte[] writeBuffer = new byte[3] { 0x68, 0x00, 0x00 }; //01101000 00; /* It is SPI port serial input pin, and is used to load channel configuration data into the device*/

SpiDisplay.TransferFullDuplex(writeBuffer, readBuffer);

とりあえず後の話はセンサー側とか固有の話なので同じA/Dコンバーターなど使わなければ意味がないかも。
MCP3002の場合は欲しいチャンネルの情報を渡せば10ビットで応答が返る仕様です。WriteBufferに決まった信号をセットします。(1bitは固定で0、2bit目は必ず1(スタートビット)、SGL/DIFFも1、CH0を使うので0、MSBFで受け取るので1、あとは0という感じで0b01101000 = 0x68 であとはゼロ、という感じです。MCP3002は10ビット2chのA/Dコンバーターなんですがスタートビットからの分も含めると1回のやり取りで3バイト分の領域が必要になるのでbyte[3]な感じです。

さてreadBufferには読み取った値が入ってるわけですが必要なデータだけ3バイトの中から抽出します。

        private int ConvertToInt(byte[] data)
        {
            int result = data[0] & 0x03;
            result <<= 8;
            result += data[1];
            return result;
        }

スタートビットから数えると応答の1バイト目の3ビットが有効な値なのでその部分を取得して8ビットシフトして、2バイト目の値をそのまま足します。(なんでというのはデータシートでも見てください)

image

これでデータがとれました。で、取れた値を温度に変換する必要があります。
使った温度センサーは0℃で500mVの出力電圧で、1℃につき10mV出力電圧が変わる仕様です。なんでざっくり計算するとこんな感じ。

                var adc = ConvertToInt(readBuffer);
                var vol = adc * 3300 / 1024;
                var t = (vol - 500) / 10.0;

adcの値が得られた値で入力の3.3V(3300mv)を掛けて10ビットの1024で割ると出力電圧がでます。0℃で500mVなので500引いて単位をそろえると摂氏な温度が得られます。

あとは画面に出すなり外部に吐き出すなりお好きなようにどうぞという感じです。

※ブレッドボードで何も考えずつないでやってるあたり、学習コンテンツだなーとは思いますがまぁ面白いからいいです。1万円もかからずにC#(UWP)でアプリが組めてデバイスも触れてという環境はいいんじゃないでしょうか。

Windows 10 IoT Core(UWP)でSASトークンを生成

Windows 10 IoT CoreでというかUniversal Windows PlatformでSASトークンを手動生成するのまき。

なぜそんな面倒くさいことをするのかという前提を書くと

  • Universal Windows Platformでは現状Azure周りの(.NET用の)ライブラリがそのまま使えない(Configuration Managerに依存してるものが使えない)ので代替案が必要
  • REST API等でShared Access Signature(SAS)トークンが必要になる

という感じです。

SASトークンそのものはアクセスしたいリソースのURIと期限等をHMAC_SHA256でハッシュ値を計算したものになります。とりあえずハッシュ値生成部分。

        public string ComputeSignature(string content, string key, BinaryStringEncoding encoding = BinaryStringEncoding.Utf8)
        {
            var algorithmProvider = MacAlgorithmProvider.OpenAlgorithm(MacAlgorithmNames.HmacSha256);
            var contentBuffer = CryptographicBuffer.ConvertStringToBinary(content, encoding);
            var keyBuffer = CryptographicBuffer.ConvertStringToBinary(key, encoding);
            var signatureKey = algorithmProvider.CreateKey(keyBuffer);
            var signedBuffer = CryptographicEngine.Sign(signatureKey, contentBuffer);
            return CryptographicBuffer.EncodeToBase64String(signedBuffer);
        }

UWP用のAPI(CryptographicEngineとか)を使ってる以外はごく普通ですね。
SASトークンそのものは以下のような感じで生成できます。

        private string CreateToken(string resourceUri, string keyName, string key)
        {
            TimeSpan sinceEpoch = DateTime.UtcNow - new DateTime(1970, 1, 1);
            var expiry = Convert.ToString((int)sinceEpoch.TotalSeconds + 3600); //EXPIRES in 1h 
            string stringToSign = WebUtility.UrlEncode(resourceUri) + "\n" + expiry;
            var signature = ComputeSignature(stringToSign, key);
            var sasToken = String.Format(CultureInfo.InvariantCulture,
            "SharedAccessSignature sr={0}&sig={1}&se={2}&skn={3}",
                WebUtility.UrlEncode(resourceUri), WebUtility.UrlEncode(signature), expiry, keyName);

            return sasToken;
        }

出来上がったSASトークンはHTTP RequestのAuthorizationヘッダに設定すればOKです。(別途書く予定ですがAMQPでSASトークンを使用する方法がわからない…)

※元ネタ How to create Shared Access Signature for Service Bus?

Visual Studioの拡張機能のデバッグ時に配置エラー

Visual Studioの拡張機能(Extension)を開発中にたまにおかしくなってデバッグしようとしても以下のような配置エラー(ビルドエラー)になる場合があります。

Build error: "Extension '拡張機能の名称+GUID' could not be found"  Please make sure the extension has been installed.

通常、実験用インスタンス(Devenvを/rootsuffix Exp引数付きで起動する)を使うと思いますが、そこの拡張機能の一覧にごみがある可能性があるので一度きれいにしましょう。

C:\Users\<ユーザー>\AppData\Local\Microsoft\VisualStudio\14.0Exp\Extensions あたりの該当拡張機能が入ってるフォルダと.cacheファイルを消す

HKEY_CURRENT_USER\SOFTWARE\Microsoft\VisualStudio\14.0Exp\ExtensionManager\PendingDeletions あたりにあるそれっぽい文字列値を削除

HKEY_CURRENT_USER\SOFTWARE\Microsoft\VisualStudio\14.0Exp\ExtensionManager\ExtensionAutoUpdateEnrollment あたりにある該当拡張機能の文字列値を削除

だいたいこれでクリアになると思います。

※パス中の14.0ExpはVisual Studio 2015の場合。他のVerの場合は適宜12.0Expやらを参照。

Azure Update (2015.07.17)

ASRの機能が解放されたのでかなりの仮想マシンをAzure上へ移行できるようになったりLinuxサポート増えたりいろいろです。

 

Azure Site Recoveryの一部機能がGA

見出しが難しいですが、ASRがVMware、AWS、Hyper-V、物理サーバーからAzureへの移行に対応しました。

対応表は以下の通りです。

移行元 移行先 サポートGuestOSタイプ
Hyper-V 2012 R2 Azure Azure上でサポートされるすべてのGuest OSタイプ
Hyper-V 2008 R2 SP1 and 2012 Azure Windows (*) またはLinux (*)
VMware vCenter Server 5.0,5.5 ESIi 5.0, 5.5 と 物理サーバー Azure Windows (*) またはLinux (*)
Amazon Web Services (Windows AMIのみ) Azure Windows Server 2008 R2 SP1+
Hyper-V 2012 Hpyer-V 2012 R2 Hyper-VでサポートされているすべてのGuest OSタイプ

* Windows Server 2008 R2 SP1以上、CentOS 6.4, 6.5, 6.6、Oracle Enterprise  Linux 6.4, 6.5、SUSE Linux Enterprise Server 11 SP3

 

Apach Spark for HDInsight (public preview)

HDInsightでApach Sparkが使えるようになりました。

Event HubsのAMQP over WebSocket対応

Event HubsでWebSocket経由でAMQPが使えるようになりました。Service Bus .NET clientで使う場合はServiceBusEnvironment.SystemConnectivitiy.ModeにConnectivityMode.Httpを指定するだけです。お手軽。

Linuxサポートの拡張

以前は対してサポートしてくれてなかったAzureのLinux周りですが(日本でいうところの「サポート」じゃないです)、より深く対応できるようになりました。

対応ディストリビューション

  • Ubuntu
  • CentOS (OpenLogic)
  • Oracle Linux
  • SUSE Linux Enterprise Server (SLES)
  • OpenSUSE
  • CoreOS

サポート範囲

Azureのプラットフォームやサービスに関する根本原因に加えて以下のサポートを制限付きで提供します。

  • インストールと構成
    • Azureプラットフォームやサービスに対応するLinuxディストリビューションをインストール、構成する場合のヘルプなど。根本原因が解決できない場合はディストリビューションベンダーに連絡する必要がありますがMSと一緒にトラブルシュートなセッションを始められるようです。
  • パフォーマンスとネットワーク
    • Azureプラットフォームやサービスに適用。高度なトラブルシュートやパフォーマンスチューニングはディストリビューションベンダーと(以下同上
  • 例外
    • セキュリティに関するシナリオは範囲外
    • 基本的にアプリケーション開発やカスタムコード/カスタムアプリケーションのトラブルシューティングは範囲外。
    • Azure上にアプリケーションやソリューションを構築する場合の設計や構築支援は無いです(パートナー探しましょうね)

3rdパーティーの技術サポート

MS以外のテクノロジーもサポートします。

  • 言語
    • PHP/Java/Python
  • DB
    • MySQL
  • Web、アプリケーションサーバー
    • Apache/Tomcat
  • フレームワーク
    • WordPress

上記に対して以下の範囲をサポートします

  • インストールや設定中に発生した問題
  • Azure上に展開するときのエラー等
  • Azure上でのランタイムエラー
  • Azure上のサービスやプラットフォーム、サポートされているサードパーティーテクノロジーを使って構築されているアプリケーションのパフォーマンス問題

また設計指導や開発支援などのサポートを依頼するとフォーラムやコミュニティのサポートに送られるようです。
サードパーティーの技術サポートは英語であることとUSの営業時間内で利用可能とのこと。今後に期待したいですね。

Media Encoder StandardがGA

オンデマンドのメディアエンコーダーであるMedia Encoder StandardがGAしました。あまり追ってなかったので詳細の把握難しいですがAzure Media Encoderから置き換わるようです(?)

※それとは別にレガシーなエンコーダーは2015年9月15日で終了のようですが。

サポートフォーマットやコデック増やしていったりしやすいようにということでしょうか。メディア WITH MICROSOFTのUpdateを期待してまってます。

Marketplaceのイメージ経由でVM作成時にARMサポート

Marketplaceで仮想マシンなイメージ選択して作成する際に従来通り(クラシックな仮想マシン)か、Azure Resource Manager(ARM)を使ったVMv2な仮想マシンを展開するか選択できるようになりました。

image

あとカスタムなSKUや特典をMarketplaceから選択する際、Azure PowerShellなどプログラムからデプロイできるようにするサブスクリプションを設定できるようになりました。

image

※ライセンス条項などに同意する必要があるので、ここであらかじめ同意しておくことでREST API等で対象のイメージを展開することができるようになる感じです。

設定した内容はサブスクリプションのブレード内でも確認することができます。

image

あとはDocker Hubとの統合などなど細かい(以前の)アップデートもあります。

その他

Windows 10 でスタートメニューの幅を変える

Windows 10のスターとメニューの縦・横幅かえれます。端にマウスもっていけばマウスカーソル変わるのでドラッグしましょう。

既定っぽいサイズ

image

大きくした例

image

※全画面が最大ぽいですね。(サブモニタなど小さい解像度のモニタがある場合はそちらのサイズに依存ぽい)

縦方向はサイズを自由にできますが横方向はタイル4つ分単位とかで広がるのでちょっとドラッグしただけじゃサイズ変えられないように感じるので注意が必要かも。

関西でAzure MLハンズオン勉強会しました

6月13日(土)にMicrosoft関西支店のセミナールームをお借りしてAzure MLハンズオン勉強会を実施しました。
なおハンズオンそのものはMicrosoftの大田さんがデリバリしました。

なお自分はいろんな資料あつめて最近(だいたい//build/,Igniteあたり)のAzure Updateを話しました。

続きを読む

Azure Resource Managerのテンプレート作成方法

Azure Resource Manager(ARM)を使った管理はAzureポータルなどを使うことで透過的に操作できますが、テンプレート作成に必要な情報(JSONの記述内容など)を集めようとするとなかなか難しいところがあります。現状、そういった場合に簡単なのはARM Explorerを利用する方法です。

このサイトを使うと全リソースをJSONで見ることができます。(モードをReadWriteにすると編集も可能)
image

こういったツールを使ってリソースを眺めてJSON書いていくことは可能なのですが、やはりここはツールのサポートが欲しいところです。というわけで本題ですが、Visual Studio 2013/2015RCとAzure SDK 2.6を使うとそのあたりが簡単ですよ、というお話です。

Visual StudioによるARMサポート

Azure  SDK 2.6 for Visual Studioをインストールすると、Visual Studioを使ってARMのテンプレート作成・編集やデプロイが簡単に行えるようになります。

新規プロジェクト作成でARMのテンプレートがあるのでまずは選びましょう。

image

選択後、基本となるテンプレートを選ぶことができます。

image

Virtual Machinesもあるのでうれしいですね(?)

とりあえずWeb appで作ってみましょう。

image

ソリューションにはデプロイ用のPowerShellスクリプト、それからテンプレートのJSON(とパラメーター用のJSON)、AzCopyが含まれます。

※実際にデプロイするにはAzure PowerShellが必要になるので最新版入れておきましょう。

結局JSONを手書き、、、と思いましたか?いいえ、そこはVisual Studioの補助が効きます。

image

JSONスキーマがあるのでKeyと値候補など入力補完できます。これだけ?いいえ。テンプレートの.json開いて「表示」-「その他のウィンドウ」-「JSON アウトライン」を表示してみましょう。

image

今設定されているパラメーターやARMのリソースを見ることができます。選択したリソースがハイライトされたりわかりやすいですね。

またJSON アウトラインからリソースを追加することもできます。

image

VM v2にも対応してるので仮想マシンに関連するリソースの追加も簡単ですね。

後はいろいろテンプレートを作り上げてデプロイする場合はプロジェクトのコンテキストメニューから配置を選べばそのままデプロイできます。

image

デプロイダイアログが表示されるので、対象のサブスクリプションやリソースグループを選んで作成したテンプレート(とテンプレートパラメーターファイル)を選びます。

image

パラメーターは個別に設定できるのでいいですね。「配置」ボタンクリックで配置が開始されます。(ウィンドウ閉じないのでよくわからないけど)

image

04:33:43 - ビルドを開始しました。
04:33:43 - プロジェクト "AzureResourceGroup1.deployproj" (StageArtifacts ターゲット):
04:33:43 - プロジェクト "AzureResourceGroup1.deployproj" (ContentFilesProjectOutputGroup ターゲット):
04:33:43 - プロジェクト "AzureResourceGroup1.deployproj" のビルドが終了しました。
04:33:43 - プロジェクト "AzureResourceGroup1.deployproj" のビルドが終了しました。
04:33:43 - ビルドに成功しました。
04:33:43 - 次のパラメーター値がこの配置に使用されます:
04:33:43 -     siteName: xxxxxxxwebsite
04:33:43 -     hostingPlanName: xxxxxxxxtestplan
04:33:43 -     siteLocation: East US
04:33:43 -     sku: Free
04:33:43 -     workerSize: 0
04:33:43 - 次のコマンドで配置 PowerShell スクリプトを起動:
04:33:43 - 'xxxxxx\azureresourcegroup1\azureresourcegroup1\Scripts\Deploy-AzureResourceGroup.ps1' -StorageAccountName '' -ResourceGroupName 'AzureResourceGroup1' -ResourceGroupLocation 'eastus' -TemplateFile 'xxxxx\azureresourcegroup1\azureresourcegroup1\templates\website.json' -TemplateParametersFile 'xxxxxxx\projects\azureresourcegroup1\azureresourcegroup1\templates\website.param.dev.json'
04:33:44 - 
04:33:44 - 
04:33:44 - Accounts            : {[xxxxx@live.jp, Microsoft.Azure.Common.Authentication.Models.AzureAccount]}
04:33:44 - Subscriptions       : {[xxxxxxxxxxxxxxxx, Microsoft.Azure.Common.Authentication.Models.AzureSubscription]}
04:33:44 - DefaultSubscription : Microsoft.Azure.Common.Authentication.Models.AzureSubscription
04:33:44 - Environments        : {[AzureCloud, Microsoft.Azure.Common.Authentication.Models.AzureEnvironment], [AzureChinaCloud, Microsoft.Azure.Common.Authentication.Models.AzureEnvironment]}
04:33:44 - Context             : Microsoft.Azure.Common.Authentication.Models.AzureContext
04:33:44 - ProfileLoadErrors   : 
04:33:44 - ProfilePath         : 
04:33:44 - 
04:34:06 - [VERBOSE] 4:34:06 - Created resource group 'AzureResourceGroup1' in location 'eastus'
04:34:07 - [VERBOSE] 4:34:07 - Template is valid.
04:34:10 - [VERBOSE] 4:34:10 - Create template deployment 'website'.
04:34:19 - [VERBOSE] 4:34:19 - Resource Microsoft.Web/serverfarms 'xxxxxtestplan' provisioning status is succeeded
04:34:22 - [VERBOSE] 4:34:22 - Resource Microsoft.Insights/alertrules 'CPUHigh buchizotestplan' provisioning status is succeeded
04:34:22 - [VERBOSE] 4:34:22 - Resource Microsoft.Insights/alertrules 'LongHttpQueue buchizotestplan' provisioning status is succeeded
04:34:31 - [VERBOSE] 4:34:31 - Resource Microsoft.Web/sites 'buchizotestwebsite' provisioning status is succeeded
04:34:31 - [VERBOSE] 4:34:31 - Resource Microsoft.Insights/autoscalesettings 'buchizotestplan-AzureResourceGroup1' provisioning status is succeeded
04:34:35 - [VERBOSE] 4:34:35 - Resource Microsoft.Insights/alertrules 'ServerErrors buchizotestwebsite' provisioning status is succeeded
04:34:41 - [VERBOSE] 4:34:41 - Resource Microsoft.Insights/alertrules 'ForbiddenRequests buchizotestwebsite' provisioning status is succeeded
04:34:41 - [VERBOSE] 4:34:41 - Resource Microsoft.Insights/components 'buchizotestwebsite' provisioning status is succeeded
04:34:50 - ResourceGroupName : AzureResourceGroup1
04:34:50 - Location          : eastus
04:34:50 - Resources         : {CPUHigh xxxxxxtestplan, ForbiddenRequests xtxxxestwebsite, LongHttpQueue xxxxxxtestplan, ServerErrors xxxxtestwebsite...}
04:34:50 - ResourcesTable    : 
04:34:50 -                     Name                                  Type                                  Location 
04:34:50 -                     ====================================  ====================================  =========
04:34:50 -                     CPUHigh xxxxtestplan               Microsoft.Insights/alertrules         eastus   
04:34:50 -                     ForbiddenRequests xxxxtestwebsite  Microsoft.Insights/alertrules         eastus   
04:34:50 -                     LongHttpQueue xxxxtestplan         Microsoft.Insights/alertrules         eastus   
04:34:50 -                     ServerErrors xxxxtestwebsite       Microsoft.Insights/alertrules         eastus   
04:34:50 -                     xxxtestplan-AzureResourceGroup1   Microsoft.Insights/autoscalesettings  eastus   
04:34:50 -                     xxxxtestwebsite                    Microsoft.Insights/components         centralus
04:34:50 -                     xxxxtestplan                       Microsoft.Web/serverFarms             eastus   
04:34:50 -                     xxxxtestwebsite                    Microsoft.Web/sites                   eastus   
04:34:50 -                     
04:34:50 - ProvisioningState : Succeeded
04:34:50 - Permissions       : {Microsoft.Azure.Commands.Resources.Models.Authorization.PSPermission}
04:34:50 - PermissionsTable  : 
04:34:50 -                     Actions  NotActions
04:34:50 -                     =======  ==========
04:34:50 -                     *                  
04:34:50 -                     
04:34:50 - Tags              : {}
04:34:50 - TagsTable         : 
04:34:50 - ResourceId        : /subscriptions/xxxxxxxxxxxxxxxx/resourceGroups/AzureResourceGroup1
04:34:50 - 
04:34:50 - 
04:34:50 - 
04:34:50 - 
04:34:50 - テンプレート 'xxxxxxxxx\projects\azureresourcegroup1\azureresourcegroup1\templates\website.json' をリソース グループ 'AzureResourceGroup1' に正常に配置しました。

これだけです。実際にポータルでみると、指定した通り出来上がっています。

image

まとめ

というわけでVisual Studioなどのツールを使って快適ARM生活を送ってくださいませ。