MNP6月分収支

MPN(Microsoft Partner Network)のAzure使用量と料金の6月版です。

Azure6月使用料

仮想マシン系(IPアドレスやデータ転送含む) ¥8240
ストレージ系(データ転送含む) ¥1282
Azure Databricks系(仮想マシン含む) ¥132
Azure Data Lake系 ¥6
HDInsight系 ¥62
合計 ¥9722

仮想マシンの使用量を先月よりも増やしましたが、全体で84.5%とまだ行けそうです。
分析系を扱っていたので、それ系統の料金がかかりました。金額だけ見ると安く見えますが、1時間程度動かしてすぐに消去しているだけです。
本番で使う際にはきちんと考えた方がよさそうです。

Azure DatabricksのデータソースでAzure SQL Databaseに接続できない(Python)

Azure DatabricksのJDBCドライバを使ってAzure SQL Databaseにデータを保存したかったのですが、失敗してしばらく悩みました。Scala版はうまくいくのですが、Python版で失敗します。

これは結論から言うと、サンプルが間違っていたからでした。正しいコードを記述するとうまく接続できました。

具体的には

https://docs.azuredatabricks.net/spark/latest/data-sources/sql-databases.html

のPython Exampleの説明に従い、URLを以下のように定義していました。

jdbcUrl = "jdbc:sqlserver://{0}:{1}/{2}".format(jdbcHostname, jdbcPort, jdbcDatabase)
connectionProperties = {
  "user" : jdbcUsername,
  "password" : jdbcPassword,
  "driver" : "com.microsoft.sqlserver.jdbc.SQLServerDriver"
}

しかし、上記だとPort番号がおかしいと言うエラーになります。

正しくは、

jdbcUrl = "jdbc:sqlserver://{0};{1};database:{2}".format(jdbcHostname, jdbcPort, jdbcDatabase)
connectionProperties = {
  "user" : jdbcUsername,
  "password" : jdbcPassword,
  "driver" : "com.microsoft.sqlserver.jdbc.SQLServerDriver"
}

とすべきです。

これできちんとSQL Databaseに読み書きができました。

Azure Web Appの診断ログのエクスポート先が同じリージョンのストレージしか選べない

タイトル通りです。

複数あるWeb Appのログを同一のストレージBlobに出したかったのですが、特定のWeb Appのみ出力先のストレージが表示されませんでした。何故かと思い、きちんと表示されているものと見比べると、作成されたリージョンが違っていました。どうやらWeb Appは自身と同じリージョンにしかエクスポートできないみたいでした。

Web App自体のリージョンを動かせない仕様だったので、出力先も分散させることにしました。

Application Insightsなどは出力先のリージョン自体を選択できるので、それと同じようになってほしいと思います。

Azure Databricksを使おうとしてvCPUのクォータに引っかかる

MPNのサブスクリプションでAzure Databricksを試そうとしたらデフォルト設定でvCPUのコア数が足りなかったという話です。

データ分析プラットフォームの調査をしていて、HDInsightやData Lake AnalyticisとともにAzure Databricksを試そうとしました。HDInsightとAzure Databricksは動作基盤が仮想マシンなので、作成時にインスタンスを用意する必要があります。

HDInsightはHDInsight用の60コア分の確保領域?のようなものが用意されていたのですが、Azure Databricksは通常の仮想マシンと共用になっていました。

MPN自体はデフォルトで一つのリージョン当たり、10コアまでしか用意されておらず、Databricksを3台(12コア)で動かそうとしたらコア数が足りず、作成時にエラーになってしまいました。一応、最低条件では2台(8コア)で動かすことはできるのですが、それだと並列動作をさせることが出来ないので、サポートに頼んでコア数を増やしてもらい、動作させることが出来ました。

サポートは当日中に対応してくれたのでありがたかったです。

MNP5月分収支

Azureでは毎月の使用量と料金を明細としてダウンロードできるので、MPN(Microsoft Partner Network)で使用した分について大雑把にまとめてみました。

Azure5月使用料

仮想マシン系(IPアドレスやデータ転送含む) ¥7849
ストレージ系(データ転送含む) ¥956
Key Vault ¥0
合計 ¥8758

仮想マシンとストレージは2台で、A4やF8と言った通常のデスクトップ物理マシンに近いクラスにしていました。クレジット限界である¥11500を超えないようにちょくちょく電源をOFFにしていましが、全体としては76%程度の使用なので、もう少し使っていても良かったです。

ストレージやデータベースは一度作ってしまうと中々消せないので、固定費として考えた方がいいかもしれません。

Azure Event HubsのREST API送信でハマった

AzureのEvent HubsはHTTPSとAQMPのどちらかで入力を受け付けているのですが、HTTPSの使い方でハマりました。

