Quantcast
Channel: Microsoft Azure Japan Team Blog (ブログ)
Viewing all 711 articles
Browse latest View live

Azure の Kubernetes に関するハッカソンを実施

$
0
0

このポストは、8 月 28 日に投稿した Hackathon with Kubernetes on Azureの翻訳です。

マイクロソフトは初めて全社規模でハッカソンを実施 (英語)し、Kubernetes による Azure へのデプロイを視覚化するツールを新しく作成しました。今回、Kubernetes を Microsoft Azure の Docker コンテナーの管理に使用できることを発表 (英語)しましたが、それと同時に視覚化ツール用のコードも公開しました。このコードは Azure Kubernetes Visualizer の GitHub リポジトリ (英語)からダウンロードできます。

ハッカソン プロジェクトの詳細

今回のプロジェクトは、Azure で Docker の管理を行っているときに Kubernetes がどのような処理を実行しているかを視覚化するシステムを構築するというものでした。Kubernetes (英語)は宣言型のクラスター管理システムで、Docker (英語)と呼ばれるコンテナー化テクノロジをサポートします。こちらのページ (英語)でも紹介されているように、Docker は「ポータブルで軽量なランタイム」で、「アプリケーションの迅速な組み立てが可能」です。このプロジェクトの目的は、Container (コンテナー) や Pod (ポッド)、Label (ラベル)、Minion (ミニオン)、Replication Controller (レプリケーション コントローラー) などの Docker および Kubernetes のコンセプトを視覚的に表示することでした。その成果が、次のスクリーンショットです。

Kubernetes のクラスターは、1 つの Master (マスター) と複数の Minion で構成されます。Master はクラスター全体の管理を担当するものであり、Minion で実行する要求を発行し、Kubernetes の API 層を提供します。Minion は Docker を実際に実行する (つまりエンド ユーザーのワークロードを実行する) 部分です。Pod はコンテナー内の Minion 上で実行され、Master が各 Minion に Pod を分散させます。Kubernetes Visualizer では、名前を割り当てて Pod を作成し、その Pod をコピーする数を指定できます。

[Create!] ボタンをクリックすると、JSON の “Pod テンプレート” を更新できます。このテンプレートは、Pod とコンテナーの関連付け、各コンテナーで実行されるイメージ、および外部からサービスにアクセスする際に使用するポートのマッピングを定義します。

この Kubernetes Visualizer では、Kubernetes の理解を促進するために、バックエンドで自動的に作成された Pod テンプレートを編集できるようになっています。編集するには、[Pod Source] ボタンと [RC Source] ボタンをクリックします。下図のように、[Pod Source] では、Nginx インスタンス、および自動的に割り当てられたポート番号が表示されます。

この Pod テンプレートを編集すると、Kubernetes Visualizer の最初のスクリーンショット (Nginx と Redis の両方を実行している青やピンクの Pod を表示) にあるような、他の構成の Pod を作成できます。次の図は同じ Pod テンプレートを含む同等の Replication Controller のソースですが、Replication Controller ではコピーする Pod の数を指定します。

Kubernetes Visualizer には、Kubernetes の Label というコンセプトの表示を支援する役割があります。Label を使用すると、Pod に任意のキーと値のペアを割り当てて、Kubernetes で実行するすべての処理を体系化することができます。Kubernetes Visualizer は、Pod に関連付けられた Label に格納されている名前 (ユーザーが指定したもの) に従ってポッドを色分けします。名前ごとに色が変わります。

Kubernetes と Docker による学習

Kubernetes と Docker を使用していると、Docker が Pod の作成手順をキャッシュしてコンテナーの繰り返し処理の速度が向上することにすぐに気付くでしょう。最初に Minion 上に Pod を作成するときには、処理に数分ほどかかります。これは、主に Docker が Ubuntu および Nginx のイメージをダウンロードする間待機するためです。しかし、それ以降 Minion に Pod を作成するときには、イメージが既にキャッシュされているため大幅に処理が速くなります。これは、Kubernetes で実行されるアプリケーションのアーキテクチャのうち中核となるコンポーネントはほとんど変更されないことが予測できる場合は便利な機能です。たとえば、今回の例ではソース コードが変更されるだけで、常に Ubuntu および Nginx をベースとします。つまり、たいていの場合は Docker のキャッシュ機能により Kubernetes でのアプリケーションのセットアップと実行は非常に高速に行われます。

先日チームは、クラスターのストレス テストを実施し、多数の Pod を作成したときに Kubernetes がどのような挙動をするかを確認することにしました。このテストでは、初回に実施した 30 ~ 50 個の Pod での結果は非常に良好で、200 までのスケール アップが可能でした。次のスクリーンショットは、Nginx のコピーを 200 個作成した 3 回目のテストを実施しているようすです。回転する青いアイコンが表示されている黒いボックスは、起動処理中の Pod を示しています。1 番上の行は、Pod の作成要求は終了しているが Minion にはまだ割り当てられていない Pod を示しています。また各列は、既に Minion に割り当てられた Pod です。色付けされた Pod は、起動処理が終了し準備が完了した Pod を表しています。

参考情報

さらに詳細な情報をご希望の方は、このツールを動画で説明している Channel 9 の最新の Cloud Cover シリーズ (英語)をぜひご覧ください。また、GitHub からコードをダウンロード (英語)して、お客様の Azure のクラスターでこのツールをお試しください。チームでは、このツールが初めて Kubernetes や Docker、Azure をご利用になる方のお役に立てることを願っています。

最後までお読みいただきありがとうございました。

Michael Blouin、Madhan Arumugam Ramakrishnan (ハッカソン チームを代表して)


Azure Site Recovery: お客様のデータの安全性を確保するための取り組み

$
0
0

このポストは、9 月 2 日に投稿した Azure Site Recovery: Our Commitment to Keeping Your Data Secureの翻訳です。

Azure Site Recoveryは障害発生時にアプリケーションを保護するための機能で、復旧処理を安全に調整して、お客様が 24 時間 365 日いつでも Azure のサービスをご利用いただけるようにします。昨年、マイクロソフトの法務本部ゼネラル カウンセル兼エグゼクティブ バイス プレジデントの Brad Smith が自身のブログでお客様のデータのプライバシー保護に対する取り組みについて報告しました。Azure Site Recovery はマイクロソフトのプライバシーに対する取り組みの一環としてゼロから構築された、クラウドとオンプレミスの両方のコンポーネントで構成されたハイブリッド IT サービスであり、次のような特長があります。

  • 通信中のデータおよび格納されているデータを暗号化
  • Perfect Forward Secrecy や 2048 ビット長の暗号キーなど、業界最高クラスの暗号化技術を使用してあらゆるチャネルを保護

Azure Site Recovery はサービス指向型アーキテクチャで、次の 3 つの主要コンポーネントで構成されています。

  1. Azure Site Recovery の保護および復旧エクスペリエンスは Azure 管理ポータルから使用可能なため、場所を選ばず 24 時間 365 日体制で複数の障害復旧サイトに存在するすべての Azure の資産を単一の管理インターフェイスから管理できます。
  2. Azure Site Recovery Provider は System Center の Virtual Machine Manager (VMM) サーバーにインストールされているオンプレミスのコンポーネントで、Azure Site Recovery サービスに接続して送信のみの通信を行います。このコンポーネントではインターネット接続が必要で、オンプレミスのプロキシ サーバーを使用できるため、VMM サーバーからインターネットに直接接続する必要がなくなります。
  3. Azure Recovery Service Agent は仮想マシンをホストしている各 Windows Hyper-V Server にインストールされているオンプレミスのコンポーネントで、オンプレミスの仮想マシンに Azure の保護機能を提供します。このコンポーネントではインターネット接続が必要で、オンプレミスのプロキシ サーバーを使用できるため、Hyper-V Server からインターネットに直接接続する必要がなくなります。

お客様のオンプレミスのコンポーネントとクラウド ベースの Azure Site Recovery サービスとがやり取りする主なチャネルは次の 2 つです。

  • 通信チャネル

VMM サーバーにインストールされている Azure Site Recovery Provider と Hyper-V のホスト マシンにインストールされている Azure Recovery Services Agent は、フェールオーバーや稼働状況の監視といった Azure のサービスを実行する際には必ず Azure Site Recovery と通信します。そのため、こうした通信チャネルの安全を保つことは、サービスにとって不可欠と言えます。

オンプレミスから Azure Site Recovery サービスへの通信チャネルでは必ず 443 番ポート (HTTPS) が使用され、またすべての要求で業界標準の X.509 証明書による認証が行われます。これにより、Azure との通信経路上のデータは完全に保護されます。

通信チャネルの安全性を確保する以外にも、Azure からの操作の整合性を維持するために、オンプレミスの Provider では VMM の登録時に収集されたユーザー固有のキーである Vault Key を通信に使用します。Azure Multi-Factor Authenticationを使用すると、Azure Site Recovery の管理の際に Azure 管理者が Azure ポータルからアクセスするときに、さらにセキュリティが向上します。

  • レプリケーション チャネル

Hyper-V のホスト マシンにインストールされている Azure Recovery Services Agent は、Virtual Machines を指定したお客様のストレージ アカウントに複製 (レプリケート) します。このチャネルでやり取りされるすべてのデータの安全を確保するために、Azure の地理冗長ストレージ アカウントへの複製の前に、データはお客様が管理する X.509 暗号化証明書を使用してオンプレミスで暗号化され、さらに上記の安全な通信チャネルで転送されます。このしくみにより、Azure に格納されているデータも完全にセキュリティが確保さ���ます。

お客様の Virtual Machines に格納されているデータの暗号化には AES-256 が使用されます。Virtual Machines をお客様の Azure サブスクリプションでインスタンス化できるように、お客様が管理する暗号化証明書は安全な場所に格納され、実際の障害復旧操作の実行中または障害復旧テストの実施中にのみ使用されます。

また、Azure Site Recovery では、お客様のコンテンツをデータセンター間で移動するときにも暗号化を行います。マイクロソフトはセキュリティとプライバシーの保護に全力で取り組んでおり、業界最高クラスの暗号化技術で通信中および格納中のデータを保護します。

さらなる詳細情報について知りたい方や、他のユーザーと意見交換をしたい方は、MSDN の Azure Site Recovery フォーラムもご利用ください。

ここでは Azure Site Recovery の概要についてご紹介しました。料金情報無料評価版へのサインアップ製品仕様の詳細についてもぜひご覧ください。

Azure WebSites で自分専用の MySQL Server を作成する

$
0
0

このポストは、9 月 2 日に投稿した Create your own dedicated MySQL Server for your Azure Websitesの翻訳です。

お客様が利用している LAMP 環境や WAMP 環境のアプリケーションを Azure でホストするには、使用が簡単で高い信頼性も得られる Azure WebSites を使用することをお勧めします。また、Azure WebSites は PHP スタックをサポートしており、MySQL Server の使用方法としては次の 2 種類から選択できます。

  1. Azure ストアから MySQL サービスの ClearDB を使用する
  2. Azure Virtual Machine で自分専用の MySQL Server をセットアップする

以下のような状況のときには、Azure で実行されている Virtual Machine で MySQL Server を使用します。

  • MySQL の構成要件が特殊で、Azure ストアから利用可能な ClearDB のサービス プランでは対応できない場合
  • 開発とテストを目的とした MySQL Server を構築し、複数の開発用/ステージング用サイトで再利用する場合

MySQL Server をセットアップする場合は Azure Virtual Machine を使用するのが最も手軽で、柔軟性の高いリソースが必要なときに自分専用のスケーラブルなコンピューティング インフラストラクチャを自由に構築することができます。Windows と Linux ディストリビューションのいずれでも、Azure 管理ポータルから数分程度で簡単に新しい Azure Virtual Machine を作成できます。この記事では次の操作について説明します。

  • Microsoft Azure VM で MySQL Server を作成する
  • Linux Azure VM で MySQL Server を作成する
  • MySQL Server に接続可能な Azure WebSites を作成する

Microsoft Azure VM で MySQL Server を作成する

  1. ご自身の Azure アカウントで Azure 管理ポータルにログインします。
  2. 管理ポータルの左下で [+New] をクリックし、[VIRTUAL MACHINE]、[QUICK CREATE] の順にクリックします。
  3. [Virtual machine configuration] ページで次の情報を入力します。
  • Virtual Machine 名称 (windowsmyslsrv など) を指定します。
  • 新規ユーザー名 (azureuser など) を指定します。
  • [NEW PASSWORD] ボックスに強力なパスワードを入力します。
  • [CONFIRM] ボックスにパスワードを再入力します。
  • [SIZE] ボックスのドロップダウン リストから適切なサイズを選択します。
  • [REGION/AFFINITY GROUP/VIRTUAL NETWORK] ボックスで、Virtual Machine イメージをホストするリージョンを選択します。

以上の手順で Windows Server 2012 VM が作成されます。MySQL を Microsoft VM にインストールする手順は、「Azure で Windows Server 2008 R2 を実行する Virtual Machine への MySQL のインストール」の記事を参照してください。この記事は Windows Server 2008 R2 について書かれたものですが、Azure Virtual Machine で任意の Windows Server VM を作成する場合も手順は同じです。

リモート アクセスを有効にする

MySQL Server は、既定では「ルート」ユーザーへのリモート アクセスを禁止しています。このため、新たにルート ユーザー用のホストを作成して、任意の場所からルート ユーザーとしてログインできるようにする必要があります。

mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%'
> IDENTIFIED BY 'password' WITH GRANT OPTION;
mysql> FLUSH PRIVILEGES;
mysql> exit

これで MySQL Server の構成が完了し、Microsoft Azure VM のデータベース ホスト名が「windowsmysqlsrv.cloudapp.net:3306」に設定されました。

Azure WebSites で index.phpという名前の簡単な PHP アプリケーションを作成します。方法は、「Azure WebSites で PHP Web サイトを作成する方法」の説明をご覧ください。このアプリケーションは MySQL Server を実行している VM のデータベースに接続し、お客様の WebSites から新たに作成した MySQL Server に接続できるかどうかのテストを行います。

<?php
// 接続の作成: ホスト名、データベースのユーザー名とパスワード、
// データベース名を更新

$con=mysqli_connect("windowsmysqlsrv.cloudapp.net:3306","root","root",
"databasename");

