2016年4月8日金曜日

Bot Frameworkベースのアプリ実行に、401 Unauthorizedや403 Forbiddenが出る場合

Bot Frameworkでアプリを作成してデプロイした場合、Basic認証ができずにエラーになることがあります。 これは、Emulatorを使った場合、App Appsとしてデプロイした場合、双方で発生します。

これは、どうやらBot FrameworkがBasic認証をうまくハンドリングできていないのが原因のようです。

回避策としては、
1. HTTPSで接続できるようにする
2. Basic認証を外す
となるのですが、お試しでやるときにHTTPSを構成するまでもないと思うので、Basic認証の外し方を記述しておきます。

やり方は単純で、MessageController.cs内の[BotAuthentication]属性をコメントアウトするだけです。
namespace Bot_Application1
{
    //[BotAuthentication] //この属性をコメントアウトする
    public class MessagesController : ApiController
    {
     ......

2016年3月18日金曜日

HDInsightクラスタ(Windows)でヘッドノードに管理者権限を付与できない件について

HDInsightクラスタに紐づいたストレージ間でAZCopyでデータコピーをしようという要件がありそうなのですが、これは第3者のVMを経由しないとだめなようです。
AZCopyをインストールするにはWindowsの管理者権限が必要なのですが、これが不可とのことです。

参考:Administrator Privileges on Headnode of HDInsight-Cluster

2016年3月14日月曜日

Azure SQL DatabaseでSQLの実行時間を図る方法

SQL文の実行時間を測定したい場合は
set statistics time on
をSQL文の前に実行します。
例えば
set statistics time on;
go
select * from saleslt.Customer;
go
といったSQL文を実行すると
SQL Server parse and compile time: 
   CPU time = 0 ms, elapsed time = 1 ms.

    (847 row(s) affected)    

 SQL Server Execution Times:
   CPU time = 16 ms,  elapsed time = 8 ms.
といった実行時間の情報が得られます。

また、平均CPUに基づいて上位N位のSQL文を取得したい場合には、動的管理ビュー「sys.dm_exec_query_stats」を使います。
例えば上位5位までのSQL文を取得したい場合には
SELECT TOP 5 query_stats.query_hash AS "Query Hash", 
    SUM(query_stats.total_worker_time) / SUM(query_stats.execution_count) AS "Avg CPU Time",
    MIN(query_stats.statement_text) AS "Statement Text"
FROM 
    (SELECT QS.*, 
    SUBSTRING(ST.text, (QS.statement_start_offset/2) + 1,
    ((CASE statement_end_offset 
        WHEN -1 THEN DATALENGTH(st.text)
        ELSE QS.statement_end_offset END 
            - QS.statement_start_offset)/2) + 1) AS statement_text
     FROM sys.dm_exec_query_stats AS QS
     CROSS APPLY sys.dm_exec_sql_text(QS.sql_handle) as ST) as query_stats
GROUP BY query_stats.query_hash
ORDER BY 2 DESC;
GO
といったSQL文を実行します。

なお、残念ながらこれらはAzure SQL Datawarehouseでは使用できないようです。

参考:https://technet.microsoft.com/ja-jp/library/gg457940.aspx

2016年2月5日金曜日

リモートデスクトップの接続数制限解除

AzureでSQL Database等を操作するときに、踏み台用のWindows VMを構成し、リモートデスクトップ経由で操作することがあるかと思います。 Windows Server 2012 R2のリモートデスクトップ接続はデフォルトだと1セッションしか接続出来ないので、この制限を解除する手順を紹介します。

  1. 「ファイル名を指定して実行」より「gpedit.msc」と入力
  2. 「ローカルコンピューターポリシー」->「コンピューターの構成」->「管理用テンプレート」->「Windowsコンポーネント」->「リモートデスクトップサービス」->「リモートデスクトップセッションホスト」->「接続」を選択
  3. 「リモートデスクトップサービスユーザーに対してリモートデスクトップサービスセッションを1つに制限する」を「無効」に変更

これでリモート接続上限2になり、コンソールと合わせると3セッションの操作が可能になります。
同一ユーザでも2セッション張る事が可能です。

2016年1月21日木曜日

SQLサーバーからランダムに行を取り出す方法

SQLサーバーからランダムに行を取り出したいとき、以下のSQLが最もコストが低いようです。例えば、<取り出す割合>を10と指定すると、10%の行をランダムに取り出します。
SELECT * FROM <表名>
WHERE (ABS(CAST((BINARY_CHECKSUM (<キー列>, NEWID())) as int)) % 100) < <取り出す割合>

2016年1月8日金曜日

PowerShellで、仮想マシンを起動停止してみる

Azureポータルにアクセスしなくても、PowerShellで仮想マシンの起動停止が簡単にできます。

仮想マシンを起動するコマンド
Start-AzureRmVM -ResourceGroupName <リソースグループ名> -Name <仮想マシン名>

仮想マシンを停止するコマンド
Stop-AzureRmVM -ResourceGroupName <リソースグループ名> -Name <仮想マシン名>

なお、リソースグループ名と仮想マシン名がわからない場合も、コマンドで取得できます。
# リソースグループ名
Get-AzureRmVM | Select ResourceGroupName

# 仮想マシン名
Get-AzureRmVM | Select Name

ARMテンプレートを使ってWindows仮想マシンを作ってみる

Azure Powershell 1.0以前のバージョンではAzure Service Management(ASM)とAzure Resource Manager(ARM)関連のコマンドレッドの切り替え(Switch-AzureModule)が必要でしたが、1.0からはARM関連のコマンドレッドはAzureRMモジュールに含まれるようになりました。以下では、AzureRMモジュールを使ってWindows仮想マシンを作成します。

仮想マシンをAzureにデプロイする場合の基本構文は、以下になります。
#パラメータの指定
$deployName="<デプロイメント名>"
$rgName="<リソースグループ名>"
$locName="<場所>"
$templateURI="<テンプレートのURI>"

# リソースグループの作成
New-AzureRmResourceGroup –Name $rgName –Location $locName

# 仮想マシンをデプロイ
New-AzureRmResourceGroupDeployment -Name $deployName -ResourceGroupName $rgName -TemplateUri $templateURI

Windows仮想マシンを最も簡易的に作成するテンプレートのURIは
https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/101-vm-simple-windows/azuredeploy.json
※最新のテンプレートについては、GitHub上でURIを確認してください。

これは、Windows Server 2012 R2 Datacenterの仮想マシンをStandard D2サイズで作成するテンプレートになります。
このテンプレートを使用する場合、指定できるパラメータは、ユーザー名、パスワード、DNS名ラベルのみになります。その他のパラメータを変更したい場合は、テンプレートをカスタマイズして使用してください。

なお、テンプレートのREADMEにはWest USロケーションに仮想マシンを作成すると書かれていますが、上記のようにリソースグループでロケーションを指定することにより、West USロケーション以外に仮想マシンを配置することが可能なようです。