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

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

Azure Functionsで自作の外部ライブラリを使う

Visual StudioでAzure Functionsの関数を扱うときには、Functions用のプロジェクトを作成してデプロイしますが、別プロジェクトで作成した自作のライブラリを使うこともあると思います。

簡単な例として、足し算を行うライブラリと、それを用いて計算結果を表示するFunctionsで作ってみました。ライブラリとFunctionsは別のプロジェクトにしています。

ライブラリのコード

namespace Adder
{
    public class Class1
    {
        public static int Add(int a, int b)
        {
            return a + b;
        }
    }
}

 

Functionsのトリガーは何でもよかったのですが、簡単のため、キューをトリガーとして動作するようにしました。ライブラリを参照として追加しています。

Functionsのコード

using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Host;
using Adder;

namespace FunctionApp
{
    public static class Function1
    {
        [FunctionName("Function1")]
        public static void Run([QueueTrigger("myqueue-items", Connection = "AzureWebJobsStorage")]string myQueueItem, TraceWriter log)
        {
            log.Info($"1 + 2 = {Class1.Add(1, 2)}");
        }
    }
}

 

これでビルド、Azure環境にデプロイ、実行すると計算結果がきちんとログに表示されています。

[Info] Function started (Id=c86b54e4-5af4-4d1a-af28-116a6fb0af12)
[Info] 1 + 2 = 3
[Info] Function completed (Success, Id=c86b54e4-5af4-4d1a-af28-116a6fb0af12, Duration=2ms)

また、コンソールからディレクトリを見てみると、Functions用のDLLの他に、ライブラリ用のDLLがアップロードされていることが分かります。

特に難しくはないのですが、注意としてフレームワークを揃えることと、クラスライブラリのプロジェクトにすることです。

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日単位での課金のようです。したがって複数作って不要なら消去して、という使い方で無料を維持することも可能です。

Visual Studio Dev Essentialsを使い始めました

いつ始めようか迷っていたVisual Studio Dev Essentialsをようやく使うことにしました。

いずれ利用するつもりのMicrosoft パートナーネットワークのアクションパックに申し込む前に、これを使って色々調べようと思います。

ただ、Azureの3000円/月の無料枠を使うつもりでしたが、ここにあるように去年で廃止されていました。新しい無料枠はリソースの種類が決まっているようです。仮想マシンがB1Sサイズなのはともかく、管理ディスクがSSDで64GB使えるのはうれしいところです。

実際にDev Essentialsを申し込む場合に、事前に用意するのは以下です。

  • クレジットカード
  • 携帯電話
  • マイクロソフトアカウント

以下の手順で申し込みます。

1. Visual StudioのDev Essentialsページから「今すぐ参加またはアクセス」をクリックします。
2. サインイン画面になるので、マイクロソフトアカウントのユーザー名とパスワードを入力します。
3. My Visual StudioのHome画面に飛ぶので、ここにある「Azure」の「アクティブ化」をクリックします。
4. Azureの契約情報を入力していきます。

  • 国/地域
  • 電子メールアドレス
  • 電話
  • 名の読み方
  • 姓の読み方

5. 電話による本人確認では電話番号を入力してテキストメッセージ(SMS)か電話する(自動音声)を選択します。
6. 選択した方法で確認コードが送られてきます。
7. 6桁の数字による確認コードを入力して「コードの確認」をクリックします。
8. クレジットカードや住所などの情報を入力します。
9. 初期のままだと実際に課金されることは無いので心配は不要です。

  • カード番号
  • 有効期限
  • セキュリティコード
  • クレジットカードの名義
  • 郵便番号
  • 都道府県
  • 市区町村
  • 住所1

10. アグリーメントとして同意のチェックボックスをチェックします。
11. 最後に「サインアップ」をクリックします。

情報確認とサブスクリプション設定が完了すると、Azureのポータル画面に飛びます。この時、同時に「Azureの無料アカウントへようこそ」というメールも送信されます。

ただし、この段階だとまだポータル上でサブスクリプションIDが確認できませんでした。不思議に思って一旦ログアウトし、入りなおしたらきちんと登録されていました。

これで使い道自由の22,500円分の無料クレジットと一部のリソースが自由に使えるようになりました。

Azure Durable FunctionsのNuGetでハマった

Azure Durable Functions(ランタイム2.0)からSignalRを使うためにNuGet参照を行おうとしたら参照方法が変わっていたのでハマりました。
ライブラリの変更だけでなく、アセンブリ情報参照用のファイルまで変更する必要がありました。

公式ドキュメントによるとランタイム1.0ではproject.jsonファイルに以下のように書くのですが、

{
  "frameworks": {
    "net46":{
      "dependencies": {
        "Microsoft.AspNet.SignalR": "2.2.2"
      }
    }
   }
}

ランタイム2.0ではfunction.projと言うファイル名にして以下のように書きます。

<Project Sdk="Microsoft.NET.Sdk"> 
  <PropertyGroup> 
    <TargetFramework>netstandard2.0</TargetFramework> 
  </PropertyGroup> 
  <ItemGroup> 
    <PackageReference Include="Microsoft.AspNetCore.SignalR" Version="1.0.0-alpha2-final"/> 
  </ItemGroup> 
</Project> 

公式ドキュメントではこの書き方を見つけることが出来ず、ここを見てようやく理解しました。

Durable Functionsのようなプレビュー版は試行錯誤の繰り返しです。