// 接続を確認
if (mysqli_connect_errno()) {
    echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
else
{
    echo "Connection with MySQL database was successful";
}
?>

:「Access denied (アクセスが拒否されました)」や 「Host ‘xxx.xx.xxx.xxx’ is not allowed to connect to this MySQL server (ホスト ‘xxx.xx.xxx.xxx’ はこの MySQL Server への接続が許可されていません)」 などのエラー メッセージが表示された場合は、次の項目を確認します。

  • ファイアウォール用の 3306 番ポートが受信側と送信側の両方で開かれているか
  • 接続に使用しているユーザーが MySQL Server でリモート接続を許可されているか。ユーザーがホスト列でワイルドカードの「%」に関連付けられ、任意のリモート IP が許可されているかどうかを、mysql.host テーブルで確認します。

Linux Azure VM で MySQL Server を作成する

  1. ご自身の Azure アカウントで Azure 管理ポータルにログインします。
  2. 管理ポータルの左下で [+New] をクリックし、[VIRTUAL MACHINE]、[FROM GALLARY] の順にクリックします。
  3. プラットフォームイメージとして [Ubuntu] を選択し、ページ右下の矢印をクリックして次に進みます。
  4. [Virtual machine configuration] ページで次の情報を入力します。
  • Virtual Machine 名称 (linuxmysqlsrv など) を指定します。
  • Virtual Machine の認証には、SSH キーによる方法とユーザー名とパスワードによる方法のいずれかを選択できます。ここではユーザー名とパスワードによる方法を使用します。新しいユーザー名 (azureuser など) を指定します。ここで指定した名前は Sudoers リストのファイルに追加されます。
  • [NEW PASSWORD] ボックスに強力なパスワードを入力します。
  • [CONFIRM] ボックスにパスワードを再入力します。
  • [SIZE] ボックスのドロップダウン リストから適切なサイズを選択します。
  • 矢印をクリックして次に進みます。
  • [Virtual machine mode] ページで次の情報を入力します。
    • [Standalone Virtual Machine] を選択します。
    • [DNS Name] ボックスに有効な DNS アドレス (linuxmysqlsrv など) を入力します。
    • [REGION/AFFINITY GROUP/VIRTUAL NETWORK] ボックスで Virtual Machine イメージをホストするリージョンを選択し、矢印をクリックして次に進みます。
  • Azure で Virtual Machine が作成されるまで待機します。
  • Virtual Machine の作成が完了したら、リモート接続先のエンドポイントを構成する必要があります。既定では、Azure のインストーラーが SSH のエンドポイントを公開されている 22 番ポートに作成し、該当する Virtual Machine に接続できるようにします。

    Virtual Machine に接続する

    仮想マシンのプロビジョニングとエンドポイントの構成が完了したら、SSH (Linux の場合) または PuTTY (英語) (Windowsの場合) を使用してそのエンドポイントに接続します。

    SSH を使用した接続

    Linux マシンの場合は、SSH を使用して仮想マシンに接続します。コマンド プロンプトで次のコマンドを実行します。

    ssh newuser@testlinuxvm.cloudapp.net -o ServerAliveInterval=180

    画面の指示に従って仮想マシンのユーザーのパスワードを入力し、仮想マシンに接続します。

    PuTTY を使用した接続

    Windows マシンの場合は、PuTTY を使用して仮想マシンに接続します。PuTTY はこちらのページ (英語)からダウンロードできます。

    1. putty.exeをご自身のコンピューター上のフォルダーにダウンロードして保存します。コマンド プロンプトを開き、putty.exeをダウンロードしたフォルダーに移動して実行します。
    2. [Host Name] に「linuxmysqlsrv.cloudapp.net」、[Port] に「22」と入力します。

    Virtual Machine を更新する

    仮想マシンの接続が確立された後に次のコマンドを実行すると、オプションでシステムの更新と修正プログラムの適用が実行できます。

    sudo apt-get update

    Ubuntu に MySQL Server 5 をインストールする

    Ubuntu に MySQL Server 5 をインストールする手順は簡単で、時間もそれほどかかりません。皆様が想像するほど難しいものではないかと思います。

    端末ウィンドウを開いて、次のコマンドを実行します。

    sudo apt-get install mysql-server

    MySQL クライアントも必要なので、端末ウィンドウで次のコマンドも実行します。

    sudo apt-get install mysql-client

    これで MySQL Server がインストールされます。サーバーの稼働状況は次のコマンドで確認できます。

    sudo service mysql status

    SSH トンネルを使用して MySQL に接続する

    Secure Shell (SSH) は、ローカル マシンとリモート マシンの間に安全なチャネルを作成する際に使用されます。SSH は端末への安全なアクセスやファイル転送を実現するために一般的に使用されていますが、他にも、通常は暗号化されないネットワーク接続を転送するためにコンピューター間で安全なトンネルを作成する際にも使用されます。SSH トンネルも便利な機能で、外部から内部のネットワーク リソースへのアクセスを許可する場合に使用できます。SSH では、ローカル マシンのポートを開いて、そのポートを通過するすべての通信をサーバー上で実行されている MySQL にシームレスに転送します。このため、MySQL Server がローカル マシンで実行されている場合と同じように見えます。

    Ubuntu VM で SSH トンネルを作成する場合、端末ウィンドウで –L のオプションを付けて SSH コマンドを実行し、ローカル マシンのポートでの転送を許可します。

    • まず 3306 番ポートを開いて (既定では閉じられています)、リモート クライアントが MySQL Server に接続できるようにします。次のコマンドを実行して、TCP で使用する 3306 番ポートを開きます。
    iptables -A INPUT -i eth0 -p tcp -m tcp --dport 3306 -j ACCEPT

    次のコマンドを実行して、3306 番ポートが開かれたかどうかを確認します。

    sudo netstat -anltp|grep :3306
    • 3307 番ポートで SSH トンネルを作成します。
    sudo ssh -fNg -L 3307:127.0.0.1:3306 azurevmuser@servername
    • Azure 管理ポータルで、VM のダッシュボードから 3307 番ポートにエンドポイントを作成します。詳細については「仮想マシンに対してエンドポイントを設定する方法」を参照してください。これで、データベースのホスト名は「linuxmysqlsrv.cloudapp.net:3307」に設定されました。

    リモート システムから MySQL に直接アクセスできるようにすることもできますが、この方法は非推奨であるためここでは取り扱いません。非推奨なのは、MySQL Server への直接接続を許可すると、サーバーが攻撃を受ける可能性が高まるためです。MySQL は、既定ではセキュリティで保護された接続を使用しない設定になっています。詳細については「MySQL での SSL の使用 (英語)」を参照してください。

    MySQL Server に接続可能な PHP Web サイトを作成する

    Azure 管理ポータルで WebSites を作成する場合、[QUICK CREATE]、[CREATE WITH DATABASE]、[FROM GALLERY] の 3 つの方法があります。ここでは、[QUICK CREATE] で作成する方法を説明します。他の 2 つの方法の詳細については、「PHP-MySQL Azure WebSites を作成して Git で展開する」および「Azure でギャラリーから WordPress Web サイトを作成する」のページを参照してください。ここでは、簡単なサイトを作成し、データベースへの接続を確立するシンプルな PHP スクリプトを追加します。

    Azure WebSites で PHP Web サイトを作成する方法」の説明に従って、Azure WebSites で index.phpという名前の簡単な PHP アプリケーションを作成します。このアプリケーションは MySQL Server を実行している Linux VM のデータベースに接続し、お客様の WebSites から新たに作成した MySQL Server に接続できるかどうかのテストを行います。

    <?php
    // 接続の作成: ホスト名、データベースのユーザー名、パスワード、
    // データベース名を更新
    //Linux VM の名前は linuxmysqlsrv.cloudapp.net:3307
    $con=mysqli_connect("linuxmysqlsrv.cloudapp.net:3307","username","password",
    "databasename");

    // 接続を確認
    if (mysqli_connect_errno()) {
        echo "Failed to connect to MySQL: " . mysqli_connect_error();
    }
    else
    {
        echo "Connection with MySQL database was successful";
    }
    ?>

    まとめ

    Clear DB サービスと Azure Virtual Machine のどちらを選択する場合でも、Azure WebSites で MySQL を使用することができます。データベースの要件を確認していただき、お客様のニーズに合ったソリューションをお選びください。

    Azure Automation 機能の詳細: Azure Automation PowerShell コマンドレット

    $
    0
    0

    このポストは、8 月 20 日に投稿した Azure Automation Capabilities in Depth: The Azure Automation PowerShell Cmdletsの翻訳です。

    はじめに

    これまで、皆様には Runbook のオーサリング、アセットの作成、手動またはスケジュール設定によるジョブの開始、統合モジュールのインポート、ジョブの出力の表示など、Azure Automation の優れた機能を Azure ポータルからご利用いただいていたかと思います。今回は、これらの機能すべてだけでなくさらに他の機能もコマンド ラインからプログラムで簡単に実行できることをご紹介します。Azure Automation のオーバーヘッドを完全になくしたい場合でも、Runbook の一括インポートなどの一���的な操作をスクリプト化する場合でも、Azure Automation コマンドレットをご利用いただけます。

    Azure Automation コマンドレットを利用する

    Azure が提供する PowerShell モジュールは Microsoft Web Platform Installer でインストールできます。Azure PowerShell を使用すると、Azure Automation を含むすべての Azure サービスの管理を行うことができます。

    Azure PowerShell モジュールでは現在 20 種類の Azure Automation コマンドレット (英語)が使用可能で、Azure Automation のポータルで実行可能な各種操作をスクリプト化することができます。今後はさらにこの機能が拡張され、Azure Automation の一般提供開始時には約 40 種類のコマンドレットが使用可能になり、Azure Automation の全機能を PowerShell からご利用いただけるようになる予定です。また、コマンドレットは Azure PowerShell モジュールの一部として提供され、Azure PowerShell モジュールは Azure Automation での使用を想定しているため、Azure Automation を初めて使用する場合でも、Runbook に余分な手間をかけずにコマンドレットを利用することができます。

    Azure PowerShell モジュールで提供されるコマンドレットの機能を確認する場合は、Azure モジュールがインストールされているホストで PowerShell コンソールを開き、次のコマンドを実行します。

    PS C:\> Get-Command -Module Azure -Name *Automation*

    このコマンドを実行すると、使用可能なすべての Azure Automation コマンドレットの一覧が返されます。

    Azure Automation の特定のコマンドレットの詳細を表示する場合は、次のコマンドを実行します。

    PS C:\> Get-Help Some-Command

    上記の “Some-Command” の部分を、詳細を確認したい Azure Automation コマンドレットに置き換えます。また、オプションで “–Detailed” や “–Full” を追加すると、そのコマンドレットの情報がさらに詳細に表示されます。

    PowerShell ではなく Web ブラウザーでコマンドレットの詳細をご覧になりたい方は、Azure Automation コマンドレットのリファレンス (英語)をご利用ください。

    Azure Automation コマンドレットが動作するしくみ

    他の Azure コマンドレットと同様に、まずは Azure コマンドレットを実行する Azure サブスクリプションへの接続をセットアップします。Azure への認証には、ローカルの証明書ストアにインストールされている管理証明書、またはお使いの Azure 証明書を使用できます。Set-AzureSubscription、Import-AzurePublishedSettingsFile、Add-AzureAccount、Select-AzureSubscription の各コマンドを使用して Azure への接続をセットアップします。Azure PowerShell コマンドレットから Azure への接続方法の詳細については、こちらを参照してください。Azure への接続のセットアップが完了した後は、その最初の接続設定が保持されるため、Azure コマンドレットを使用するときに再び証明書やエンドポイントを指定する必要はありません。ただし操作のたびに、アクセス時に使用する Azure Automation アカウントの名前を AutomationAccountName パラメーターで指定する必要があります。

    コマンドレットの実行

    Azure Automation コマンドレットの実行例を次に示します。コマンドレットの出力は下記のようになります。

    ここで、コマンドレットを使用する際のヒントを 1 つご紹介します。同一の Azure Automation アカウントで操作を繰り返す場合、AutomationAccountName パラメーターを毎回コマンドレットに渡すのは面倒です。しかし、このパラメーターを繰り返し記述せずに各 Azure Automation コマンドレットに簡単に渡すことができる、スプラッティングという機能があります。スプラッティング (英語)を使用すると、パラメーターのセットをハッシュ テーブルとして定義し、任意のコマンドレットに渡すことができます。次のスクリーンショットをご覧いただくと、どれほど簡単に Azure Automation コマンドレットに Azure Automation アカウント名のパラメーターと値を追加できるかがおわかりいただけるでしょう。

    Azure Automation で Azure Automation コマンドレットを使用する

    Azure PowerShell モジュールの別の特長として、統合モジュールとしてそのまま使用可能な形で Azure Automation に含まれているという点があります。このため、Azure Automation コマンドレットは Runbook で直接使用することができます。余分な作業は必要ありません。その例として、他の Azure Automation の Runbook を非同期で新しいジョブとして開始し、そのジョブの情報を出力する Azure Automation の Runbook を以下にご紹介します。

    Runbook から他の Runbook を開始する方法についての詳細は、Chris Sanders のブログ記事を参照してください。また、Azure Automation コマンドレットを使用する Azure Automation Runbook の例については、Gary Keong のブログ記事をご覧ください。このブログ記事では、Visual Studio Online と Azure Automation を統合し Runbook のソースを管理できるようにする方法が紹介されています。

    まとめ

    ここまでの説明で、Azure Automation PowerShell コマンドレットの活用方法や、コマンドレット自体のしくみについてご理解いただけたかと思います。Azure Automation では、クラウドおよび業務のプロセスを自動化するだけでなく、Azure Automation 自体をコマンドレットで自動化することも可能です。Azure Automation チームでは、Azure Automation および Azure PowerShell コマンドレットの機能を活用して皆様がどのような Runbook やスクリプトを作成していらっしゃるのか非常に興味があり、ぜひお見せいただきたいと考えています。

    Azure Automation をまだご利用でない方は、プレビュー版にサインアップしお試しください。また入門ガイド (英語)をご覧ください。

    Azure Diagnostics の拡張機能による Microsoft Azure Virtual Machines の監視

    $
    0
    0

    このポストは、9 月 2 日に投稿した Microsoft Azure Virtual Machine Monitoring with WAD Extensionの翻訳です。

    Azure プレビュー ポータルのリリースと Azure 拡張機能モデルのサポートに伴い、新しい診断機能をご利用いただけるようになりました。これらの機能は簡単な手順でセットアップおよび構成できるため、Azure IaaS の Virtual Machines の監視を容易に強化できます。Azure IaaS の監視機能では、メトリックの追跡、ログ ファイルの分析、カスタム メトリックの定義、Virtual Machines で実行されている特定のアプリケーションやワークロードで生成されたログの記録などを実行できます。また、特定の条件と一致したときにアラームをトリガーする機能や診断データを提供する機能もあり、トラブルシューティングや根本原因の究明にも役立ちます。さらに、実行中のデプロイメントやリソースの使用状況、アプリケーションのパフォーマンス、運用状況、アプリケーションの診断データなども確認でき、問題発生時に迅速に対応を行ったり、アプリケーションを円滑に実行するために活用できます。

    これから説明する下記のセットアップ手順のほとんどはポータルから実行できます。SDK の API や PowerShell を使用したセットアップおよび構成手順については、別途ご紹介する予定です。

    1:この記事は Windows VM のみを対象としています。現時点では、この機能は Linux Azure VM では使用できませんが、近い将来サポートされる予定です。詳細については後日ご案内しますので、ご期待ください。

    2:この機能は、現在プレビュー期間中の新しい Azure ポータルでのみ使用できます。古いポータルをご利用の方は、[Subscriptions] メニューから新しいポータルに切り替えてください (下図参照)。

    1. VM 作成時に VM エージェントをインストールする

    VM で監視機能をセットアップする際には、まず VM 作成時に VM エージェントがインストールされているかどうかを確認します (既定の構成)。インストールされていない場合は、既存の VM を更新して VM エージェントを実行するようにします。古いポータルから VM を作成した場合は、下図のように [Install the VM Agent] を選択します。それ以外の場合は手順 2 に進みます。

    VM のインストールが完了すると、自動的に Azure Diagnostics の拡張機能が VM にインストールされ、実行されます。この拡張機能によって診断データの収集が行われます。Azure Diagnostics でサポートされている KPI の詳細、および特定のニーズに合わせて Azure Diagnostics を構成する方法については、「Azure の診断機能」を参照してください。

    Azure VM エージェントと Azure 拡張機能の使用方法の詳細については、「拡張機能の管理」を参照してください。

    2. 監視を有効化する

    診断機能は VM ごとに有効化できます。有効化するには次の手順を実行します。

    1. VM を選択します。
    2. [Monitoring] セクションをクリックします。
    3. [Settings] をクリックします。
    4. [STATUS] を [ON] に変更します。
    5. [OK] をクリックします。

    3. メトリックを構成する

    診断機能を有効化したら、すべての KPI を追跡するか、または任意のサブセットのみを追跡するかを下記の手順で構成します。追跡対象の KPI を絞り込む場合の手順は次のとおりです。

    1. VM を選択します。
    2. [Monitoring] セクションをクリックします。
    3. [Settings] をクリックします。
    4. [Diagnostics] フレームが開きます。
    5. 必要な診断メトリックを選択します。
    6. [OK] をクリックします。

    4. 診断データにアクセスする

    追跡対象の KPI セットを収集した後は、監視データにアクセスします。

    ポータルでは、VM で収集されたあらゆるメトリックがリッチなグラフで表示されます。また、任意の時間範囲を選択し、複数のメトリックを同時に比較することができます。グラフを表示する手順は次のとおりです。

    1. VM を選択します。
    2. [Monitoring] セクションでグラフを右クリックします。
    3. [Edit Chart] を選択します。
    4. 表示する時間範囲を [Time Range] で選択します。また、表示する KPI をリストから選択します。
    5. 下図のようにグラフが表示されます。

    収集された診断データは、手順 3 で構成したユーザーのストレージ アカウントにすべて保存されます。このデータにはお好みのツールからアクセスできます。次の例では、Visual Studio を使用して監視機能のストレージ アカウントに接続してデータを表示しています。このデータは普段使用している BI アプリケーションや Excel にエクスポートし、さらに詳細な分析を行うために活用できます。Visual Studio からデータにアクセスする手順は次のとおりです。

    1. [Server Explorer] に移動します。
    2. ]Windows Azure Grouping] に移動します。
    3. [Storage Grouping] に移動します。
    4. 監視データの保存先として構成したストレージ アカウントを検索します。
    5. [Table] に移動します (監視データは Azure Tables に保存されます)。
    6. 監視機能に関連付けられているテーブルをダブルクリックします。

    この記事では、Azure の監視インフラストラクチャを使用して Azure で実行されている Windows VM の診断を行う方法、および Azure の新しいポータルから利用できる追跡機能でメトリックを収集する方法について説明しました。この方法は他の Azure サービスの監視にも利用できます。また、System Center Operations Manager (SCOM) などの既存のツールを使用してデプロイ済みの Azure IaaS の VM を監視する方法や、その他のサポートされている監視シナリオについては、今後の記事でご紹介する予定です。どうぞお楽しみに!

    Azure Automation: チェックポイントを活用して、信頼性の高いフォールト トレラントな Runbook を実行

    $
    0
    0

    このポストは、9 月 3 日に投稿した Azure Automation: Reliable, Fault-Tolerant Runbook Execution Using Checkpointsの翻訳です。

    Azure Automation の Runbook を作成する際は、エラーや例外、ネットワーク障害、クラッシュの発生などの予期しない事態でも Runbook が確実に実行されるようにしたいと考える方が多いかと思います。このような場合には、Azure Automation が有効です。Azure Automation は Windows PowerShell ワークフローの上に構築されており、チェックポイント機能をサポートしています。この機能でワークフローの状態を永続化させることにより、処理が中断したときにも、中断した時点またはその付近から処理を再開できます。チェックポイント機能は、Automation の Runbook を活用するうえで非常に便利な機能です。この機能をうまく利用することで、信頼性を確保しつつ実行時間の長い処理を自動化したり、ネットワークで接続されている他のシステムに安定してアクセスしたり、やり直すべきではない (やり直すことで結果が変わってしまう) 処理やコストのかかる処理の再実行を防止したり、手動の手順を含めることで意図的に処理を中断したりできます。

    この記事では、Automation の Runbook でチェックポイント機能を使用する理由、タイミング、および方法について説明します。PowerShell ワークフローのチェックポイント機能に関する記事 (英語)が公開されていますので、こちらも併せてお読みいただくと、この機能をさらに詳しくご理解いただけます。

    チェックポイント機能の概要

    チェックポイントとは Runbook のジョブの特定時点でのスナップショットであり、その時点での変数の値、出力内容、およびその他のシリアル化可能な状態の情報が含まれます。各チェックポイントは Storage に保存されます。意図的であるかどうかにかかわらず、Runbook の処理が中断された場合は、その後再開されるときにワークフロー エンジンが最新のチェックポイントのデータを使用して Runbook を復元し、処理を再開します。

    Azure Automation でのチェックポイントの作成

    Azure Automation で Runbook のジョブを永続化すると、チェックポイントが作成され、Azure Automation データベースに保存されます。データベースに保存されるのは各ジョブの最新のチェックポイントのみで、新たにチェックポイントが保存されるときに前回のデータは削除されます。Runbook の処理が中断され、その後再開される場合、保存されているチェックポイントを使用して Runbook の復��と再開が行われます。

    PowerShell ワークフローではワークフロー セッションをホストしているコンピューターのハード ディスク ドライブにチェックポイントを保存しますが、Azure Automation ではチェックポイントを Azure Automation データベースに保存します。このため、Runbook を実行している Worker ロールがクラッシュした場合、同じ Worker ロールで再開する場合と他の Worker ロールがジョブを引き継ぐ場合のどちらでも、データベースに保存されている最新のチェックポイントを使用してジョブが再開されます。

    チェックポイント機能を使用する理由

    Runbook でチェックポイント機能を使用する理由としては、次のようなものがあります。

    • 特定の処理が再び実行されないようにする
      • チェックポイント機能は、Runbook がクラッシュして (または中断されて) その後再開されたときに、やり直すわけにはいかない (やり直すことで結果が変わってしまう) 処理を確実に実行されないようにする場合に便利です。その例として、VM 作成直後に Runbook のチェックポイントを作成すると、Runbook のジョブが中断され再開されたときに重複して VM が作成されないようにすることができます。
    • 実行時間の長いタスクを保護する
      • 現実世界では、エラーの発生を防ぐことはできません。複数のステップを含む実行時間の長いタスクは、ネットワークの問題、コンピューターの再起動やクラッシュ、タイムアウト、停電などで処理が中断されることに対して脆弱です。コストのかかる処理がやり直されるのを回避するために、重要なポイントで Runbook のチェックポイントを作成し、Runbook が再開されるときにその処理が再実行されないようにします。
    • 実行時間の長い Runbook を確実に最後まで実行する
      • Azure Automation には「fairshare (フェアシェア)」という機能があり、実行時間が 30 分を超える Runbook は、他の Runbook を実行できるようにアンロードされます。アンロードされた Runbook は最終的には再び読み込まれ、その Runbook の最新のチェックポイントから再開されます。このため、Runbook を確実に最後まで実行するには、30 分未満の間隔でチェックポイントを追加する必要があります。こちらのフォーラムの記事 (英語)でその例をご覧いただけます。
    • 計画的な中断または手動による中断を可能にする
      • 実行中の Runbook を意図的に中断する場合があります。たとえば、処理を続行するかどうかの確認を待つ場合や、予期しないまたは予定されているシステム上の問題により Runbook のジョブを中断する場合などです。

     

    チェックポイントを Runbook に追加する方法

    Checkpoint-Workflow アクティビティ

    Checkpoint-Workflow アクティビティ (Persist と同等) は標準的な PowerShell ワークフロー アクティビティです。特定の位置でチェックポイントを作成するときに Runbook で使用します。チェックポイントは、Runbook で Checkpoint-Workflow アクティビティが発生したときに作成されます。


    Download-Updates
    Reboot-VM
    Checkpoint-Workflow
    Email-Team
    Checkpoint-Workflow

    アクティビティの共通パラメーター -PSPersist

    アクティビティを呼び出すときには、毎回、共通ワークフロー パラメーターである –PSPersist を含めることができます。このパラメーターを含めると、アクティビティ完了後すぐにチェックポイントが強制的に作成されます。


    Download-Updates
    Reboot-VM –PSPersist $True
    Email-Team –PSPersist $True

    ワークフローの Preference 変数 $PSPersistPreference

    Runbook に $PSPersistPreference = $True という文を挿入すると、この文の後のアクティビティが終了するごとにチェックポイントが作成されます。Runbook の最初でこれを設定すると、Runbook のすべてのアクティビティごとにチェックポイントが作成されます。$PSPersistPreference = $False (Runbook の既定の設定) という文を挿入すると上記の設定は無効化され、以降はチェックポイントの自動作成は実行されなくなります。

    パフォーマンスと戦略の両面から、アクティビティごとにチェックポイントを作成するのは最良の方法とは限りません。各チェックポイントで、ワークフローの状態をシリアル化しデータベースに保存する処理が必要になるからです。また、Runbook が中断されたときに特定のアクティビティは再度実行したい場合 (後でその例を紹介します) もあります。このようなときには、すべてのアクティビティでチェックポイントを作成する方法はお勧めできません。


    Download-Updates
    Reboot-VM –PSPersist $True
    Email-Team –PSPersist $True

    Suspend-Workflow アクティビティ

    Runbook で Suspend-Workflow アクティビティを使用すると、すぐに Runbook のチェックポイントが作成され、そこで処理が中断されます。このアクティビティは、Runbook で何らかの処理を行った後に継続するかどうかを確認する場合などに使用します。この確認で「許可」が得られると、Runbook のジョブが再開されます。


    Download-Updates
    # 更新を適用する許可を得る
    Suspend-Workflow
    # 再開された場合は継続
    Reboot-VM –PSPersist $True
    Email-Team –PSPersist $True

    チェックポイントを追加する位置

    一般的には、ワークフローを永続化する位置は明確に示すことが推奨されます。$PSPersistPreference 変数を設定して各アクティビティの後に永続化を行うよりも、永続化する適切な位置を慎重に考え、ワークフローの中で Checkpoint-Workflow や Suspend-Workflow のアクティビティ、または –PSPersist パラメーターを効果的に使用するほうが賢明です。次に示す例のように、明らかにワークフローの永続化を行う必要のある場所と、まったく行う必要のない場所があります。また、ワークフローを永続化する際にはシステムで処理が実行されるため、ワークフローのパフォーマンスが一定の影響を受けることにも留意してください。

    ベストプラクティス:次のような位置に、ワークフローでチェックポイントを作成するとよいでしょう。

    • 再度実行しないようにする (再実行することで結果が変わる) アクティビティの後。
    • 実行時間の長いアクティビティやコストのかかるアクティビティなど、やり直すと実行コストが高いアクティビティの後。
    • 実行時間が 30 分を超える Runbook の中。30 分が経過すると、他の Runbook の処理を実行できるように、「fairshare (フェアシェア)」機能が割り込み、Runbook の処理を一時的にアンロードします。その後、システムが Runbook を再度読み込み、最新のチェックポイントから処理を再開します。チェックポイントを作成しなかった場合は、Runbook が最初から処理をやり直し、再びfairshare (フェアシェア) 機能の制限を受けます。これが繰り返し発生するため、Runbook の処理が永久に終わらなくなります。
    • 通常よりも問題が発生する可能性が高く、不具合のためにワークフローが中断されることが考えられるアクティビティの前。アクティビティが確実に完了するように、ワークフローの再開時にアクティビティが再実行されるようにします。たとえば、ネットワーク障害により中断される可能性のある、リモート システムにアクセスするアクティビティの場合などです。

    ベストプラクティス:次のような位置には、チェックポイントを作成しないようにします。

    • ワークフローが中断して再開するときに、再度やり直す処理の後。
    • 再実行しても結果が変わらない処理の後や、チェックポイントを作成するよりもやり直したほうがコストが低い処理の後。
    • InlineScript ブロック内 (許可されていません)。

    実例的なシナリオ: VM の更新

    1. Windows Update で最新の修正プログラムをダウンロードする
    2. VM を再起動して修正プログラムを適用する
    • チェックポイントを作成する
  • 更新が適用されたことをチームのメンバーに通知する電子メールを送信する
    • チェックポイントを作成する
  • このシナリオでは、手順 1 はやり直しても結果が変わらないため再実行しますが、手順 2 と手順 3 はやり直さないため、これらの後にチェックポイントを作成する必要があります。すべてのアクティビティの後にチェックポイントを作成しても構いませんが、手順 1 の後に作成する必要はなく、システムにとって無駄な処理を増やすことになります。

    実例的なシナリオ: ユーザーへの通知

    1. データベースからユーザーのリストを取得する
    2. ユーザーに新しいポリシーを電子メールで通知する
    • チェックポイントを作成する
  • ユーザーに送信された電子メールを管理する
    • チェックポイントを作成する
  • アクティビティ グループのアクティビティがすべて正常に完了したときのみ、処理をやり直さないようにしたい場合があります。このシナリオでは、手順 1 と手順 2 は常に両方とも実行し、電子メールを送信するときには必ず取得されたユーザーのリストが最新の状態であるようにします。そのため、Runbook を実行している Worker ロールが手順 2 (ユーザーに電子メールを送信する) の前にクラッシュした場合、Runbook のジョブを再開する際は手順 1 (ユーザー リストの取得) から実行されるようにします。しかし、手順 3 の直前でクラッシュや中断が発生した場合は、手順 2 の再実行を確実に防止する (電子メールが重複して送信されない) ようにします。

    ベストプラクティス:ワークフロー内の InlineScript ブロックや関数の中にはチェックポイントを追加できないので注意が必要です。これは、InlineScript ブロックおよび関数が PowerShell ワークフロー スクリプトではなく PowerShell スクリプトとして実行されるためです。ワークフローでチェックポイントを作成するためには、Runbook のコードを複数のモジュール化されたアクティビティに分割して、アクティビティの合間でチェックポイントを作成できるようにします。InlineScript が必要な場合は、複数の InlineScript ブロックを使用して、その合間でチェックポイントを作成します。

    Runbook の中断と再開

    チェックポイントの作成と Runbook の中断/再開は、互いに密接に関係しています。Runbook にチェックポイントを追加すると、Runbook が中断されたときに最新のチェックポイントから処理を再開することができます。

    Azure Automation の Runbook のジョブは、次のような状況で中断されます。

    • Azure Automation ポータルの UI からユーザーが意図的に行う
      • Azure Automation ポータルの UI から、実行中の Runbook のジョブを中断することができます。
      • ジョブはその後のチェックポイントで中断されます。Runbook でチェックポイントが作成されていない場合、最後まで処理が実行されます。その間、状態は “Suspending” と表示されます。
    • Runbook で Suspend-Workflow を使用してユーザーが意図的に行う
      • Runbook に Suspend-Workflow アクティビティを追加します。
      • ジョブでチェックポイントが作成され、Suspend-Workflow が呼び出された位置で処理が中断されます。
    • Suspend-AzureAutomationJob コマンドレットを使用してユーザーが意図的に行う
      • PowerShell のスクリプトまたはワークフローでは、Suspend-AzureAutomationJob (英語)コマンドレットで Azure Automation の Runbook のジョブを中断することができます。
      • ジョブはその後のチェックポイントで中断されます。Runbook でチェックポイントが作成されていない場合、最後まで処理が実行されます。その間、状態は “Suspending” と表示されます。
    • Runbook が 30 分間以上実行されたときに Azure Automation ワークフロー エンジンによって意図的に行われる
      • ジョブの実行時間が 30 分を超えると「fairshare (フェアシェア)」機能が割り込み、Runbook を一時的にアンロードします。このとき、ジョブの状態は “Running, Waiting for Resources” に設定されます。その後 Runbook が再度読み込まれ、最新のチェックポイントから処理が再開されます。
    • Runbook の例外により Azure Automation ワークフロー エンジンによって意図せず行われる
      • 実行中のジョブで例外が発生した場合、ジョブが Runbook の Worker ロールからアンロードされ、状態が “Suspended” に設定されます。
    • Runbook の Worker ロールのクラッシュにより意図せず行われる
      • Runbook の Worker ロールがクラッシュした場合、その Worker ロールで実行されているジョブは即座に終了します。このとき、データベースのジョブの状態は “Running” のままとなります。同一または代替の Worker ロールが稼動状態になったら、ジョブが引き継がれて最新のチェックポイントから続行されます。

    Azure Automation の Runbook のジョブは、次のような状況で再開されます。すべての場合において、ジョブは最新のチェックポイントから再開されます。ただし、チェックポイントがない場合は最初から実行されます。

    • Azure Automation ポータルの UI から手動で行う
      • Azure Automation ポータル UI を使用すると、中断されているジョブを再開することができます。
    • Resume-AzureAutomationJob コマンドレットを使用して行う
      • PowerShell のスクリプトまたはワークフローでは、Resume-AzureAutomationJob (英語)コマンドレットを使用して中断されているジョブを再開できます。
    • Runbook の Worker ロールのクラッシュ後、自動的に引き継がれる
      • Worker ロールが稼動状態に復帰するか、または他の Worker ロールが代替として割り当てられると、データベース内のジョブが検索されます。状態が “Running” で、Worker ロールで実行されていないジョブがある場合、Worker ロールが自動的に最新のチェックポイントから再開します (前述の中断される状況の 6 番目と同一のシナリオ)。

    Runbook が再開された場合、中断前とは別の Worker ロールで実行されることがあるため、注意が必要です。このため、Runbook が実行される可能性のあるローカル マシンの状態は、作成し直す必要があります。つまり、Runbook のチェックポイントより後の任意の時点で Azure に接続する必要がある場合は、Connect-Azure、Add-AzureAccount、Select-AzureSubscription、Set-AzureSubscription など、ローカル ファイルに状態を設定するコマンドレットを各チェックポイントの後で再度呼び出す必要があります。

    まとめ

    以上のように、この PowerShell ワークフローの重要な機能を活用して中断に強い Runbook を作成するには、Runbook にチェックポイントを追加することが重要です。チェックポイントを追加するのは簡単です。Runbook を作成するときに少し先のことを考慮することで、実行時間の長いタスクやコストのかかるタスクを予期しない中断から保護し、真に堅牢で信頼性の高い Runbook を作成することができます。

    Azure SQL Database の標準地理レプリケーション

    $
    0
    0

    このポストは、9 月 3 日に投稿した Azure SQL Database Standard Geo-Replicationの翻訳です。

    今回の記事では、ビジネス継続性のシナリオを取り上げ、新しくリリースされた Azure SQL Database の標準地理レプリケーション機能について説明します。標準地理レプリケーション機能では、プライマリ データベースでコミットされたトランザクションを、事前に指定された Azure リージョンのセカンダリ データベースに非同期で複製するようにデータベースを構成できます。詳細の説明に入る前に、まずはプレビュー版として利用可能なビジネス継続性機能全般について簡単にまとめ、さらに 2014 年 4 月に発表した新しいサービス レベルに沿って説明します。各サービス レベルの詳細については、こちらの記事をご覧ください。

    ビジネス継続性モデル

    以前のアクティブ地理レプリケーションの記事では、筆者の Tobias Ternstrom がビジネス継続性の課題について説明しました。今回の記事の内容をより深くご理解いただくために、あらかじめ把握しておいていただきたいことをここで簡単にご紹介します。

    • 障害復旧 (DR): アプリケーションの通常のビジネス機能を復元する処理。
    • 特定時点への復元: 過去の (バックアップ保持期間内の) 特定の時点の状態にデータベースを復元する機能。人為的なミスやプログラムのエラーにより発生したデータ破損から復旧する際に使用します。
    • 目標復旧時間 (RTO): 障害発生後アプリケーションの機能が完全に復旧するまでの最長のダウンタイム。
    • 目標復旧時点 (RPO): 障害発生後アプリケーションの機能が完全に復旧するまでに失われる可能性のある、最新のデータ変更内容の最大量 (期間)。

    次の表は、各サービス レベルで提供されているビジネス継続性機能をまとめたものです。

    BCDR 機能

    Basic レベル

    Standard レベル

    Premium レベル

    特定時点への復元

    7 日間以内の任意の復元ポイント

    14 日間以内の任意の復元ポイント

    35 日間以内の任意の復元ポイント

    地理リストア (Geo-restore)

    RTO < 24 時間*
    RPO < 24 時間

    RTO < 24 時間*
    RPO < 24 時間

    RTO < 24 時間*
    RPO < 24 時間

    標準地理レプリケーション

    対象外

    RTO < 2 時間
    RPO < 30 分

    RTO < 2 時間
    RPO < 30 分

    アクティブ地理レプリケーション

    対象外

    対象外

    RTO < 1 時間
    RPO < 5 分

    ビジネス継続性/障害復旧 (BCDR) モデルで重要な点は、アプリケーションのパフォーマンス特性に応じて、ニーズに合ったビジネス継続性ソリューションを選択することです。アプリケーションが処理するデータ量が少なく更新頻度も低い場合は、Basic レベルのパフォーマンスが適しており、地理リストア機能でも十分にニーズに対応した障害復旧能力が得られます。アプリケーションのデータ処理量が多い場合は Standard レベル以上の高いパフォーマンスとより高度な RPO が必要なため、障害復旧ソリューションには標準地理レプリケーションが推奨されます。アクティブ地理レプリケーションは、RPO が小さい最も高度な復旧機能が求められる、更新データ量が非常に多いアプリケーションが想定されています。このように、SQL Database の BCDR モデルは、Basic から Premium へとレベルが上がるに従ってビジネス継続性機能の堅牢性がより高くなります。また、読み込み処理中心のデータ処理の場合は高レベルの RPO はそれほど必要ではないため、上位のサービス レベルでも下位サービス レベルで提供されている BCDR 機能をご利用いただけるようになっています。

    標準地理レプリケーションとアクティブ地理レプリケーションの相違点

    ここからは、ユーザー エクスペリエンスの詳細、およびアクティブ地理レプリケーションとの相違点について説明します。

    標準地理レプリケーションはアクティブ地理レプリケーションと同じテクノロジを基礎として構築されていますが、書き込み頻度が低いアプリケーションに最適化されています。この機能は主に、(a) 更新頻度が低く、障害復旧について高度な SLA を必要としないアプリケーションを対象とすること、(b) そのようなアプリケーションはシンプルな復旧ワークフローで十分であり、フェールオーバーを実行するかどうかの判断に複雑な監視ロジックを必要としないこと、また、(c) そのようなアプリケーションは一般的にコストの制限が厳しい、という条件を考慮して設計されました。上記のような条件に対応するため、下記のように簡略化を行っています。

    1. セカンダリ データベースは、マイクロソフトが定義した「DR ペア」となる Azure リージョンに作成されます。DR ペアのリストはこちらのページ (英語)でご確認いただけます。

    2. セカンダリ データベースはマスター データベースから閲覧可能ですが、フェールオーバー処理が完了するまで直接接続することはできません (オフライン セカンダリ)。

    3. セカンダリ データベースは、読み取りアクセス不能のとき (オフラインのとき) には割引料金が適用されます。

    4. フェールオーバー機能は、プライマリ データベースをホストしているデータ センターが長時間停止した場合に有効になります。この機能は、インシデントが発生してから 1 時間が経過すると有効になり、ポータルでは該当するサーバーの状態が “degraded” と表示されます。

    5. 障害発生時、アプリケーションまたはお客様がフェールオーバーを開始せず、プライマリ データベースの場所がインシデント発生後 24 時間以内に復旧しなかった場合、標準地理レプリケーションが適用されているすべてのデータベースが自動的にセカンダリ データベースの場所にフェールオーバーされます。

    次の図 1 は、標準地理レプリケーションの一般的な構成を示したものです。

    図 1: DR ペアのリージョンにデータベースのオフライン セカンダリを設定可能

    この図に示すように、標準地理レプリケーションの目的は、あるリージョン内の Azure SQL Database で大規模な障害が発生した場合にデータベースを復旧することです。この目的であれば、より強力なアクティブ地理レプリケーション機能の一部を使用するだけでも達成できます。ただ、アクティブ地理レプリケーションで対応可能なシナリオの中には、標準地理レプリケーションでは対応できないシナリオがあります。次の表に、両機能の相違点をまとめました。

    シナリオ

    標準地理レプリケーション

    アクティブ地理レプリケーション

    リージョン単位の障害

    障害復旧テスト

    オンラインでのアプリケーションのアップグレード

    ×

    オンラインでのアプリケーションの再配置

    ×

    読み込み処理の負荷分散

    ×

    Premium のデータベースでアクティブ地理レプリケーションではなく標準地理レプリケーションを使用するケース

    Premium レベルのデータベースの保護には、標準地理レプリケーションとアクティブ地理レプリケーションの両方、またはいずれかを使用できます。しかし、より強力なアクティブ地理レプリケーションではなく標準地理レプリケーションを使用するケースとは、どのような状況なのでしょうか。標準地理レプリケーションは簡単で低コストの障害復旧ソリューションとして設計されており、特に更新頻度が低いアプリケーションに適しています。Premium のデータベースで主に大規模な読み込み処理中心のワークロードが実行されている場合、標準地理レプリケーションが適していることもあります。標準地理レプリケーションでは、セカンダリ データベースの場所を指定すること、セカンダリ データベース (最大 4 つ) に読み取りアクセスすること、そしてフェールオーバーのタイミングと場所を完全に管理することができません。ただし、その代わりに監視機能とフェールオーバーの���ークフローの管理をマイクロソフトが行うため、お客様はこれらを簡略化できます。1 つの Premium データベースでいずれかの機能のみを選択する必要はなく、障害復旧ソリューションとして標準地理レプリケーションでオフラインのセカンダリを作成し、さらに読み込み処理の負荷が高い場合に備えて負荷分散を行うために読み込み可能なセカンダリを 1 つまたは複数作成することも可能です。

    データベースのフェールオーバー

    標準地理レプリケーションは、データ層で障害が発生した場合を想定した障害復旧ソリューションです。プライマリをホストしているリージョンで Azure SQL Database のサービスが停止した場合にのみ、お客様はペアのリージョンのセカンダリへのフェールオーバーを開始できます。標準地理レプリケーションでは、アプリケーション層のサービス停止によるデータベースの手動フェールオーバーはサポートされていません。アクティブ地理レプリケーションでは、こうした場合に必要となる、フェールオーバーを実行するタイミングと場所を制御できます。

    あるリージョンで長時間にわたるサービス停止が発生した場合、マイクロソフトが標準地理レプリケーションの対象になっているすべてのデータベースに対してフェールオーバーを有効にします。このサービスでは、フェールオーバーが必要かどうかをインシデント発生後 1 時間以内に決定することを目標としています。いったんサービスが有効になると、セカンダリ データベースとの地理レプリケーションの関係が解消され、実際にフェールオーバーが開始されます。この手法によって、フェールオーバーのロジックが簡略化されます。アプリケーションは、ただフェールオーバーが有効になるフラグを待機してフェールオーバーを実行するか、またはデータ センターが復旧するまで待機するだけです。アプリケーションを高可用性環境に最適化する必要があり、1 時間分のデータ損失を許容できる場合は、フェールオーバーが有効になってすぐにフェールオーバーを実施します。データ損失に対するアプリケーションの耐性が低い場合は、SQL Database サービスの復旧を待つという選択肢もあります。その場合はデータ損失は発生しません。ただし、プライマリのデータ センター (およびデータベース) が 24 時間以内に復旧しなかった場合、サービスによって自動的にフェールオーバーが開始されます。この場合、アプリケーションでデータ損失および 24 時間のダウンタイムが発生します。お客様がデータベースをフェールオーバーするか、自動的に実行されるのを待機するかにかかわらず、すべての場合において、アプリケーションがフェールオーバー先のデータベースに接続できるように再構成する必要があります。

    フェールオーバーが完了したら、新しいプライマリも保護する必要があります。このサービスでは、フェールオーバーを有効化するプロセスの一部として、DR ペアの構成を更新して代替先のリージョンを設定します。これにより、地理レプリケーションが開始され、新しいプライマリが保護されます。新しいセカンダリのシード処理にはしばらく時間がかかるため (所要時間はデータベースのサイズによって異なります)、保護されていない状況でアプリケーションを操作するリスクを許容してでもシード期間中に可用性を復元するかを決定する必要があります。最も安全性の高い方法は、フェールオーバー先のデータベースが新しいセカンダリで保護されるまで待機した後にアプリケーションを有効化することです。シード処理が終了した後の DR 構成は、図 2 のようになります。

    図 2: フェールオーバー後は、更新された DR ペアを使用してアプリケーションが新しいセカンダリ データベースを作成

    障害復旧テスト

    データベースのフェールオーバーはデータを扱う処理であり、中断を伴うので、定期的にフェールオーバーのワークフローのテストを実施してアプリケーションの対応状況を確認する必要があります。このプロセスは障害復旧テストと呼ばれます。技術の実践としてよい機会ですが、それだけではなく、コンプライアンス認定の一環としても業界内の多くのセキュリティ標準で必須のプロセスとなっています。通常の状態ではオフラインのセカンダリからのフェールオーバーは有効化されていませんが、プライマリ データベースの地理レプリケーションを停止すると、障害復旧のワークフロー全体のテストを実施できます。停止時点でプライマリがアクティブな場合、プライマリでコミット済みでありながらまだセカンダリに複製されていないトランザクションは失われます。停止後はセカンダリに完全にアクセスできるようになり、アプリケーションは新しいプライマリとして使用できるようになります。データを損失する可能性があることと、テスト中はプライマリが保護されないことを考慮すると、運用環境のデータベースで障害復旧テストを実施することは推奨されません。その代わりに、同一リージョン内にテスト用のデータベース コピーを作成し、そのコピーのオフライン セカンダリを作成して、それらのデータベースをテスト環境としてアプリケーションのフェールオーバーのワークフローを確認することをお勧めします。

    管理ツール

    標準地理レプリケーションでは、アクティブ地理レプリケーションで使用可能な REST API の一部を使用することができます。標準地理レプリケーションの管理は、この API を使用するか、PowerShell コマンドレットを使用するか、または Azure 管理ポータルを使用して行います。この機能はまだプレビュー段階なので、まず Azure SQL Database の新しいサービス レベルのプレビューにサインアップする必要があります。標準地理レプリケーションを有効化する最も簡単な方法は、図 3 に示すように、Azure 管理ポータルで [GEO-REPLICATION] タブを使用する方法です。

    図 3: Azure 管理ポータルで地理レプリケーションのオフライン セカンダリを作成し、状態を監視

    地理レプリケーションはいつでも無効化できます。それには 2 つの方法があり、1 つはプライマリ データベースの地理レプリケーションを終了すること、もう 1 つはセカンダリ データベースをダウンさせることです。前者は、誤って操作が開始されたときに中止する場合に便利です。セカンダリ データベースのシード処理が完了する前に無効化された場合は、セカンダリ データベースには課金されません。シード処理完了後に無効化された場合は、セカンダリとして使用されたデータベースを個別に削除する必要があり、また該当するデータベースの使用料金が日割で課金されます。後者の場合、1 つの手順を実行するだけで自動的に地理レプリケーションが終了し、セカンダリ データベースも終了して課金対象から除外されます。

    まとめ

    標準地理レプリケーションは、更新頻度が比較的低いアプリケーションを対象とした強力な障害復旧ソリューションとしてお使いいただけます。アクティブ地理レプリケーションほどの柔軟性はありませんが、マイクロソフトでは幅広い分野のアプリケーションのニーズに対応していると考えています。この機能について、皆様のご意見をお待ちしております。新しいサービス レベルのプレビューにサインアップし、標準地理レプリケーションをお試しのうえ、お気軽にご意見をお寄せください。また、さらに詳細な内容についてはこちらの記事 (英語)をご覧ください。

    Azure Search のシナリオと機能

    $
    0
    0

    このポストは、8 月 28 日に投稿した Azure Search Scenarios and Capabilitiesの翻訳です。

    先週 Azure Search の発表 (英語)がありましたが、それに続いてこの記事では、Azure Search を開発した理由と、現在の機能を取り入れた経緯について説明します。

    * 訳注: Azure Search は現在のところ日本語での検索には対応しておりません。

    背景

    検索機能は、数多くのアプリケーションでユーザーの主要な操作手法として活用されており、特に全文検索機能には大きな期待が寄せられています。ユーザーは、普段から Web 検索エンジン、高度な e コマース Web サイト、関連性の高い検索結果を提供するソーシャル アプリケーション、入力時の検索候補、ファセット ナビゲーション、強調表示などのさまざまな機能を、ほぼタイム ラグなしで使用しています。

    マイクロソフトは Azure Search の開発にあたって、検索に関する専門的な知識のない開発者でも優れた検索エクスペリエンスをアプリケーションに組み込むことができるようにしたいと考えました。強固な検索エクスペリエンスの実現は、テキスト分析やランキングの処理が必要な情報取得用フロントエンドや、スケーラビリティや信頼性を管理する必要のある配信システムのフロントエンドのいずれにおいても課題となります。そこで、サービスとしての検索機能を提供することで、これらの課題を自然な形で解決し、開発者がアプリケーションの構築に集中できるようにすることを目指しました。

    シナリオ

    検索テクノロジを活用すると多様な課題を解決できますが、マイクロソフトでは、一貫性のある機能セットに重点的に取り組めるように、特定の対象シナリオを設定して開発を開始しました。もちろん、Azure Search は他にもさまざまな用途に使用できますが、これらのシナリオが原点となって、下記のサービスに対応した機能セットを採用することになりました。

    オンライン販売および e コマース: e コマースのアプリケーションやサイトのユーザーのほとんどが、最初に検索機能で商品を探します。商品カタログにはインデックスが設けられ、展開するとタグ、説明、ユーザーからの意見などが表示されることもあります。このシナリオの特徴は、星による評価、価格/手数料、キャンペーンなどを考慮したきめ細かいランキング モデルであるという点です。検索エクスペリエンスには、多くの場合ファセット ナビゲーション (カテゴリごとの総数) やフィルター、さまざまな並び替えオプションなどの機能が含まれます。また、頻繁に更新が行われるという特徴もあります。商品カタログの更新頻度は低くても、商品価格、在庫状況、どのアイテムが販売中かなどの属性は 1 日のうちに何度も変わる場合があり、検索結果に迅速に反映される必要があります。

    e コマースと最新のモバイル アプリケーションを検索機能でつないでいる実例として、AutoTrader.ca が挙げられます。Trader Corporation テクノロジ担当 VP を務める Allen Wales 氏は、このサイトについて次のように語っています。「autoTRADER.ca は、カナダ最大規模の新車・中古車販売マーケットプレースです。このマーケットプレースはモバイル デバイスからの利用へと大規模な転換を行っており、現在は半数を超えるユーザーが PC からではなくモバイル デバイスからアクセスしています。弊社のモバイル アプリは、カナダの自動車購入者の皆様に 200 万回以上ダウンロードしていただいています。モバイル ユーザーの皆様は、PC から Web サイトにアクセスされる従来のユーザーよりも訪問頻度が高く、検索を行う回数も多くなっています。こうした検索機能の負荷の高まりを受けて、スケーリング可能な検索エンジンが必要となったのです。」

    ユーザー作成コンテンツおよびソーシャル コンテンツ: ユーザー作成コンテンツ アプリケーションにはいろいろなものがありますが、検索機能の要件については、ほとんどのアプリケーションで似通っています。この種のアプリケーションにはレシピ サイト、写真共有サイト、ユーザー投稿型のニュース サイト、Web とモバイルでプレゼンス通知機能があるソーシャル ネットワーク アプリケーションなどがあり、その特徴として大容量のドキュメントを処理するという点が挙げられます。特にユーザーがコメントを付けたりアイテムについて議論したりできる場合は、数百万のドキュメントを扱うこともあります。また、人や物事に関する場所を示す地理空間データが含まれることもよくあります。検索の関連性には、ドキュメントの鮮度や作成者の人気などのドメイン固有の要素のほか、テキスト統計が影響します。

    その好例が、ユーザーがパノラマ画像や “Synth” をキャプチャ、共有する Photosynth というサイトです。このサイトでは、既に Azure Search がキーワード検索 (英語)および地理空間エクスペリエンス (英語)の両方で活用されています。Azure Search は、ユーザーから投稿されたすべてのアセットに対して、タイトルやタグ (キーワード検索用)、地理位置情報 (境界ボックス クエリ用) を含むインデックスを作成します。

    ビジネス アプリケーション: 基幹業務アプリケーションのユーザーは、事前定義済みのメニューやその他の構造化されたアクセス経路からコンテンツに移動するのが一般的です。しかし、検索機能がこのアプリケーションに組み込まれると、一般ユーザーの操作の負担が大幅に軽減され、情報を取得するときの時間短縮や効率化に役立つ場合があります。この種のアプリケーションにはさまざまな種類のエンティティがあり、それぞれが組み合わされて検索されることで単一のエントリ ポイントを提供し、システム全体にわたるコンテンツを発見するしくみになっています。

    これらのシナリオのいずれでも、多くの場合、エンドポイントはモバイル デバイスと Web サイトに混在し、最新のアプリケーションのほとんどがその両方を対象としているか、両者を明確に区別していません。Azure Search は、クライアントからの直接の使用と、各種アプリケーションをサポートしているバックエンドからの使用の両方に対応するように設計されています。

    機能

    以下に、Azure Search の機能を簡単にまとめました。これらの詳細については、サービスのドキュメントや今後のこのブログの記事をお読みください。ここでは、この記事でご紹介したシナリオに関する機能の概要のみを説明します。

    • シンプルな HTTP および JSON の API。あらゆるプラットフォームやデバイスからアクセス可能です。
    • キーワード、フレーズ、およびプレフィックスの各種検索。クエリ言語に関する知識がなくても、ユーザーは検索対象を指定できます。単に単語をいくつか指定するほかに、必要に応じて “+”、“-”、引用符、アスタリスク (プレフィックス検索の場合) を使用することも可能です。
    • 検索結果の強調表示。フォーラム内や長いドキュメントなどの分量の多いテキストで検索操作を支援します。
    • ファセット検索。ほとんどの e コマース Web サイトと同様に、カテゴリごとのヒット数を計算します。
    • 候補の表示。オート コンプリート実装時に構成要素として使用可能です。ユーザーが Enter キーを押す前に的確な検索のためのガイドを提供します。
    • リッチな構造化クエリ。構造化されたフィルター、並べ替え、ページング、およびプロジェクションと検索機能を組み合わせることで、アプリケーション定義の制限や表示オプションを実現できます。
    • フィルタリング、並べ替え、スコアリング機能を統合した地理空間情報のサポート。
    • プロファイルのスコアリング。鮮度や距離のほか、人気度や星による評価などの数値の大きさといった要素から関連性のモデリングを簡単に実行できます。
    • 弾力的なスケーラビリティ。API や Azure 管理ポータルから、パーティション (処理可能なドキュメント数) またはレプリカ (1 秒間あたりのクエリ処理数や可用性) に関してサービスのスケールアップ/スケールダウンが可能です。なお、その際に他の可用性が影響を受けることはありません。

    マイクロソフトでは早期導入プログラムを実施して、開発チームが採用した機能が実世界のシナリオで実際に有効かどうかを検証しました。そのときの Jones Lang LaSalle (JLL) のコメントをご紹介します。JLL のイノベーション担当ディレクターである Sridhar Potineni 氏は次のように述べています。

    「JLL は、商用不動産や投資マネージメントの分野に特化した金融および専門サービスを世界規模で提供しています。多数のお客様に対応可能な弊社のアプリケーションは、強力な検索機能を備え、1 秒あたり数十回のクエリ処理数 (QPS) を実現できるスケールにまで拡大することが可能です。Azure Search はクラウド ベースのマネージド サービスであるため、検索機能を持つアプリケーションを新たに世界中に展開するのも迅速に行え、ユーザーのレイテンシを短縮することができます。
    Azure Search は、ファセット ナビゲーション、クエリ補完、地理空間情報の検索、そして特にポリゴン検索のような、弊社が従来から使用しているオンプレミス検索ソリューションの機能を完全に網羅しています。ポリゴン検索は “物件情報検索” などのアプリケーションに必須の機能で、さまざまな地理的区分で物件を迅速に検索することが可能です。弊社ではこれらの機能を活用して需要を拡大し、数万件の管理資産へのお問い合せ数の向上を図っています。」

    この機会に、Azure Search を皆様にご利用いただけることを願っております。フィードバックや特定のトピックに関するご意見がありましたら、お気軽にお寄せください。またこちらのページ (英語)から実際にお試しのうえ、ご意見をいただけますと幸いです。


    開発者、IT プロフェッショナル、ビジネス リーダーのチャンスを最大限に広げるクラウド

    $
    0
    0

    このポストは、9 月 10 日に投稿された Enabling developers, IT Professionals and business leaders to maximize opportunities with cloud の翻訳です。

    クラウド コンピューティングによってこれまでになかったチャンスが広がっていることは言うまでもありません。そしてその恩恵を受けているのは、IT プロフェッショナルや開発者だけに留まりません。Microsoft Azure 戦略の根幹にあるのは、新たなビジネス モデルの開発を目指すビジネスの意思決定者、最新のアプリケーション シナリオに取り組む開発者、既存のプラットフォームをクラウドに拡張したいと考える IT プロフェッショナルのすべてにメリットをもたらすサービスを提供することです。

    マイクロソフトはこのたび、あらゆる業務を担うユーザーがクラウドによってもたらされるチャンスを最大限に活かせるように、新たなサービス群のリリースを発表しました。

    Live Streaming と新しい Media Services のプレビューを全世界でリリース

    マイクロソフトはアムステルダムで開催された IBC 2014 (International Broadcasting Convention) に先立ち、以下のサービスの提供開始を発表しました。

    • Live Streaming: 2014 年冬季オリンピックや 2014 FIFA ワールド カップを世界各地の放送局にシームレスに配信した Live Streaming ソリューションと同水準のスケーラビリティ、稼働時間、信頼性を備えたプレビュー版の提供を全世界で開始しました。
    • Content Protection: プレミアム動画コンテンツの保護とマネタイズ化を実現する Content Protection のプレビュー版の提供を開始しました。この機能では静的暗号化および動的暗号化が可能で、PlayReady DRM や Clearkey AES 128 ビット暗号化など、業界標準のさまざまな暗号化オプションを用意しています。
    • Indexer: 音声ファイルや動画ファイルのアクセシビリティを向上して検索しやすくする Indexer の一般提供を開始しました。この機能を使用するとメディア ライブラリをすばやくインデックス化できます。

    今回の発表の詳細については、こちらのブログ記事 (英語)をご覧ください。

    エンタープライズ クラスの Web サービス

    Azure WebSites は、企業の Web サイトやビジネス アプリケーションの開発、テスト、運営や、デジタル マーケティング キャンペーンの実施を可能にするエンタープライズ レベルのクラウド サービスです。Azure WebSites の新機能として、企業による新たなシナリオ展開の支援を目的とした以下の機能をリリースしました。

    • Azure WebSites の VPN サポート: VPN サポートにより、Virtual Network 内のプロビジョニングされた Virtual Machines や Cloud Services に安全にアクセスできるようになります。これにより、データベースやその他のサービスをデータセンターに配置したハイブリッド環境に WebSites を導入することが可能になり、ビジネス アプリケーションの刷新を検討したり、従業員や認証済みのユーザーがどこからでもアプリケーションを利用できるようにすることができます。
    • スケーラブルな CMS (WordPress) がアプリケーション ギャラリーに登場: スケーラブルな WordPress アプリがアプリケーション ギャラリーから入手可能になりました。このアプリを使うと、堅牢な CMS ベースのサイトを簡単にセットアップできます。スケーラブルな WordPress を使用して新たに作成した WebSites には、メディア アセット用の Azure Storage、厳選された WordPress プラグインにより最適化されたパフォーマンス、WebSites の Standard インスタンスやハイエンドの MySQL SKU から成るスケーラブルなバックエンドなど、Azure のさまざまな機能が自動的に組み込まれます。

    コスト パフォーマンスとビジネス継続性に優れたデータベース サービス

    先日発表した Azure SQL Database の新しい サービス レベルである Basic、Standard、Premium の一般提供がついに開始されました。軽量なものから重量のものまであらゆるアプリケーションのトランザクション レベルに対応した 7 つのパフォーマンス レベルが用意されており、安定したパフォーマンスとエンタープライズ クラスの機能を提供します。SLA は稼働率 99.99% を保証し、料金は以前の発表から最大 50% 値下げしています。さらに時間単位での課金制のため、これまでよりもずっと柔軟に予算管理を行うことができます。

    この一般提供の詳細については、Data Platform Insider ブログ (英語)をご覧ください。

    API の提供でより多くのユーザーやチャネルの開拓が可能に

    Azure API Managementの一般提供を開始しました。この機能を使用すると、API をより高い信頼性、安全性、スケーラビリティで発行することができます。開発者にとってはデジタル アセットの直接的なマネタイズが可能になり、プラットフォーム化によってモバイル デバイス向けの新たなコンテンツ配信チャネルを開拓することができます。ユーザー ロールのプロビジョニングから利用プランやクォータの作成、ペイロード変換ポリシーの適用、スロットリング、アナリティクス、監視、アラートの構成まで、API 管理に必要なあらゆるツールがそろっています。また、機能を強化した Azure API Management REST APIにより、API 管理の自動化や API 管理と他のシステムやプロセスとの統合が可能です。

    この一般提供の詳細については、こちらのブログ記事 (英語)をご覧ください。

    ID およびアクセス管理サービスの拡張

    Azure プレビュー ポータルにて、新機能である Role Based Access Controlをご利用いただけるようになりました。この機能を使用することにより、Azure リソースへのアクセス権を細かく管理し、Active Directory のユーザーやグループに対してサブスクリプション レベル、リソース グループ レベル、個別のリソース レベルでアクセス権を付与できるようになります。また、新たに追加された「Owner」、「Contributor」、「Reader」の 3 つのロールを使用して制限付きアクセス権を付与することができます。

    マイクロソフトは、皆様がクラウドのメリットを活用して多種多様なクラウド サービスを次々と生み出せるよう今後も全力で取り組みを進めていきます。まだご利用いただいていない方はこちらの無料評価版にサインアップして、Azure のメリットをお試しください。

    Microsoft Azure を災害復旧サイトとして使用するためのネットワーク インフラストラクチャのセットアップ

    $
    0
    0

    このポストは、9 月 4 日に投稿された Networking Infrastructure Setup for Microsoft Azure as a Disaster Recovery Siteの翻訳です。

    Azure Site Recovery (ASR) では、Microsoft Azure を Virtual Machines の災害復旧サイトとして使用するようにセットアップすることができます。ASR の詳細については、Brad Anderson が執筆した「Azure Site Recovery を使用した Azure の災害復旧機能のプレビューを発表 (英語)」の記事をお読みください。

    アプリケーションに災害復旧機能を追加するにあたって重要なのは、フェールオーバー完了後にユーザーがアプリケーションにアクセスできるようになるまでのダウンタイムを最小限に抑えられるよう、ネットワーク インフラストラクチャの計画立案時に慎重に検討することです。この記事では、その要件を満たすようにネットワーク インフラストラクチャをセットアップする方法を、例を示しながら説明します。まず、ここで例示するアプリケーションについて説明し、続いてネットワークをオンプレミスと Azure でセットアップする方法、最後にテスト フェールオーバーと計画されたフェールオーバーを実行する方法を説明します。

    1. アプリケーション

    ここでは、IIS を基盤としてバックエンドに SQL Server を使用する、2 層構造のアプリケーションを例に説明します。

     

    上のスクリーンショットの画面で、Active Directory をセットアップ済みの「Contoso」という名前の企業を作成します。ここでは SQL Server をバックエンドとして使用する 2 層構造の IIS Web アプリケーションを使用します。SQL Server は Windows 認証で認証が行われており、Virtual Machines はすべて contoso.com ドメインに属しています。また、このアプリケーションには企業のオンプレミス環境のユーザーとモバイル ユーザーの両方からのアクセスがあります。企業のオンプレミス環境以外のユーザーは、企業ネットワークに接続する際に VPN を使用します。

    2. オンプレミス ネットワーク

    contoso.com のオンプレミス インフラストラクチャは、VMM 2012 R2 Server で管理されています。また、VMM Server 上で「Application Network」という名前の VLAN を基盤とする論理ネットワークが作成されています。この論理ネットワークでは、「Application VM Network」という名前の VM ネットワークが作成されます。アプリケーション内のすべての Virtual Machines で静的 IP が使用されるため、この論理ネットワークで静的 IP プールも定義されます。ただし、Virtual Machines が DHCP を使用するように構成されている場合は、静的 IP プールは不要です。

    論理ネットワーク

    VM ネットワーク

    上記の手順で、全 3 台の Virtual Machines のうち、ドメイン コントローラーの SQL Backend と IIS Frontend が VM ネットワークに追加されます。各 Virtual Machines には、それぞれ次の静的 IP が割り当てられます。

    • Active Directory と DNS – 192.168.0.3
    • SQL Backend – 192.168.0.21
    • IIS Frontend – 192.168.0.22

    3. Azure ネットワーク

    まず、Azure Virtual Network を大まかに理解するために、Azure Virtual Network の概要記事をご一読ください。ここではまず、Microsoft Azure に「AzureNetwork」という名前の Azure Virtual Network を作成します。このネットワークの作成中に、DNS サーバーの IP としてオンプレミスの DNS サーバーの IP アドレス (ここでは 192.168.0.3) が割り当てられます。これにより Point-to-Site 接続と Site-to-Site 接続が使用できるようになります。


     
    「AzureNetwork」では、10.0.0.0 ~ 10.0.0.255 の範囲のアドレスが使用できます。


     
    ここで注意していただきたいのは、主に次の 2 つの要件を満たす必要がある場合、オンプレミスのアドレスとは異なるアドレス範囲を使用しなければならないという点です。

    •  オンプレミスのネットワークと Site-to-Site 接続を確立する。Site-to-Site 接続のゲートウェイでは、接続されるネットワークの両側で同一の IP 範囲を使用することはできません。
    •  複数のアプリケーションがオンプレミスで実行されている場合、サブセットのすべてではなく一部のアプリケーションのみをフェールオーバーできるようにする。 

    : 上記の 2 つの要件を満たす必要がない場合は、オンプレミスのアドレス範囲とまったく同一の範囲を定義してもかまいません。

    4. Site-to-Site 接続のセットアップと AD のレプリケーション

    Azure 内のネットワークはオンプレミスのネットワークの延長であるため、アプリケーションをサイト間でシームレスに移動することができます。Azure で作成された仮想ネットワークでは、ユーザーが Site-to-Site 接続を追加することができます。Site-to-Site 接続は、作成時および作成後のいずれのタイミングでも追加できます。接続の作成方法は、Azure Virtual Network に Site-to-Site 接続を追加するためのステップバイステップ手順の資料を参照してください。なお、後から追加する場合でも手順はほぼ同じです。

    Site-to-Site 接続が確立されたら、次は Azure で Active Directory と DNS サーバーを作成します。これを作成すると、Azure で実行されているアプリケーションが名前の検索や認証要求のたびにオンプレミスの AD と DNS を参照する必要がなくなります。次の手順にしたがって、Azure で Active Directory を作成します。

    1. まず、オンプレミスの Active Directory で Active Directory サイトとサービスを使用して、AzureSite とは別のサイトを作成することを推奨します。
    2. セクション 3 で作成したネットワークに IaaS VM を作成します。
    3. サーバー マネージャーを使用して、Active Directory ドメイン サービスおよび DNS サーバー ロールをインストールします。
    4. サーバーをドメイン コントローラーに昇格して、オンプレミスの contoso.com ドメインの名前を割り当てます。セクション 3 でオンプレミスの DNS サーバーに DNS 用の IP が割り当られているため、IaaS VM が contoso.com という名前を解決できます。
    5.  「AzureSite」という名前の Active Directory サイトを既に作成している場合は、この Active Directory を追加します。

    これで、Azure で DNS サーバーが実行されているため、作成済みの IaaS VM をこの時点から使用することを推奨します。これには AzureNetwork に移動して DNS サーバーの IP を変更し、前の手順で作成した IaaS VM の IP アドレスを指定します。

    AD のレプリケーションの頻度: DNS レコードのレプリケーションの頻度は、Active Directory サイトとサービスで変更できます。詳細な手順については、「Active Directory サイト間でのレプリケーションをスケジュールする」を参照してください。

    Active Directory と DNS のレプリケーションを Azure に作成する必要の有無: サイトの完全な災害復旧を目標とする場合は、Active Directory のレプリケーションを Azure に作成する必要があります。ただし、一度に実行する計画されたフェールオーバーを一部のアプリケーションのみに限定し、その対象となるアプリケーションが Active Directory や DNS とあまり頻繁に通信しない場合、Active Directory および DNS のレプリケーションを Azure に作成しないという選択肢も考えられます。この場合、Azure で作成したネットワークにオンプレミスの DNS サーバーの IP アドレスを割り当てることができます。

    5. Point-to-Site 接続のセットアップ

    アプリケーションが Azure にフェールオーバーされた場合でも、モバイル デバイスからのアクセスを維持する必要があります。これを可能にするには、AzureNetwork への Point-to-Site 接続を作成します。詳細については、Azure Virtual Network への Point-to-Site VPN のセットアップ手順の資料を参照してください。このセットアップが完了した状態が以下のとおりです。

     

    6. テスト ネットワークの作成

    Azure Site Recovery では、新たに別の Azure Virtual Network を用意すると、運用環境のワークロードに影響を与えないようにフェールオーバーのテストを実施できるようになります。ネットワークを新規作成し (ここでは「AzureTestNetwork」という名前に設定)、セクション 3 で作成したネットワークと同じ IP 範囲を使用するように構成します。この時点では、まだ Site-to-Site 接続や Point-to-Site 接続をこのネットワークに追加しません。

    7. Azure Site Recovery のセットアップ

    ここまででインフラストラクチャのセットアップが完了しました。さらに次の手順で ASR をセットアップしていきます。

    1. クラウド環境を構成します。
    2. 「Application VM Network」を AzureNetwork にマッピングします。
    3. 次の保護を有効にします。
      1. 1. Active Directory – AD から Azure へのレプリケーションには AD レプリケーションを使用しますが、フェールオーバーのテストの際には AD インスタンスが必要です。このため、ここでも ASR で AD を保護する必要があります。フェールオーバーのテストで AD を使用する方法については、この記事のセクション 9 で説明します。
      2. 2. IIS Frontend
      3. 3. SQL Backend

    この手順の詳細については、ASR の入門ガイド (英語)および ASR のデプロイメント ガイド (英語)を参照してください。このセットアップが完了した状態が以下のとおりです。

     

    8. 復旧計画の作成

    ここでは、IIS Frontend および SQL Backend の 2 台の VM を含む環境の復旧計画を作成します。その後、もう 1 つグループを追加して、IIS Frontend をグループ 2 に移動し、復旧計画をカスタマイズします。SQL Backend のフェールオーバーは、IIS Frontend が起動する前に最初に実行し、IIS アプリケーションが正常に起動するようにします。この場合の復旧計画は次のようになります。

    9. フェールオーバーのテスト/災害復旧テストの実施

    災害復旧機能のセットアップの確認、およびコンプライアンス要件の遵守のために、企業では定期的にフェールオーバーのテストや災害復旧テストを実施する必要があります。ASR では、運用環境のワークロードに影響を与えることなくフェールオーバーのテストを実施できます。フェールオーバーまたは災害復旧のテストを実施する場合は、セクション 6 で作成したテスト用ネットワークを使用します。災害復旧テストは次の手順で実施します。

    1. ASR で AD の VM に移動し、AzureTestNetwork でフェールオーバーのテストを実施します。
    2. IaaS VM を AzureTestNetwork の AD で作成し、この VM に割り当てられた IP アドレスを確認します。
    3. IP アドレスが AzureTestNetwork の DNS に割り当てられたものと異なる場合は、DNS の IP をこの AD の VM に割り当てられたアドレスに変更します。Azure では、Virtual Network で定義された IP アドレス範囲のうち 4 番目以降のアドレスが割り当てられます。つまり、ネットワークの IP アドレス範囲が 10.0.0.0 ~ 10.0.0.255 の場合、このネットワークで作成された VM に割り当てられる最初の IP アドレスは 10.0.0.4 ということです。災害復旧テストでは最初に AD がフェールオーバーされるため、AD に割り当てられる IP アドレスはあらかじめ予想できます。このアドレスを AzureTestNetwork の DNS に追加します。
    4. セクション 8 で作成した復旧計画に移動し、AzureTestNetwork でフェールオーバーのテストを実施します。Azure で VM がフェールオーバーされ、その後起動されるときに、AzureTestNetwork でフェールオーバーされた VM が DNS に自動的に登録されます。さらに、AzureTestNetwork で実行されている AD DNS の VM が、復旧計画にしたがって 2 台の VM の IP アドレスを更新します。この IP アドレスは、VM が静的 IP アドレスを使用している場合でも、オンプレミスの VM のものとは異なります。
    5. IaaS VM を AzureTestNetwork で作成します。
    6. これで、IIS アプリケーションには、http://iisfrontend/を使用して IaaS VM からアクセスできるようになります。
    7. テストが完了したら、ASR の [Jobs] ビューで、フェールオーバーのテストが完了したことを示すマークを付けます。この操作により、AzureTestNetwork で作成された VM が削除されます。

     

    10. 計画されたフェールオーバーの実行

    アプリケーションの計画されたフェールオーバーを実行するには、セクション 8 で作成した復旧計画を使用します。計画されたフェールオーバーの実行が完了したら、Azure で起動した Virtual Machines が自動で Azure で実行されている DNS にアクセスし、IP アドレスを更新します。この新しい IP アドレスは、セクション 4 で設定したレプリケーションの頻度にしたがってオンプレミスの DNS にも適用されます。また、Active Directory サイトとサービスに移動してサイトを展開し、ドメイン コントローラーの [NTDS Settings] を開くと、オンデマンドで DNS レコードのレプリケーションを実行できます。[NTDS Settings] を右クリックすると、選択したドメイン コントローラーに、または選択したドメイン コントローラーからレプリケーションを実行するオプションが表示されます。

    DNS レコードのレプリケーションが実行され、さらにその DNS レコードの Time-To-Live (TTL) が終了すると、アプリケーションはオンプレミスのクライアント、または Point-to-Site VPN を使用して AzureNetwork に接続しているクライアントからアクセスできるようになります。

    この記事では、IIS を基盤として SQL Server をバックエンドに使用する 2 層構造の Web アプリケーションで、災害復旧をセットアップする方法について説明しました。また、災害復旧テストや計画されたフェールオーバーを実施するためにドメイン コントローラーや DNS をセットアップする方法、およびフェールオーバー後にエンド ユーザーがシームレスにアプリケーションにアクセスできるように Azure Virtual Network で Site-to-Site 接続や Point-to-Site 接続をセットアップする方法についても説明しました。

    ご不明な点がありましたら、MSDN の Azure Site Recovery フォーラムまでお寄せください。ここでは詳細情報を入手したり、他のユーザーと交流することもできます。

    また、製品の詳細情報はこちらから確認できます。Microsoft Azure で Azure Site Recovery を試すには、Azure の無料評価版にサインアップしてください。

    Azure Notification Hubs の活用で業務をさらにシンプルに

    $
    0
    0

     このポストは、9 月 5 日に投稿された Simplifying working with Azure Notification Hubs の翻訳です。

    現在、Service Bus の名前空間の 97% 近くで、Notification Hubs または何らかのメッセージング エンティティ (Queue、Topic、Relay、Event Hub) のいずれかが使用されており、きわめて稀なケースではこの両方が共に使用されています。Notification Hubs とメッセージング エンティティを併用するという現在の方法をよりわかりやすいものにして、Service Bus のバックエンドでこれらのエンティティを管理しやすくするために、マイクロソフトでは両者のユーザー エクスペリエンスを分離できるように取り組んでいます。その第一歩として今回は、名前空間で Notification Hubs を作成するのか、それともいずれかのメッセージング エンティティを作成するのか、名前空間の目的を明示的に選択できるようにしました。近い将来、今回の変更を基にして、Service Bus 固有のコンポーネントにオーバーヘッドを発生させることなく、SDK から Notification Hubs を簡単に利用できるようにしたいと考えています。これにより、お客様から寄せられている主な問題点の 1 つに対処できることになります。

    メモ: 今回の機能変更は、随時利用できるようになる予定です。今回の変更について不明な点または問題点などがありましたら、ぜひご連絡ください。

     新しい名前空間を作成する際、名前空間の種類として新しい選択肢が追加されます。名前空間で Notification Hubs を作成する場合は [NOTIFICATION HUB] を選択し、それ以外の場合は既定値 ([MESSAGING]) のままで名前空間を作成します。1 つの名前空間で Notification Hubs とメッセージング エンティティの両方を作成する場合、今後はそれぞれ個別の名前空間を作成する必要があります。ちなみに、既存の名前空間は、1 つの名前空間で Notification Hubs とメッセージング エンティティの両方を使用している場合であってもこれまでどおり利用できますが、それぞれ別の名前空間に分けて使用することを強くお勧めします。

     

    名前空間が作成されると、名前空間の一覧に「TYPE」という名前の新たな列が表示されます。TYPE 列には次の 3 つの値のいずれかが示されます。

    1.    Messaging – 種類 (TYPE) に既定の [MESSAGING] を指定して作成した新しい名前空間

    2.    Notification Hub - 種類 (TYPE) に [Notification Hub] を指定して作成した新しい名前空間

    3.    Mixed - Notification Hubs とメッセージング エンティティの両方を使用する既存の名前空間。この種類の名前空間とそこで使用しているエンティティはこれまでどおり利用できますが、Mixed タイプの名前空間を新たに作成することはできません。

    当面の間は、これまでどおりのエクスペリエンスを提供するために、既存の名前空間の種類はすべて Mixed として表示されます。ただし、マイクロソフトでは名前空間の種類を正しく更新するための作業を 1 か月以内に行う予定です。したがって、Notification Hubs だけを使用する名前空間は「Notification Hub」に、また、メッセージング エンティティだけを使用する名前空間は「Messaging」に更新されます。これによって、現在のエンティティの使用方法が変わることは一切ありません。引き続きすべてこれまでどおりにご利用いただけます。

     

    Service Bus エンティティの [QUICK CREATE] と [CUSTOM CREATE] の使用については、基本的にこれまでどおりですが、唯一の変更点は、作成するエンティティに応じて名前空間のドロップダウンで自動的にフィルタリングが行われるようになったことです。これにより、たとえば Notification Hubs を作成する場合は、Notification Hub タイプの名前空間 (および、当面の間は Mixed タイプの名前空間) が表示されます。

     

    また、名前空間をクリックすると、種類に応じてカスタマイズされたトップ レベル メニューが表示されます。

     

     

    Notification Hub タイプの名前空間には Notification Hubs を作成および構成することができ、Messaging タイプの名前空間にはメッセージング エンティティのいずれかをこれまでどおりに作成および構成することができます。現在、Notification Hubs とメッセージング エンティティの両方を使用する Mixed タイプの名前空間を利用している場合は、個別の名前空間に分けることをお勧めします。

    PowerShell コマンドレットまたは REST API を直接使用して名前空間を作成する場合、現時点では Mixed モードで名前空間が作成されます。今回はこれに関する大幅な変更はありません。ただし、今後のリリースでコマンドレットの更新を行い、「Messaging」を既定値とするオプションのパラメーターとして NamespaceType を追加する予定です。したがって、このコマンドレットを使用して名前空間を作成する場合は、名前空間の種類として明示的に「Notification Hub」を指定する必要があります。

    最後までお読みいただきありがとうございました!

     

    Microsoft Azure WebJobs SDK の 0.5.0-beta プレビューを発表

    $
    0
    0

    このポストは、9 月 6 日に投稿された Announcing the 0.5.0-beta preview of Microsoft Azure WebJobs SDKの翻訳です。

    マイクロソフトはこのたび、Microsoft Azure WebJobs SDK プレビューの新しいバージョンをリリースしました。WebJobs SDK については Scott Hanselman 氏がこちらの記事 (英語) で紹介しています。以前のバージョンの詳細については、こちらの記事を参照してください。

    今回のリリースでは、0.4.0-beta に含まれていた基本機能に加えて、さらにいくつか新機能が搭載されています。

    このリリースをダウンロードする

    新しい WebJobs SDK は NuGet ギャラリーからダウンロードできます。NuGet ギャラリーで NuGet Package Manager Console を使用して、パッケージをインストールまたは更新します。

    Install-Package Microsoft.Azure.WebJobs –Pre

    Microsoft Azure Service Bus のトリガーを使用したい場合は、次のパッケージをインストールしてください。

    Install-Package Microsoft.Azure.WebJobs.ServiceBus -Pre

    WebJobs SDK とは

    Microsoft Azure WebSites の WebJobは、サービスやバックグラウンド タスクなどのプログラムを WebSites で簡単に実行できるようにするための機能で、.exe.cmd.batなどの各種実行形式ファイルを WebSites にアップロードして、トリガーで起動する WebJob または継続的に実行する WebJob として実行することができます。WebJobs SDK なしでバックグラウンド タスクの接続や実行を行うとなると、複雑で膨大な量のプログラミングが必要になりますが、SDK が提供するフレームワークを使用すれば、最低限の量のコードで一般的なタスクを実行できます。

    WebJobs SDK のバインディング システムとトリガー システムは、Service Bus だけでなく、Microsoft Azure Storage サービスの BLOB、Queue、Table にも対応しています。バインディング システムを使用すれば、Microsoft Azure Storage オブジェクトに対して読み取りや書き込みを行うコードを簡単に作成できます。トリガー システムは、Queue や BLOB が新しいデータを受け取るたびに、コードに記述されている関数を呼び出します。

    今回のプレビューで更新された点

    public クラスで定義された public 関数のみをインデックス化

    本リリースから、SDK は public クラスに定義されている public 関数のみが参照されるようになります。非 public 関数や 非 public クラスで定義された関数はインデックス化されないため、SDK はこれらの関数を呼び出することはできません。

    有効な関数の定義を次に示します。

    public classFunctions

    {

        public static voidProcessQueue([QueueTrigger("input")] string input)

        {

        }

    }

    以下は、クラスが public ではないので機能しません。

    class Functions

    {

        public static void ProcessQueue([QueueTrigger("input")] string input)

        {

        }

    }

    Queue を使用した並列実行

    SDK 0.4.0-beta では非同期関数のサポートが追加されました。このサポートの一環として、複数の異なる Queue をリッスンする関数が並列的にトリガーされる並列処理も追加されました。

    今回のリリースでは新たに、QueueTrigger 内での Queue のメッセージの並列取得のサポートが追加されています。これにより、関数は Queue をリッスンし (下を参照)、既定である 16 個の Queue のメッセージのバッチを並列的に取得することができます。また、関数は並列で実行されます。

    public classProgram

    {

        static voidMain()

        {       

            JobHost host = newJobHost();

            host.RunAndBlock();

        }

        public static voidProcessQueue([QueueTrigger("input")] string input)

        {

        }

    }

     

    次のコードは、0.4.0-beta と同じ機能を追加するものです。JobHostConfiguration クラスでバッチ サイズを次のように設定できます。

    public classProgram

    {

        static voidMain()

        {

            JobHostConfiguration config = newJobHostConfiguration();

            config.Queues.BatchSize= 1;

            JobHost host = newJobHost(config);

            host.RunAndBlock();

        }

    }

     

    BlobTriggers の処理は 1 回限り

    これまでは、より新しい BLOB 出力が生成されるまで BlobTriggers が再処理されるため、BLOB が再処理される場合がありました。

    このリリースの SDK では、新しい BLOB が検出されるか、既存の BLOB が更新された場合に限り BlobTrigger が処理されます。

    次のコードは、BLOB の作成時または更新時に関数をトリガーする方法を示しています。

    public classProgram

    {

        static voidMain()

        { 

            JobHost host = newJobHost();

            host.RunAndBlock();

        }

     

        public static voidProcessBlob([BlobTrigger("test/{name}")] string input)

        {

        }

    }

    この変更により、BlobTrigger が処理されたら BLOB - Queue のワークフローを起動する、という処理が可能になります。次のコードは、BlobTrigger が処理されると Queue メッセージを作成するようにする方法を示しています。

    public classProgram

    {

        static voidMain()

        {

            JobHost host = newJobHost();

            host.RunAndBlock();

        }

     

        public static voidBlobToQueue(

            [BlobTrigger("test/{name}")] string input,string name,

            [Queue("newblob")] out string message)

        {

            message = name;

        }

    }

    SDK は、「azure-webjobs-hosts」という名前のコンテナーを Azure Storage アカウント (AzureWebJobsStorageで指定) に追加します。

    SDK は処理を終えた各 BLOB の BLOB レシートを保持し、このコンテナーを使用して各 BLOB のステータスの処理を継続します。

    BLOB レシートには処理された BLOB に関する次の情報が格納されています。

    • この BLOB によりトリガーされた関数 (FunctionId)
    • コンテナー名
    • BLOB の種類
    • BLOB 名
    • ETag – BLOB のバージョン

    BLOB を強制的に再処理したい場合は、その BLOB の BLOB レシートを「azure-webjobs-hosts」コンテナーから削除します。

    下のスクリーンショットには、「azure-webjobs-hosts」コンテナーの処理された BLOB の BLOB レシートが表示されています。

     

     

    BLOB の再試行およびエラー処理

    今回リリースされた SDK では、BLOB 処理時にエラーが発生した関数の再試行をサポートしています。BlobTrigger が再試行する回数の上限を指定できます (既定は 5 回)。

    しきい値に達し、関数の実行回数が 5 回に達すると、SDK は「webjobs-BLOBtrigger-poison」という Queue にメッセージを送信します。この Queue の QueueTrigger を使用して関数をトリガーし、カスタムのエラー処理を実行できます。Queue メッセージには、シリアル化された JSON 文字列として以下の情報が格納されます。

    • FunctionId – BLOB が処理された関数の ID
    • BlobType – BLOB の種類 (ページ BLOB/ブロック BLOB)
    • ContainerName - BLOB のコンテナー名
    • BlobName - BLOB の名前
    • ETag – エラーの原因となった BLOB のバージョン

    次の関数は BLOB のエラー処理方法を示しています。

    public classProgram

    {

        static voidMain()

        { 

            JobHost host = newJobHost();

            host.RunAndBlock();

        }

     

        public static voidProcessBlob([BlobTrigger("test/{name}")] string input)

        {

            throw newException();

        }

        public static voidBlobErrorHandler(

            [QueueTrigger("webjobs-blobtrigger-poison")] BlobTriggerErrorMessage message)

        {

     

        }

        public class BlobTriggerErrorMessage

        {

            public stringFunctionId { get; set; }

            public stringBlobType { get; set; }

            public stringContainerName { get; set; }

            public stringBlobName {get; set; }

            public stringETag { get; set; }

        }

    }

    このサンプルでは、Queue メッセージはシリアル化された JSON 文字列なので、Queue メッセージの型を BlobTriggerPosionMessage というクラスに厳密に指定しています。SDK により、シリアル化された JSON オブジェクトを POCO (Plain Old CLR Object) にバインドできます。

    次のコードは、BLOB 処理の再試行回数の設定方法を示しています。これは、Queue の有害メッセージの処理でも使用する構成オブジェクトです。この設定により、BLOB や Queue を処理する関数の再試行回数を制御できます。

    public classProgram

    {

        static voidMain()

        { 

            JobHostConfiguration config = newJobHostConfiguration();

            config.Queues.MaxDequeueCount = 2;

            JobHost host = newJobHost(config);

            host.RunAndBlock();

        }

    }

    サンプル

    WebJobs SDK のサンプルは次の場所を参照してください。 https://github.com/Azure/azure-webjobs-sdk-samples (英語)

    • Blob、Table、Queue、および Service Bus でのトリガーやバインディングの使用例をご覧いただけます。
    • PhluffyShuffy というサンプルは画像処理を行う Web サイトです。ユーザーがここに画像をアップロードすると、BLOB ストレージのその画像を処理する関数がトリガーされます。

    関連資料

    SDK を使用した WebJob の Azure WebSites へのデプロイ

    Visual Studio 2013 Update 3 および Azure SDK 2.4 には、WebJob を Azure WebSites に発行するための Visual Studio ツールのサポートが追加されています。詳細については、「Azure WebJob を Azure WebSites にデプロイする方法 (英語)」を参照してください。

    0.4.0-beta から 0.5.0-beta への移行時の既知の問題

    public クラスで定義された public 関数のみをインデックス化

    本リリースから、SDK は public クラスに定義されている public 関数のみを参照するようになります。private 関数や private クラスで定義された関数はインデックス化されないため、この SDKで はこれらの関数を呼び出すことはできません。

    フィードバックとヘルプについて

    Microsoft Azure Web Sites の WebJob機能と Microsoft Azure WebJobs SDK は現在プレビュー版です。このプレビュー版の改良に役立つフィードバックをぜひご提供ください。

    チュートリアルに直接的には関係のないご質問は、Azure フォーラムASP.NET フォーラム (英語)、または StackOverflow.com (英語)までお寄せください。Twitter の場合は、#AzureWebJobs SDK を付けてフィードバックをお願いします。StackOverflow では「Azure-WebJobsSDK」タグをご使用ください。

    Data Protection Manager を使用した Azure IaaS ワークロードの保護

    $
    0
    0

    このポストは、9 月 8 日に投稿された Azure IaaS workload protection using Data Protection Manager の翻訳です。

     System Center Data Protection Manager (DPM) は、マイクロソフトのオンプレミス ワークロードを保護するための定評あるバックアップ製品です。お客様がそのインフラストラクチャの一部または全部を Azure に移行する場合、最も気になるのが Azure で実行されるワークロードのバックアップ機能です。このニーズに対応するために、マイクロソフトは Azure IaaS VM 内で実行される DPM のサポートを発表しました。これにより、Azure IaaS ワークロードが安全に保護されることになります。

    サポートされるデプロイメント

     

    図 1: ワークロードの保護のために Azure でサポートされる DPM のデプロイメント

     

    サポートされる構成は、上の図に示したとおりです。DPM のインストールの前提条件は、こちらの TechNet ドキュメントの説明と同じです。

    • DPM は、サイズが A2 以上のすべての Azure IaaS Virtual Machines に対応しています。
    • DPM によって、Azure Virtual Network と Azure サブスクリプションが同じ複数の Azure Cloud Services で実行されているワークロードを保護できます。
    • バックアップ先のストレージに使用できるディスクの数 (DPM ストレージ プール) は、Virtual Machines のサイズによって制限されます (最大 16 枚)。サイズによる制限の詳細については、Azure Virtual Machinesを参照してください。

    DPM Azure Virtual Machines としてセットアップするための推奨事項

    1. アタッチされるディスクあたりの最大 IOPS は Basic レベルよりも Standard レベルのほうが大きいため、Standard レベルでコンピューティング インスタンスを作成します。
    2. DPM の Virtual Machines に対して別のストレージ アカウントを使用します。これは、ストレージ アカウントにはサイズと IOPS による制限があり、他の実行中の Virtual Machines と共有した場合、DPM Virtual Machines のパフォーマンスに影響が生じるおそれがあるためです。
    3. DPM Virtual Machines と保護対象のワークロードは、同じ Azure Virtual Network に属している必要があります。
    4. 以下の表に、各サイズの DPM Virtual Machines で保護されるワークロードの最大数を示しています。この情報は、ワークロード サイズと更新の標準的な値と、内部のパフォーマンス テストおよびスケール テストに基づいています。実際のワークロード サイズはこれよりも大きいことがありますが、DPM Virtual Machines にアタッチされるディスクに格納する必要があります。

      DPM VM のサイズ

      保護されるワークロードの最大数

      ワークロードの平均サイズ

      ワークロードの平均更新率

      ワークロードの例

      A2

      20

      100 GB

      1 日あたり正味 5% の更新

      SQL、ファイル サーバー

      A3

      40

      150 GB

      1 日あたり正味 10% の更新

      SQL、ファイル サーバー

      A4

      60

      200 GB

      1 日あたり正味 15% の更新

      SQL、ファイル サーバー

    5. DPM にアタッチされたストレージにデータを 1 日保持し、それ以前のデータは Azure Backup サービスに格納します。より大量のデータを保護し、または保持期間を長くすることを目標とします。DPM から Azure Backup にバックアップ データを移動することによって、DPM サーバーにアタッチされたストレージを拡張する必要なく、保持の柔軟性が高まります。

    ワークロードの保護

    DPM エージェントのインストール、保護グループの設定、データの復元、バックアップ ジョブと復元ジョブのモニタリングといったすべての標準バックアップ操作を実行する (英語)には、DPM Virtual Machines のコンソールを使用します。また、Azure Virtual Machines として実行されている DPM は、サポートされる特定のワークロードを保護するために、Azure Backup サービスとシームレスに連携します。詳細については、こちらの TechNet ドキュメントをご覧ください。

    サポートされるワークロード

    オンプレミスの DPM でサポートされるワークロードの一部のみが、Azure デプロイメントの保護でサポートされます。以下の表に、Azure でサポートされるワークロードに対するバックアップ サポートを示しています。この表には、Azure でサポートされていないワークロードは含まれません。

     

    DPM 2012 R2

    DPM 2012 with SP1

    DPM 2012

    保護と復元

    Windows Server 2012 R2 – Datacenter および Standard

    ボリューム、ファイル、フォルダー

    Windows Server 2012 – Datacenter および Standard

    ボリューム、ファイル、フォルダー

    Windows Server 2008 R2 SP1 – Standard および Enterprise

    ボリューム、ファイル、フォルダー

    SQL Server – 2012、2008 R2、2008

    SQL Server データベース

    SharePoint – 2013、2010

    ファーム、データベース、フロントエンド Web サーバーのコンテンツ

    まとめ

    1. DPM を Azure IaaS Virtual Machines として実行できるようになりました。
    2. DPM を使用して、Azure IaaS Virtual Machines で動作しているワークロードを保護できます。

    詳細については、DPM に関するこちらのブログ記事 (英語)をご覧ください。また、この下の各種関連リンクをクリックして使用を開始し、ご意見やご感想をお寄せください。

    Microsoft Azure Storage での同時実行制御の管理

    $
    0
    0

    このポストは、9 月 8 日に投稿された Managing Concurrency in Microsoft Azure Storageの翻訳です。

    最新のインターネットを基盤とするアプリケーションでは、複数のユーザーが同時にデータを表示し、更新することが一般的です。このような場合、アプリケーション開発者は予測可能なエクスペリエンスをユーザーに提供する方法を注意深く検討する必要があり、特に複数のユーザーが同じデータを同時に更新できる場合はこれが重要となります。データの同時実行を処理する戦略としては、次の 3 つの手法が広く使用されます。

    1. オプティミスティック同時実行制御– アプリケーションでデータを更新する場合、更新処理の一部として、データがそのアプリケーションに最後に読み込まれた後に更新されていないかどうかを確認します。たとえば、wiki のページを閲覧している 2 人のユーザーが同じページを更新しようとしている場合、wiki のプラットフォームは、2 番目の更新が 1 番目の更新を上書きせず、また両方のユーザーがそれぞれの更新処理の成否を把握できるようにする必要があります。この戦略は、Web アプリケーションで最も広く使用されています。

    2. ペシミスティック同時実行制御– 更新を実行しようとするアプリケーションがオブジェクトをロックし、ロックが解除されるまで他のユーザーがデータを更新できないようにします。たとえば、マスターとスレーブの間でデータを複製する場合はマスターのみが更新を実行するため、通常は、データを一定期間排他的にロックして、該当するデータを他から更新できないようにします。

    3. 最終書き込み者優先– アプリケーションが最初にデータを読み込んだ後に他のアプリケーションが該当するデータを更新したかどうかを検証せず、すべての更新操作を実行します。この戦略 (つまり、確実な戦略を実装しない) は、通常、データがパーティション分割され、複数のユーザーが同時に同じデータにアクセスする可能性が十分に低い場合に使用されます。また、有効期限が短いデータ ストリームの処理にも有効です。

    この記事では、Azure Storage プラットフォームで上記の 3 種類の同時実行制御戦略について業界最高クラスのサポートが提供されていることにより、開発がいかに簡素化されるかについて説明します。

    Azure Storage – クラウド環境の開発を簡素化

    Azure Storage サービスでは上記の 3 種類の戦略をすべてサポートしていますが、特にオプティミスティック同時実行制御とペシミスティック同時実行制御を完全にサポートしているという点が特徴的です。強力な整合性モデルを備えているため、Storage サービスでデータの挿入や更新の処理がコミットされた後にサービスがそのデータにアクセスした場合でも、確実に最新のデータが提供されます。結果整合性モデルを使用するストレージ プラットフォームでは、あるユーザーが書き込みを行ってから他のユーザーがそのデータを表示できるよ���になるまでにタイム ラグが発生します。エンド ユーザーがこの不整合の影響を受けないようにするために、クライアント アプリケーションの開発は複雑になります。

    また、開発者は、適切な同時実行制御戦略を選択する他にも、同一のオブジェクトを複数のトランザクションが変更しようとする場合などに、ストレージ プラットフォームが変更を分離する方法について把握しておく必要があります。Azure Storage サービスではスナップショット分離の手法を使用していて、同一パーティション内で読み取り処理と書き込み処理が同時に発生する場合にも対応しています。他の分離レベルと異なり、スナップショット分離では、更新処理中でもすべての読み込み処理に対してデータのスナップショットを提供することにより整合性を確保します。このとき、更新トランザクションの処理が実行されていても、最後にコミットされた値が返されます。

    BLOB サービスで同時実行制御を管理する

    BLOB サービスでの BLOB およびコンテナーへのアクセスを管理する場合、オプティミスティック同時実行制御とペシミスティック同時実行制御のいずれかを使用できます。明示的に戦略を指定しない場合は、既定の最終書き込み者優先が適用されます。

    BLOB およびコンテナーでオプティミスティック同時実行制御を使用する

    Storage サービスでは、格納されているすべてのオブジェクトに識別子が割り当てられます。オブジェクトで更新処理が実行されると、そのたびにこの識別子は更新されます。識別子は、HTTP プロトコルで定義されている ETag (エントリ タグ) ヘッダーを使用して、HTTP GET 応答の一部としてクライアントに返されます。該当するオブジェクトをユーザーが更新しようとすると、条件ヘッダーが付属している元の ETag が送信され、特定の条件を満たしているときにのみ更新が行われます。この場合の条件は、更新要求で指定された ETag の値が Storage サービスに格納されている値と同一であることを、「If-Match」ヘッダーで Storage サービスに確認することです。

    このプロセスの概要は次のとおりです。

    1. Storage サービスから BLOB を取得します。この応答には HTTP ETag ヘッダーの値が含まれていて、Storage サービスに格納されているオブジェクトの現在のバージョンを示しています。

    2. 手順 1 でサービスに要求を送信したときに受け取った If-Match条件ヘッダーの ETag の値が、BLOB の更新要求と同時に送信されます。

    3. 手順 2 で要求と同時に送信された ETag の値が、BLOB の現在の ETag の値と同一であるかどうかをサービスが確認します。

    4. BLOB の現在の ETag の値が、要求と同時に送信された If-Match条件ヘッダーの ETag の値と異なる場合、サービスはクライアントに 412 エラーを返します。この場合、クライアントがこの BLOB を取得した後に、他のプロセスがこの BLOB を更新したことを示しています。

    5. BLOB の現在の ETag の値が、要求と同時に送信された If-Match条件ヘッダーの ETag の値と等しい場合、サービスは要求された処理を実行します。それと同時に、この BLOB のバージョンが変更されたことを示すために、現在の ETag の値を更新します。

    次に示す C# のスニペット (Client Storage Library 4.2.0 を使用) は、事前に取得または挿入された BLOB のプロパティからアクセスされた ETag の値に基づいて、If-MatchAccessConditionを構築する方法の簡易な例です。その後、BLOB を更新する際に AccessConditionオブジェクトが使用されます。AccessConditionオブジェクトが If-Matchヘッダーを要求に追加します。他のプロセスが BLOB を更新した場合、該当する BLOB のサービスが HTTP 412 (Precondition Failed) のステータス メッセージを返します。完全なサンプルはこちらのページ (英語)でダウンロードできます。

    // ETag を、BLOB で前回 UploadText 操作を実行した時の応答から取得
    string orignalETag = blockBlob.Properties.ETag;
    // このコードはサードパーティにより更新された場合を想定
    string helloText = "Blob updated by a third party.";
    // ETag が存在しない場合、元の BLOB が上書きされる (この場合、新しい ETag が生成される)
    blockBlob.UploadText(helloText);
    Console.WriteLine("Blob updated. Updated ETag = {0}", blockBlob.Properties.ETag);
    // BLOB 作成時に指定された元の ETag を使用して BLOB を更新
    try
    {
         Console.WriteLine("Trying to update blob using orignal etag to generate if-match access condition");
         blockBlob.UploadText(helloText,accessCondition:
         AccessCondition.GenerateIfMatchCondition(orignalETag));
    }
    catch (StorageException ex)
    {
         if (ex.RequestInformation.HttpStatusCode == (int)HttpStatusCode.PreconditionFailed)
         {
              Console.WriteLine("Precondition failure as expected. Blob's orignal etag no longer matches");
         }
    }

    Storage サービスでは、他にも If-Modified-SinceIf-Unmodified-SinceIf-None-Matchの各条件ヘッダー、およびその組み合わせをサポートしています。詳細については、MSDN の「BLOB サービス操作の条件ヘッダーの指定」のページをご覧ください。

    次の表は、要求に含まれている If-Matchなどの条件ヘッダーを受け取り、ETag の値を返すコンテナー操作をまとめたものです。

    操作

    コンテナーの ETag 値を返す

    条件ヘッダーを受け取る

    Create Container

    ×

    Get Container Properties

    ×

    Get Container Metadata

    ×

    Set Container Metadata

    Get Container ACL

    ×

    Set Container ACL

    ○ (*)

    Delete Container

    ×

    Lease Container

    List Blobs

    ×

    ×

    (*) SetContainerACL で定義されたアクセス許可はキャッシュされます。このアクセス許可の更新の伝達には 30 秒間かかり、その間は更新の整合性は保証されません。

    次の表は、要求に含まれている If-Matchなどの条件ヘッダーを受け取り、ETag の値を返す BLOB 操作をまとめたものです。

    操作

    ETag 値を返す

    条件ヘッダーを受け取る

    Put Blob

    Get Blob

    Get Blob Properties

    Set Blob Properties

    Get Blob Metadata

    Set Blob Metadata

    Lease Blob (*)

    Snapshot Blob

    Copy Blob

    ○ (コピー元とコピー先の BLOB)

    Abort Copy Blob

    ×

    ×

    Delete Blob

    ×

    Put Block

    ×

    ×

    Put Block List

    Get Block List

    ×

    Put Page

    Get Page Ranges

    (*) Lease Blob では、BLOB の ETag は変更されません。

    BLOB でのペシミスティック同時実行制御

    BLOB をロックして排他的に使用する場合は、リースを取得します。リースを取得すると、必要に応じてリース期間を 15 ~ 60 秒の間、または無制限に設定できます。この期間内は BLOB が排他的にロックされます。リース期間が有限の場合は、これを延長することができます。また、操作が完了したリースは随時解放できます。期限が切れた有限のリースは、BLOB サービスが自動的に解放します。

    リースでは、排他的書き込み/共有読み取り、排他的書き込み/排他的読み取り、共有書き込み/排他的読み取りのそれぞれの同期戦略がサポートされています。リースが存在する場合、Storage サービスは排他的書き込み (put、set、delete の各操作) を強制実行しますが、読み込み操作の排他性を確保するために、開発者はすべてのクライアント アプリケーションがリース ID を使用し、また有効なリース ID は同時に 1 つのクライアントのみが保持するようにシステムを構築する必要があります。読み込み操作にリース ID を使用しない場合、共有読み取りになります。

    次の C# のサンプル スニペットでは、特定の BLOB で 30 秒間の排他的リースを取得し、BLOB の内容を更新し、その後リースを解放します。既に BLOB が有効なリースを保持している場合、新しいリースを取得しようとすると、BLOB サービスは「HTTP 409 (Conflict)」ステータス コードを返します。また、このスニペットでは、Storage サービスに BLOB の更新を要求するときに、AccessConditionオブジェクトを使用してリースの情報をカプセル化しています。完全なサンプルはこちらのページ (英語)でダウンロードできます。

    // 15 秒間のリースを取得
    string lease = blockBlob.AcquireLease(TimeSpan.FromSeconds(15), null);
    Console.WriteLine("Blob lease acquired. Lease = {0}", lease);

    // リースを使用して BLOB を更新 (この操作は正常に完了します)
    const string helloText = "Blob updated";
    var accessCondition = AccessCondition.GenerateLeaseCondition(lease);
    blockBlob.UploadText(helloText, accessCondition: accessCondition);
    Console.WriteLine("Blob updated using an exclusive lease");

    // サードパーティがリースを使用せずに BLOB を更新する場合を想定
    try
    {
    // 有効なリースがないため、この操作は失敗します
         Console.WriteLine("Trying to update blob without valid lease");
         blockBlob.UploadText("Update without lease, will fail");
    }
    catch (StorageException ex)
    {
         if (ex.RequestInformation.HttpStatusCode == (int)HttpStatusCode.PreconditionFailed)
              Console.WriteLine("Precondition failure as expected. Blob's lease does not match");
         else
              throw;
    }

    リース ID を渡さずにリースを取得した BLOB に対して書き込み操作を要求すると、412 エラーが返され、要求は失敗します。UploadTextメソッドを呼び出す前にリース期間が終了したにもかかわらずリース ID を渡そうとすると、その要求も 412エラーが返されて失敗します。リースの有効期限とリース ID の管理の詳細については、REST API の「Lease Blob」のドキュメントを参照してください。

    次の BLOB 操作では、ペシミスティック同時実行制御の管理にリースを使用できます。

    · Put Blob

    · Get Blob

    · Get Blob Properties

    · Set Blob Properties

    · Get Blob Metadata

    · Set Blob Metadata

    · Delete Blob

    · Put Block

    · Put Block List

    · Get Block List

    · Put Page

    · Get Page Ranges

    · Snapshot Blob – リースが存在する場合にオプションでリース ID を使用可能

    · Copy Blob – コピー先の BLOB でリースが存在する場合はリース ID が必要

    · Abort Copy Blob – コピー先の BLOB で無制限のリースが存在する場合はリース ID が必要

    · Lease Blob

    コンテナーでのペシミスティック同時実行制御

    コンテナーのリースでは、BLOB と同じく、排他的書き込み/共有読み取り、排他的書き込み/排他的読み取り、共有書き込み/排他的読み取りのそれぞれの同期戦略がサポートされています。ただし、BLOB とは異なり、削除操作では Storage サービスが強制的に排他的操作を適用します。有効なリースを使用してコンテナーを削除する場合、クライアントは削除要求時に有効なリース ID を保持している必要があります。他のコンテナー操作ではすべてリース ID は不要で、リースが取得されたコンテナーで正常に行われます。この場合、各操作は共有操作になります。更新操作 (put または set) または読み込み操作を排他的に行う必要がある場合、開発者は、すべてのクライアントでリース ID を使用し、また有効なリース ID を持つクライアントは同時に 1 つのみになるようにする必要があります。

    次のコンテナー操作では、ペシミスティック同時実行制御の管理にリースを使用できます。

    · Delete Container

    · Get Container Properties

    · Get Container Metadata

    · Set Container Metadata

    · Get Container ACL

    · Set Container ACL

    · Lease Container

    詳細については、次のページをご覧ください。

    - BLOB サービス操作の条件ヘッダーの指定

    - Lease Container

    - Lease Blob

    Table サービスで同時実行制御を管理する

    Table サービスでは、作業にエンティティを使用している場合、オプティミスティック同時実行制御が既定の動作として適用されます。一方、BLOB サービスの場合は、明示的にオプティミスティック同時実行制御を確認するように選択する必要があります。この他に、Table サービスではエンティティの同時実行制御しか管理できませんが、BLOB サービスではコンテナーと BLOB の両方の同時実行制御を管理できるという違いがあります。

    オプティミスティック同時実行制御を使用して、Table ストレージ サービスからエンティティを取得した後に他のプロセスがそれを更新していないかどうかを確認する場合、Table サービスがエンティティを返すときに受け取った ETag の値を利用できます。このプロセスの概要は次のとおりです。

    1. Table ストレージ サービスからエンティティを取得します。この応答には ETag の値が含まれていて、Table ストレージ サービスでこのエンティティに関連付けられている現在の識別子を識別する際に使用されます。

    2. サービスに要求を送信したときに手順 1 で受け取った If-Match必須ヘッダーの ETag の値が、エンティティを更新するときに同時に送信されます。

    3. 手順 2 で要求と同時に送信された ETag の値が、エンティティの現在の ETag の値と同一であるかどうかをサービスが確認します。

    4. エンティティの現在の ETag の値が、要求と同時に送信された If-Match必須ヘッダーの ETag の値と異なる場合、サービスはクライアントに 412 エラーを返します。これは、クライアントがこのエンティティを取得した後に、他のプロセスが該当するエンティティを更新したことを示しています。

    5. エンティティの現在の ETag の値が、要求と同時に送信された If-Match必須ヘッダーの ETag の値と等しい場合、または If-Matchヘッダーにワイルドカード文字 (*) が含まれている場合、サービスは要求された処理を実行します。それと同時に、該当するエンティティが更新されたことを示すために、現在の ETag の値を更新します。

    BLOB サービスと異なり、Table サービスではクライアントが更新を要求する際に必ず If-Matchヘッダーを含める必要があります。ただし、クライアントの要求の If-Matchヘッダーにワイルドカード文字 (*) が設定されている場合は、条件なしで更新を強制適用 (最終書き込み者優先戦略) し、同時実行制御の確認を省略することができます。

    次の C# のスニペットは、以前に電子メール アドレスが更新されたときに作成または取得されたユーザー エンティティを示しています。最初の挿入操作または取得操作で、ユーザー オブジェクトに ETag 値が格納されています。このサンプルでは同じオブジェクトのインスタンスを使用するため、置換操作を実行するときに自動的に ETag の値が Table サービスに戻され、サービスが同時実行制御の違反を確認できるようになっています。他のプロセスが Table ストレージでエンティティを更新した場合、該当するエンティティのサービスが HTTP 412 (Precondition Failed) のステータス メッセージを返します。完全なサンプルはこちらのページ (英語)でダウンロードできます。

    try
    {
         customer.Email = "updatedEmail@contoso.org";
         TableOperation replaceCustomer = TableOperation.Replace(customer);
         customerTable.Execute(replaceCustomer);
         Console.WriteLine("Replace operation succeeded.");
    }
    catch (StorageException ex)
    {
         if (ex.RequestInformation.HttpStatusCode == 412)
              Console.WriteLine("Optimistic concurrency violation – entity has changed since it was retrieved.");
         else
              throw;
    }

    同時実行制御を明示的に無効にするには、置換操作を実行する前に、employeeオブジェクトの ETagプロパティを “*” に設定します。

    customer.ETag = “*”;

    次の表は、Table エンティティで ETag の値がどのように使用されるかをまとめたものです。

    操作

    ETag 値を返す

    If-Match 要求ヘッダーが必須

    Query Entities

    ×

    Insert Entity

    ×

    Update Entity

    Merge Entity

    Delete Entity

    ×

    Insert Entity/Replace Entity

    ×

    Insert Entity/Merge Entity

    ×

    Insert Entity/Replace Entityおよび Insert Entity/Merge Entityの各操作では、ETag の値が Table サービスに送信されないため、同時実行制御は行われません。

    一般的に、スケーラブルなアプリケーションを開発するときには、Table に対してオプティミスティック同時実行制御を行う必要があります。ペシミスティック同時実行制御によるロックが必要な場合、アクセス時に各 Table が指定した BLOB に関連付けられ、Table で操作が��行される前に BLOB に対してリースが取得されます。この手法では、Table で操作が行われる前にアプリケーションがすべてのデータのアクセス経路でリースを確実に取得する必要があります。また、リース期間は最低 15 秒であるため、スケーラビリティについて考慮する必要がある場合には注意が必要です。

    詳細については、次のページをご覧ください。

    - エンティティに対する操作

    Queue サービスで同時実行制御を管理する

    Queue サービスでの同時実行制御について注意が必要なケースとして、複数のクライアントが同一の Queue からメッセージを取得する場合があります。Queue からメッセージを取得するとき、応答にはメッセージと PopReceipt の値が含まれます。この値はメッセージを削除するときに必要です。メッセージは Queue から自動的に削除されることはありませんが、取得された後、visibilitytimeout パラメーターで指定された期間は他のクライアントで表示されなくなります。クライアントは、メッセージを取得した後、応答の TimeNextVisible 要素で指定された時間内に処理を完了し、このメッセージを削除します。この時間は visibilitytimeout パラメーターにより決定されます。visibilitytimeout の値はメッセージが取得されるタイミングで追加され、この値を基に TimeNextVisible の値が決定されます。

    Queue サービスでは、オプティミスティックおよびペシミスティックのいずれの同時実行制御もサポートされていません。このため、Queue からメッセージを取得して処理するクライアントは、元の条件が変わらないようにメッセージを処理する必要があります。SetQueueServiceProperties、SetQueueMetaData、SetQueueACL、UpdateMessage などの更新操作では、最終書き込み者優先戦略が適用されます。

    詳細については、次のページをご覧ください。

    - Queue サービスの REST API

    - Get Messages

    ファイル サービスで同時実行制御を管理する

    ファイル サービスでは、エンドポイントのアクセスに SMB と REST の 2 種類のプロトコルが使用されます。REST サービスではオプティミスティック同時実行制御とペシミスティック同時実行制御のいずれもサポートされておらず、すべての更新操作に最終書き込み者優先戦略が適用されます。ファイル共有をマウントする SMB クライアントではファイル システムのロック機構を使用できるため、ペシミスティック同時実行制御によるロックも含め、共有ファイルへのアクセスの管理が可能です。SMB クライアントがファイルを開くときに、ファイルのアクセス権と共有モードの両方が指定されます。ファイルのアクセス権が「Write」または「Read/Write」に設定され、同時にファイル共有モードが「None」に設定された場合、そのファイルは閉じられるまで SMB クライアントがロックします。SMB クライアントがロックしているファイルで REST 操作を実行しようとすると、REST サービスはステータス コード 409 (Conflict) および「SharingViolation」のエラー コードを返します。

    SMB クライアントがファイルを開いて削除する場合、そのファイルで開かれているハンドルが他のすべての SMB クライアントで閉じられるまで、「Delete Pending」とマークされます。「Delete Pending」状態のファイルで REST 操作を実行しようとすると、REST サービスはステータス コード 409 (Conflict) および SMBDeletePending のエラー コードを返します。ここで、SMB クライアントはファイルが閉じられなくても「Delete Pending」フラグを削除することができるため、ステータス コード 404 (Not Found) が返されることはありません。つまり、ステータス コード 404 (Not Found) が返されるのは、ファイルが削除済みである場合のみです。SMB で「Delete Pending」状態に設定されているファイルは、List Files の結果に含まれないので注意が必要です。また、REST Delete File および REST Delete Directory の各操作はアトミックにコミットされるため、「Delete Pending」状態に設定されることはありません。

    詳細については、次のページをご覧ください。

    - ファイルのロックの管理 (英語)

    まとめと次のステップ

    Microsoft Azure Storage サービスは、ほとんどのオンライン アプリケーションの複雑なニーズに対応しており、同時実行制御やデータの整合性など、設計時に通常想定される主要な項目を再考したり、妥協したりする必要はありません。

    このブログで使用したサンプルの完全版は、次のページでダウンロードできます。

    - Azure Storage での同時実行制御の管理 - サンプル アプリケーション (英語)

    Azure Storage の詳細については、次のページをご覧ください。

    - Microsoft Azure Storage のホーム ページ

    - Azure Storage の概要

    - Storage の入門ガイド: BLOB (英語)Table (英語)Queue (英語)

    - Storage のアーキテクチャ – Azure Storage: 高い整合性を持つ高可用性クラウド ストレージ サービス (英語)

    Azure WebSites の Site Extensions を作成する

    $
    0
    0

    このポストは、9 月 9 日に投稿された Writing a Site Extension for Azure Websitesの翻訳です。

    Azure WebSites の Site Extensions 機能を活用することで、開発者は Azure WebSite 上で実行可能で管理機能が備わった「アプリ」を作成することができます。また、この拡張機能は Site Extensions ギャラリー (英語)に公開して、他のユーザーにインストールして使用してもらうことができます。Site Extensions の作成方法は一般的な WebSites の作成方法とほとんど同じですが、WebSites へのコードのインストール方法が大きく異なります。

    SCM サイト

    Azure WebSites を作成すると、対応する SCM (Site Control Manager) サイトも作成されます。SCM サイトは管理やデバッグに使用し、通信は常に SSL 経由で行います。SCM サイトの URL は常に既定のホスト名に「scm」を加えたものになり、たとえば WebSites の URL が「demo.azurewebsites.net」の場合は「demo.scm.azurewebsites.net」となります。WebSites にインストールされている Site Extensions には、この URL からアクセスできます。

    Site Extensions を作成してローカルでテストする

    ここでは例として、Visual Studio 2013 を使用して既存の Site Extensions である File Counter を ASP.Net MVC アプリケーションとして作成し直します。使用するエディターは Visual Studio 2013 でなくても構いませんので、使い慣れたエディターを使用してください。このサンプルのコードはこちら (英語) から入手できます。

    1. まず、「FileCounterMVC」という名前の ASP.Net Web アプリケーションを新規作成します。[Empty] テンプレートを選択し、[MVC] チェックボックスをオンにします (Visual Studio 2012 の場合は New Project ダイアログで [ASP.Net MVC Empty Project] を選択します)。

    2. ソリューション エクスプローラーの [Controllers] フォルダーを右クリックし、「HomeController」という名前の新しい「MVC 5 Controller – Empty」コントローラーを追加します。

    3. HomeController.cs ファイルが開いたら、下のコードを追加します。if-else 文により、WebSites を Visual Studio 内でローカルに実行できます。Azure WebSites にはパブリック サイトの物理パスが格納される「home」という環境変数があるので、これを利用しています。Site Extensions は SCM サイトの内部から実行されるので、この環境変数からパブリック サイトの物理パスを突き止めることができます。この環境変数が定義されていない場合は、現在の WebSites のルートがこの WebSites のコンテンツ フォルダーであるとみなします。

    using System;
    using System.IO;
    using System.Web.Mvc;

    namespace FileCounterMVC.Controllers
    {
        public class HomeController : Controller
        {
            public ActionResult Index()
            {
                string siteFolder;
                int fileCount;

                if (Environment.GetEnvironmentVariable("home") != null)
                {
                    // Azure の WebSites の物理パスにマッピング
                    siteFolder =
                        Environment.ExpandEnvironmentVariables(@"%HOME%\site\wwwroot");
                }
                else
                {
                    // 現在の WebSites のルートの物理パスにマッピング
                    // ローカル実行が可能
                    siteFolder = Server.MapPath("/");
                }

                fileCount =
                    Directory.GetFiles(
                        siteFolder,
                        "*.*",
                        SearchOption.AllDirectories).Length;

                return View(model: fileCount);
            }
        }
    }

    4. Index() メソッド内で右クリックし、[Add View] をクリックして、ビューを追加します。Add View ダイアログの [Use a Layout Page] チェックボックスをオフにして [Add] をクリックします。これで「Index.cshtml」という名前のビューが追加されます。

    5. 次のコードをコピーして Index ビューに貼り付けます。

    @model int
    @{Layout = null;}
    <!DOCTYPE html>
    <html>
    <head>
        <meta name="viewport" content="width=device-width" />
        <title>File Counter MVC</title>
    </head>
    <body>
        <div>
            <h1>Your site has @Model files!</h1>
        </div>
    </body>
    </html>

    6. F5 キーを押してアプリを IIS Express でローカル実行し、正しく動作するか検証します。WebSites フォルダーをローカルの WebSites フォルダーにマッピングしたので、FileCounterMVC アプリのファイル数が表示されます。

     

    プライベート Site Extensions を Azure WebSites でテストする

    ローカルでの Site Extensions のテストが済んだので、次にこれをプライベート Site Extensions として Azure WebSites にインストールします。

    1. applicationHost.xdt ファイルをプロジェクト ルートに追加します。このファイルによって、applicationHost.config ファイルを SCM サイト用に変換する際に、アプリに必要な変更を加えることができます。通常は以下のような内容の applicationHost.xdt ファイルで十分です (アプリケーション パスの変更を除く)。さらに詳しい情報については、こちらを参照してください。ソリューション エクスプローラーでこのファイルを右クリックし、プロパティに移動して [Copy to Output Directory] に [Copy if newer] を設定します。

    <?xml version="1.0" encoding="utf-8" ?> 
    <configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
      <system.applicationHost>
        <sites>
          <site name="%XDT_SCMSITENAME%" xdt:Locator="Match(name)">
            <application path="/filecounterMVC" applicationPool="%XDT_APPPOOLNAME%" xdt:Transform="Insert">
              <virtualDirectory path="/" physicalPath="%XDT_EXTENSIONPATH%" />
            </application>
          </site>
        </sites>
      </system.applicationHost>
    </configuration>

    2. 「build.cmd」という名前のファイルをプロジェクト ルートに追加し、次の内容をコピーして貼り付けます。これはサンプルのビルド スクリプトです。このスクリプトを使用してアプリを簡単にビルドし、WebSites で実行可能なファイル形式に変換して「..\artifacts」フォルダーに格納できます。ちなみに、このスクリプトは Visual Studio で [Web Application project] を右クリックし、[publish]、[To File System] の順にクリックするのと同等の処理を実行します。ファイルを追加したら、コマンド プロンプトから build.cmd でビルドを実行します。

    if not exist ..\artifacts mkdir ..\artifacts
    "%windir%\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe" FileCounterMVC.csproj /p:webpublishmethod=filesystem;PublishUrl=..\artifacts /t:WebFileSystemPublish

    3. プロジェクトのビルドが終了したら、SCM サイトにアップロードしてテストを行います。ブラウザーを起動して https://sitename.scm.azurewebsites.net/debugconsole にアクセスするか、https://sitename.scm.azurewebsites.net にアクセスして [Debug Console] リンクをクリックします。

    4. デバッグ コンソールから「mkdir SiteExtensions\FileCounterMVC」を実行し、FileCounterMVC ディレクトリに移動します。ブラウザーが Chrome や Firefox の場合は、artifacts フォルダーの中身をドラッグ アンド ドロップできます (下を参照)。IE の場合は、artifacts フォルダーの中身を zip 形式に圧縮する必要があります。そしてこれを画面右側にドラッグ アンド ドロップすると、デバック コンソールによって展開されます。

    5. コピーが完了したら WebSites を再起動する必要があります。ページ上部の [Site extensions] タブをクリックし、[Restart Site] ボタンをクリックすると簡単に再起動できます。

    6. これで、FileCounterMVC の Site Extensions のプライベート版のインストールが完了しました。https://<sitename>.scm.azurewebsites.net/FileCounterMVC にアクセスすると、この Site Extensions によってパブリック サイト (SCM サイトではない) のファイル数が表示されます。これはファイル パスを環境変数「home」にマッピングしたためです。パブリック サイトのファイルを追加または削除してファイル カウンターを更新すると、最新のファイル数が表示されます。URL がどのように「/FileCounterMVC」にマッピングされているかを確認するには、デバッグ コンソールを開いて生成された applicationHost.config ファイルの中身を調べます。これにはまず「C:\DWASFiles\Sites\~1<sitename>\Config」に移動し、[Edit] ボタンをクリックして applicationHost.config.base ファイルを開き、<sites> セクションを探します。名前の先頭に「~」が付いているのが SCM サイトです。この WebSites には既にアプリがいくつか存在しますが、これらはプレインストールされた Site Extensions です。WebSites の構成ファイルである applicationHost.config ファイルを開くと、「FileCounterMVC」というエントリがあります (下を参照)。このしくみですが、SCM サイトが読み込まれると、SiteExtensions フォルダーの applicationHost.xdt ファイルを探します。ファイルが見つかると、そのファイルを利用して applicationHost.config.base ファイルを必要な設定が追加された applicationHost.config ファイルに変換するようになっています。よくできていますね。

    <site name="~1ehdemo" id="154213853">
      <!-- その他のアプリは省略-->
      <application path="/filecounterMVC" applicationPool="~1ehdemo">
        <virtualDirectory path="/" physicalPath="D:\home\SiteExtensions\FileCounterMVC" />
      </application>
    </site>

     

    SiteExtensions.net のパブリック Site Extensions ギャラリーに公開する

    プライベート Site Extensions を作成したら、今度はこれを他のユーザーと共有したいと思いませんか? Site Extensions ギャラリーにアップロードすれば、他の Azure WebSites ユーザーもこれを簡単に自分の WebSites にインストールできるようになります。FileCounterMVC を例に、その方法を説明します。

    1. FileCounterMVC.nuspec をアプリケーション ルートに追加します。下の内容をコピーして貼り付け、必要に応じてフィールドを修正します。ファイルを右クリックしてプロパティに移動し、[Copy to Output Directory] に [Copy if newer] を設定します。

    <?xml version="1.0"?>
    <package >
      <metadata>
        <id>filecountermvc</id>
        <title>File Counter MVC</title>
        <version>1.0.1</version>
        <authors>Elliott Hamai</authors>
        <licenseUrl>http://opensource.org/licenses/Apache-2.0</licenseUrl>
        <projectUrl>https://github.com/projectkudu/FileCounterMVC</projectUrl>
        <requireLicenseAcceptance>false</requireLicenseAcceptance>
        <description>A sample mvc Site Extension that counts the number of files in the web root</description>
        <iconUrl>https://raw.githubusercontent.com/projectkudu/FileCounterMVC/master/FileCounter50x50.png</iconUrl>
        <tags>filecounter sample siteextension</tags>
      </metadata>
      <files>
        <file src="**\*.*" target="content" />
      </files>
    </package>

    2. build.cmd を実行してプロジェクトを artifacts フォルダーに再ビルドします。

    3. nuget.exe コマンドライン ユーティリティを http://docs.nuget.org/docs/start-here/installing-nuget (英語)からダウンロードします。

    4. artifacts フォルダーから次のコマンドを実行し、NuGet パッケージ (FileCounterMVC.1.0.1.nupkg) を親ディレクトリに生成します。

    nuget pack FileCounterMVC.nuspec -outputdirectory ..\ –nopackageanalysis

    5. ブラウザーを起動して https://www.siteextensions.net/ (英語) にアクセスします。

    6. ログインするか、または無料アカウントにサインアップし、[Upload Site Extensions] リンクをクリックします。

    7. 先ほど生成した nupkg パッケージを追加し、[Upload] をクリックします。

    8. 次のページで、追加するパッケージに関する情報の確認を求められます。一番下にある [Listed in Search Results] で [Yes] を選択すると、Site Extensions が Site Extensions ギャラリーに公開されます。[Yes] を選択して [Submit] をクリックします。

     

    Azure Site Extensions ギャラリーから Site Extensions をインストールする

    Site Extensions を公開したら、次は WebSites へのインストールです。

    1. デバッグ コンソールを使用して WebSites から FileCounterMVC フォルダーを完全に削除します。

    2. [portal.azure.com]、[Browse Websites]、[Site Name] の順に移動します。

    3. WebSites のブレード下部にある [Extensions] をクリックし、[Add] をクリックします。

    4. 一覧に新しい Site Extensions が表示されるので、それを選択し、規約に同意して [OK] をクリックします。これで Site Extensions がインストールされ、WebSites が再起動します。手作業で行った場合と同じです。

    5. 「Success」と表示されたら、[Installed site extensions] ブレードを開き、[File Counter MVC] をクリックします。開いたブレードの [BROWSE] をクリックして Site Extensions に移動し、正しく機能するか確認します。

     

    MyGet のプライベート Site Extensions ギャラリーに公開する

    Site Extensions を一般公開したくない場合や、SiteExtensions.net 以外で全体のワークフローをテストしたい場合は、プライベート フィードを使用するように構成できます。ここではプライベート MyGet フィードを使用して Site Extensions をホストする手順を説明します。

    1. ブラウザーを起動して、http://www.myget.org/ (英語)にアクセスします。

    2. ログインするか、アカウントをお持ちでない場合は新規でサインアップしてください。

    3. フィードを新規作成し、[Add a package] ボタンをクリックします。

    4. 先に作成した nupkg パッケージを選択して、[Add] をクリックします。

    5. feed details ページに移動し、フィードの URL をメモします。

    6. https://portal.azure.comに戻ります。WebSites のブレードを開いて [Site Settings] をクリックします。

    7. [Site Settings] ブレードで「SCM_SITEEXTENSIONS_FEED_URL」という名前のアプリ設定を追加し、値として MyGet フィードを設定します。[Save] をクリックします。

    8. 「Success」メッセージが表示されたら [Site] ブレードの [Extensions] をクリックし、先ほどと同じように Site Extensions を追加します。Site Extensions の一覧には、フィードで使用可能な Site Extensions と特別な Site Extensions しか表示されなくなったため、以前よりも短くなっています。


    Azure Media Services の実績豊かなライブ ストリーミング プラットフォームを発表

    $
    0
    0

    このポストは、9 月 10 日に投稿された Azure Media Services Launches Proven Live Streaming Platformの翻訳です。

    マイクロソフトはこのたび、Azure Media Services の Live Streaming および Content Protection のパブリック プレビューの提供を開始しました。これは、2014 年冬季オリンピックや 2014 FIFA ワールド カップの映像を世界中の視聴者にシームレスに配信するために何十社もの大手放送局が採用したインターネット スケールのストリーミング ソリューションであり、そのパブリック プレビューが Azure をご利用のすべてのお客様を対象にリリースされます。これにより皆様は今後あらゆる規模のライブ イベントを、オリンピックやワールド カップといった大規模イベントと同じ水準のスケーラビリティ、稼働率、信頼性でストリーミング配信することができます。また、プレミアム動画コンテンツの保護を目的とした新しいサービスとして、Content Protection の提供も開始します。Content Protection は、マイクロソフトの PlayReady ライセンス配信および AES 128 ビット キー配信サービスを使用した静的暗号化と動的暗号化の機能を特長としています。

    処理の高速化と課金の効率化

    今回、Azure Media Services のエンコーディング処理の高速化と課金の効率化も実現されています。Azure Media Encoder が強化され、最上級のメディア エンコーディング機能を搭載し、出力サイズ (GB) 単位での課金が可能になりました。旧バージョンのエンコーダーでは入力サイズと出力サイズの両方を合わせた単位での課金でしたが、今回、課金対象が出力サイズのみとなったことで、すべてのお客様に格安の料金でご利用いただけるようになりました。また、Basic、Standard、Premium の各レベルのエンコーディング占有ユニット経由でのエンコーディングのスピードがさらに高速になりました。柔軟性が向上し、個々のワークフローのニーズに合ったエンコーディング性能を選択できるようになっています。

    Azure Media Indexer

    他にも、Azure Media Indexer の一般提供を発表しました。Azure Media Indexer は音声ファイルや動画ファイルをすばやく検索できる、他にはない強力なコンテンツ抽出サービスです。メディア ライブラリを即座にインデックス化して、後からキーワードや語句やクリップを検索したり、音声ファイルや動画ファイルの音声トラックのトランスクリプトを作成したりすることができます。

    新規パートナーとクライアント プレイヤーを追加

    マイクロソフトの堅牢なパートナー ネットワークに、ワークフロー パートナー数社と複数のクライアント プレイヤーが新たに追加されました。まず、Azure Media Services と Telestream 社の Wirecast (英語)が完全統合され、ビルトインの送信先によって Wirecast のライブ ストリーミング ソフトウェアから Azure へコンテンツを簡単にすばやく送信できるようになりました。また、Newtek 社の Tricaster (英語)と Azure プラットフォームが統合されました。これにより、Tricaster の高い品質と Azure Media Services のスケーラビリティと信頼性を融合したサービスをお客様に提供できるようになりました。さらに、Cires 21 (英語)と Azure Media Services の連携により、ライブ チャンネルの正常性を簡単にモニタリングすることが可能になりました。広く普及している JW Player (英語)と Azure の完全統合により、事実上すべてのプラットフォームで動画再生環境をすばやく構築できます。

    アムステルダムで開催される IBC (英語)では、5 つのセッションで今回の発表に関する情報を皆様にお伝えする予定です。アムステルダムにお越しの際はぜひご来場ください! 今後もここで取り上げた話題の続報をブログに投稿していく予定です。さらなる詳細については、このブログを随時チェックしてください。また、Azure Media Servicesのページや Media Services の料金詳細ページもぜひご覧ください。これらの新サービスは Azure 管理ポータルでお試しいただけます。ぜひご利用ください。

    Apiphany によるひらめき: Azure API Management の一般提供を開始

    $
    0
    0

    このポストは、9 月 10 日に投稿された The apiphany epiphany: GA’ing Azure API Managementの翻訳です。

    マイクロソフトは昨年 10 月、ワシントン D.C. に本社を置く、API 管理のスタートアップ企業 Apiphany 社の買収を発表しました。今回、この買収により導入された Azure API Management のプレビューが終了し、一般提供が開始されて SLA で 99.9% の可用性が保証されるようになります。

    この買収の前に、私は同僚に対して API Management の説明を頻繁に行い、この新機能の価値をすばやく理解してもらえるようにさまざまなケースを想定したシナリオを作成しました。その中で、Apiphany によるひらめきとも呼ぶべき、新しい発見がいくつかありました。これらの発見は、すべてスケーリングおよびパートナーシップの促進に関するものでした。

    パートナー エコシステムはインターネットの速さで成長

    いわゆる「エンタープライズ」と言われる企業と共同で、またはその企業で仕事をした経験のある、IT ビジネスに携わる人ならだれでも、企業間 (B2B) プロジェクトにかかわるときには、プロジェクトの遂行プロセスが以前から変わっていないことにお気付きになると思います。通常、こうしたプロジェクトは両社の重役や経営幹部レベルの交渉から始まり、契約を作成して、ようやく API を構築して相手企業が使用できるように公開します。これはまったく新しいことではなく、数十年も前から変わっていません。このようなやり方は、過去のお客様や従業員の例を見返すと枚挙に暇がありません。

    しかし、中には変化したこともあります。現在、ビジネスが変化する速度はますます速くなっています。このため、より迅速な対応が求められ、パートナーシップを短期間で有機的に形成する必要があります。SaaS エコシステムが爆発的に広まっていること、そして企業が最適な成長ソリューションをすばやく採用するようになっていることにより、統合作業は企業の開発者にとって朝食をとるように当たり前のことになっています。また、パートナーが大企業ではない場合、1 人の開発者が担当し、最初から行き詰まっていることもあります。

    大規模になっている現在のスケールに適応したパートナーシップを形成するうえで、俊敏性とオープン性への要求はさまざまな課題のもととなっています。その例を次に示します。

    • API 自体とその動作についてパートナーのチームでトレーニングを行い迅速に理解を深めてもらうにはどのようにすればよいか。
    • 自社にアクセスする数千、数万、または数十万という数のパートナーをどのようにして管理するか。
    • パートナー側の導入プログラムの成否をどのように把握するか。
    • 基盤となる中核のミッション クリティカルなシステムを不正使用や攻撃からどのようにして保護するか。

    Azure API Management には次のような機能があるため、上記の問題すべての解決に役立ちます。

    • 動的に生成される API のドキュメントおよびインタラクティブな API コンソールを開発者ポータルで提供しているため、非常に短い期間でパートナーが業務に活用できます。
    • サイン アップや登録のほか、API やドキュ���ントに対するグループ単位のアクセス制御をパートナー自身が行えます。
    • 包括的な分析機能により、API の使用状況、パフォーマンス、正常性、およびパートナーの使用状況を確認できます。
    • ポリシー システムを構成することができるため、アプリケーションで帯域幅やクォータの制限などが行えます。

    ビジネスとしての API

    API は世に出てから、さまざまなビジネス モデルのトランザクションで利用されるようになりました。こうした重要な API は、現代のビジネスの成長にとって中核的な役割を果たしています。API の機能は、一般的に月額のサブスクリプション制または従量課金制で販売されます。この分野での課題は、パートナーが顧客である点以外は先に述べたこととまったく同様です。

    API Management は、そのようなビジネス モデルにとって重要な課題に対応する高可用性ソリューションを提供します。Azure API Management の拡張 REST API を使用すれば、利用中のコマース プラットフォームと統合し、ビジネスを収益化することも簡単です。

    社内での俊敏性とモバイル デバイス対応

    一般的に、顧客のほかに社内の部署や従業員もパートナーとなります。存続期間の長さにかかわらず、ほとんどの企業には非常に多数の内部システムや API が存在し、それぞれに貴重なデータが含まれています。従来は、野心的な社内起業家や同種の部署が特定の問題を解決するのに必要なデータやサービスへのアクセス許可を取得する際に、多くの障害がありました。手続きがお役所的で時間の無駄が多かったり、保護やセキュリティ対策が不十分だったり、ドキュメントがろくになかったりというような状況で、そもそも各パートナーが API の存在を知ることができるという無理な前提に頼っていました。

    さらに、モバイル アプリ対応への要求により企業内で新しい API が指数関数的に増加しているため、API の管理に対するニーズも高まっています。Azure API Management は社内の API の標準化および強力なプロジェクション機能を持つターンキー ソリューションであり、旧式の API を最新のもののように変更し、モバイル アプリに対応させることができます。

    実際に、既に Azure API Management を大々的に採用して社内でのビジネスの俊敏性やサービスの検索性を大幅に向上させ、インターネットの速さで企業間の共同作業を実現している企業があります。

    一般提供開始により 99.9% の SLA を保証、その他の新機能も

    まだ API Management をご利用経験でないお客様は、ぜひこれを機に導入をご検討ください。今回の一般提供開始により、Standard レベルでは SLA で 99.9% の可用性が保証されます。また、Developer レベルの一般提供料金は 99 ドルと発表されていましたが、その半額の 49 ドルに固定されます。

    さらに、開発者ポータルのインタラクティブなコンソールで新たに OAuth 2.0 がサポートされ、OAuth による認証をサポートするすべての API がサポートされるようになりました。

    API Management についてさらに詳細な情報をご希望の方は、Azure API Management の入門用チュートリアル (英語)をお読みください。

    また、Scott Hanselman と共同で Azure Friday シリーズのビデオを作成しました。このサービスをすばやくご理解いただける内容となっていますので、こちらもご覧ください。

     

    Azure API Management 101 (英語)– 新しい Azure API Management サービスについて概説しています。Web サービスを既にご利用のお客様には、外部公開用の Web サービスで API Management がどのように役立つかをご説明します。

     

    Azure API Management 102 (英語)– 外部公開用の API のカスタマイズ方法、開発者ポータルの詳細、およびポータルの外観を企業のブランドに合わせて変更する方法などのカスタマイズ オプションについて説明しています。

     

    Azure API Management 103 (英語) - お客様の API に適用可能な変換機能や、パートナーと API 発行者の両方が使用可能な分析機能など、Azure API Management の機能についてさらに詳しく説明しています。

    データ保護について知っておくべき情報

    $
    0
    0

    このポストは、9 月 9 日に投稿された Everything You Ever Wanted to Know About Data Protection and Moreの翻訳です。

    Azure に保管されているデータは、多層型のセキュリティ テクノロジ、さまざまな運用手順、コンプライアンス ポリシーを通して、機密性と整合性が確保されています。新しいホワイト ペーパーでは、構造化データ、非構造化データ、転送中データ、保存中データなど、Azure のあらゆる層の重要データの保護について詳細な情報を提供しています。以下についての詳しい説明がご覧いただけます。

    • Storage、SQL Database、Azure Active Directory のデータ
    • Storage および SQL Database におけるアクセス制御
    • 組み込みのデータ セキュリティおよび管理機能
    • その他の暗号化オプション: BitLocker、SQL TDE/CLE、Azure RMS
    • 冗長化とバックアップ
    • プライバシーと説明責任

    ぜひ今すぐ、この Azure のデータ保護の完全ガイドをダウンロードしてご活用ください。

    Azure Media Services の Content Protection (コンテンツ保護) サービスを公開

    $
    0
    0

    このポストは、9 月 10 日に投稿された Announcing public availability of Azure Media Services Content Protection Servicesの翻訳です。

    マイクロソフトは、Azure Media Services の Content Protection サービスをリリースすることを発表しました。この中には、Microsoft PlayReady ライセンス サービスと AES クリア キー配信サービスが含まれています。また、メディア コンテンツのセキュリティ確保と配信において、Microsoft PlayReady、または AES-128 の CBC モードの暗号化のいずれかのオプションを選択できます。さらに、暗号化のタイミングは、配信時 (動的暗号化) とコンテンツ処理のワークフロー内 (静的暗号化) から選択できます。これらの機能は、Azure 管理ポータルから、または API (英語)を使用して、どなたにもご利用いただけます。それでは、各機能について詳しくご説明します。

    Microsoft PlayReady

    Content Protection サービスのリリースにより、コンテンツの保護に Microsoft PlayReady をご利用いただけるようになりました。Microsoft PlayReady は映像制作者から認められた、多様な機能を持つ暗号化テクノロジであり、著作権侵害からコンテンツを保護します。この新しいサービスは、簡単な構成を行うだけでクラウドから利用可能で、ユーザーがインフラストラクチャを管理したりキーを保護したりする必要はありません。

    Content Protection サービスで Microsoft PlayReady を使用する手順は、まずコンテンツを暗号化し、次に PlayReady のライセンスを使用して各デバイスにコンテンツを配信するという 2 つの段階に分けられます。Microsoft PlayReady は、現在普及しているデバイスのほとんどをサポートしています。

    管理ポータルから使用する方法を簡単に説明しているビデオ (英語)をご用意していますのでご覧ください。さらに、このサービスとお客様のワークフローの統合を支援するために、Azure Media SDK とサンプルを更新しました。下の図は、サービスのアーキテクチャをまとめたものです。

    AES-128 のクリア キーを使用した保護

    プライバシー保護の優先度がそれほど高くなく、また Microsoft PlayReady の堅牢性を必要としない場合もあります。このような場合は AES-128 のクリア キーによる暗号化機能をご利用いただけます。実際にこれが活用されている例としては、企業のビデオや時間的制約が厳しいコンテンツなどがあります。

    AES-128 のクリア キーによる暗号化も PlayReady の場合と同様で、まずコンテンツを暗号化し、次にキーを HTTPS プロトコルでデバイスに渡してコンテンツを再生できるようにします。この種の暗号化処理は、iOS や Android などのデバイスですぐに利用できるかたちでサポートされていて、特殊な SDK を使用する必要はありません。今回のリリースによって、この機能をすべてのお客様にご利用いただけるようになります。

    このクリア キーのサービスを Azure 管理ポータルから使用する方法を簡単に説明しているビデオ (英語)もご用意していますので、ぜひご覧ください。PlayReady とまったく同様に、この機能には SDK や REST API からもアクセスできます。下の図は、サービスのアーキテクチャをまとめたものです。

    入手方法と料金

    前述のとおり、このサービスはすべての Azure ユーザーの皆様にご利用いただけます。このサービスの目標は、割安な料金で業界標準のコンテンツ保護機能を皆様にご活用いただくことです。料金の詳細は、Azure の料金詳細ページでご確認ください。

    このサービスは、ポータルからログインするか、SDK をダウンロードするだけで利用を開始できます。関連ページのリンクをご紹介しますので、こちらもご利用ください。

    Azure Media Services での高速エンコード処理

    $
    0
    0

    このポストは、9 月 10 日に投稿された High Speed Encoding with Azure Media Servicesの翻訳です。

    Azure Media Services ユーザーの皆様から高速エンコード処理へのご要望を非常に多くいただいていましたが、今回、エンコード占有ユニットを 3 種類の中からお選びいただけるようになりました。この記事では、この新しいエンコード占有ユニットの使用法と、それぞれの料金レベルで得られる速度についてご説明します。

    エンコード占有ユニットの種類

    これまでは、Azure Media Services ユーザーの方は、ポータルにログインすると [ENCODING] タブでエンコード占有ユニットの数を変更できました (下図参照)。

    今回、このタブが変更され、新たにエンコード占有ユニットの種類を 3 つの中から選択できるようになりました (下図参照)。

    この 3 種類のエンコード占有ユニットは、それぞれ Basic、Standard、Premium という名前が付けられています。ユーザーはそのいずれかを選択し、さらに占有ユニットの数をスライダーで変更することができます (ただしアカウントのクォータで最大値が制限されます)。Media Services アカウントへの変更操作は、[SAVE] をクリックすると即座に適用されます。

    既に処理が実行されているエンコード タスクは、タスク開始時にアカウントに割り当てられていた占有ユニットのレベルに基づいたパフォーマンスが処理完了まで適用されますので、この点にご注意ください。占有ユニットの変更が適用された後に処理が開始されたエンコード タスクには、そのアカウントの変更後の占有ユニットが適用されます。

    パフォーマンスについては、Basic レベルの占有ユニットでは従来と同程度です。Standard レベルでは最大で Basic レベルの 2 倍、Premium レベルでは Basic レベルの 4 倍以上の速度が得られます。

    実際のパフォーマンスは、入力されるコンテンツと選択されたエンコード処理のプロファイルにより決まります。

    料金

    エンコード占有ユニットの料金は、Media Services の料金詳細ページでご確認いただけます。このサービスの請求は月単位で行われますが、使用料金は 1 日のうちに該当するアカウントで使用された占有ユニットの最大数に基づき、日割りで計算されます。この料金の計算には UTC 時間が使用されますます。具体的な計算の例を以下の表にまとめましたので、参考にご利用ください。

    料金の X、Y、Z は、それぞれ Basic、Standard、Premium の各占有ユニットの料金を表しています。

    使用例 (時刻は UTC 時間)

    料金

    説明

    Basic の占有ユニットの数を午前 10 時に 0 から 10 に変更し、同日午後 8 時に再度 0 に戻した場合

    (X/31) × 10

    Basic の占有ユニットの 1 日あたりの料金は (X/31)。この日の最大占有ユニット数は 10。

    Basic の占有ユニットの数を午前 10 時に 0 から 5 に変更し、同日正午に 5 から 20 に変更し、さらに同日午後 9 時に 0 に戻した場合

    (X/31) × 20

    Basic 占有ユニットの 1 日あたりの料金は (X/31)。この日の最大占有ユニット数は 20。

    Basic の占有ユニットの数を午後 10 時に 0 から 5 に変更し、翌日午前 9 時に再度 0 に戻した場合

    ((X/31) × 5) + ((X/31) × 5)

    Basic の占有ユニットの 1 日あたりの料金は (X/31)。各日の最大占有ユニット数は 5。使用期間は 2 日間。

    Basic の占有ユニットの数を午後 10 時に 0 から 8 に変更し、翌日午前 9 時に 8 から 5 に変更し、その日の正午に 5 から 0 に戻した場合

    ((X/31) × 8) + ((X/31) × 8)

    Basic の占有ユニットの 1 日あたりの料金は (X/31)。各日の最大占有ユニット数は 8、使用期間は 2 日間。

    Basic の占有ユニットの数を午前 10 時に 0 から 10 に変更し、同日午後 8 時にそれを Standard の占有ユニットに変更し、同日午後 10 時に 0 に戻した場合

    ((X/31) × 10) + ((Y/31) × 10)

    Basic の占有ユニットの 1 日あたりの料金は (X/31)。Standard の占有ユニットの 1 日あたりの料金は (Y/31)。この日の各料金レベルの最大占有ユニット数は 10 (1 日の中で使用した両方の種類の占有ユニットの料金がそれぞれ計上されます)。

    注: 日割りの使用料金は、2 月も含め、すべての月で月額料金を 31 で除した額です。

    API

    現時点では、Media Services アカウントで API から占有ユニットを変更することは不可能です。変更操作は Azure 管理ポータルから行う必要があります。今後、API からでも変更を行えるようにする予定ですので、リリースをご期待ください。

    おわりに

    最後に、過去数か月間高パフォーマンスの占有ユニットのテストにご協力くださったすべてのお客様に感謝を申し上げます。ここで、高い評価を得ている企業ユーザー (Blinkbox (英語)、Jon Robinson 氏) の声をご紹介します。

    「クラウドは水平方向へのスケーリング能力に優れていますが、時にはスピードのみが求められることもあります。新たに導入された Premium のエンコード占有ユニットは、このニーズに確かに応えてくれました。まさに私たちのビジネスで必要としていたものでした。この結果には非常に満足しています。」

    Viewing all 711 articles
    Browse latest View live


    <script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>