Event Hubsとエンティティ(インスタンス)を扱う上で、URIと共有アクセスキーが作成できるのですが、HTTPS経由で使う場合にはSASトークンが必要になります。最初、共有アクセスキー自体がSASトークンなのだろうと思って

‘SharedAccessSignature sr=<URI>&sig=<共有アクセスキー>&se=<期限>&skn=<共有アクセスキーの名前>’

のように入れていました。何度やってもエラーになっていました。

正しくはここにあるようにあらかじめ自分でトークンを作成し、そのトークンを挿入して

‘SharedAccessSignature sr=<URI>&sig=<作成したトークン>&se=<期限>&skn=<共有アクセスキーの名前>`

のようにする必要がありました。

ハマったというよりは、使い方をよく理解していなかっただけなのでMS側には全く非がないのですが、数時間無駄に費やしてしまいました。

MPNアクションパックのAzureサブスクリプションの使用制限

MPNのAzureサブスクリプションを使って仮想マシンを立ち上げようとしたらリージョンや種類に制限がありました。

ここだけ見ても当然ながら全然分からないので、試していくしかなさそうえです。

少なくとも仮想マシンのリージョンに関してはサポートされているのが

  • 米国東部
  • 米国中南部
  • ヨーロッパ西部
  • 東南アジア
  • 米国西部2

のみで、なんだかサービス初期の頃のようでした。

あくまでもデモ用のサブスクリプションなのでしょう。

Azure CosmosDBのテーブルAPI SDKのサポートバージョンでハマった

SQL Serverのテーブルを使っていたシステムの一部をAzure Cosmos DBのテーブルを使うように出来ないかという相談をされました。

もともと一時的な保存領域として使っていたので、システムとしての移行は問題なさそうでしたが、.NET Framework4.5で書かれていたのでCosmosDBのテーブルAPIのSDKが対応していませんでした。調べてみるとテーブルAPIのSDKは.NET Framework4.5.1以降の対応でした。他の機能との互換性もあって.NET Frameworkのバージョンは簡単には上げられそうにないです。これはさすがに詰みです。

その他のAPIと.NET Frameworkのバージョンを調べてみました。

API名 .NET Frameworkのサポートバージョン
SQL API v4.5
テーブル API v4.5.1
Graph API v4.6.1

新しいモノを使う時は下位互換性や上位互換性までチェックしないといけないという事例でした。

SQLインストール済みの仮想マシンのディスク容量に驚いた

SQL Serverで作成したデータベースに外部からアクセスするテストを行うため、SQL Server Expressの環境が必要になりました。物理マシンにインストールすると環境が汚れるので、AzureのSQL Server Expressがインストールされた仮想マシンイメージを使うことにしました。

  • OSはWindows Server 2016
  • 仮想マシンのサイズはD1
  • SQL Serverのバージョンは2017のExpress
  • OSディスクはSSD

とここまでは良かったのですが、実際に作成してみると、OSディスクの他にデータディスクが自動で追加されており、そのサイズがP30(1023GiB)となっていました。データディスクはサイズの拡大が出来ても縮小はできません。値段も13000円/月程度になってしまいます。

Enterprise版とか本番環境を想定するならそれぐらい必要かもしれませんが、こちらはあくまでも簡易的な環境が用意できれば良いと言うことだったので、P6(60GiB)程度になってほしかったです。

テストが完了したら即刻削除しました。素直にAzure SQL Databaseにしておけばよかったと反省しています。

 

Azure無料サービスの仮想マシン

前回Visual StudioのDev Essentialsが使えるようになったので、無料クレジット枠が手に入ったのですが、このクレジットを使わずに12か月の無料サービスとして提供されている仮想マシンを使ってみました。その時の設定などを書きたいと思います。

Linux版とWindows版がそれぞれ別々に提供されていますので、UbuntuでもCentOSでもWindows Serverでも好きなのを選べます。私はとりあえずUbuntu16.04にしました。

リージョンは制限が無いので東日本にしました。

仮想マシンのサイズはB1S Standardを選択します。価格が普通に表示されるので本当に無料か心配になりますが問題ありません。

注意すべきはストレージです。管理ディスク用のOSディスクサイズを64GiB (P6) Freeに変更します。せっかく仮想マシンを無料にしてもストレージが有料だったら課金されてしまうからです。なので、ブート診断も無効にして診断用のストレージを使わないようにします。

これでオール無料で仮想マシンを稼働させることが出来ます。

実際に無料になっているかどうかはサブスクリプションの概要で確認することが出来ます。以下のように無料サービス分は別に表示されます。

仮想マシンと管理ディスクの他にパブリックIPが無料サービスの対象になっています。仮想マシンとパブリックIPは時間課金、管理ディスクは1日単位での課金のようです。したがって複数作って不要なら消去して、という使い方で無料を維持することも可能です。