June 2018

Volume 33 Number 6

データ ポイント - 大きな API を Azure Functions に置き換える

によってJulie Lerman |年 6 月 2018

コードのダウンロードで使用可能なmsdn.com/magazine/0618magcodeです。

戻る 2015 と 2016 で取り上げたいくつかの列 Azure DocumentDB の対話を Node.js Web API です。関連する多くが発生しました。得ました documentdb Node.js SDK の利点が設計されていますが、まだ多数のロジックを記述しました。DocumentDB アカウント、データベースとコレクションを表すオブジェクトを構築するためのロジックが発生しました。クエリを作成し、それらを実行するコードが発生しました: 非同期呼び出しのレイヤー。可能なクエリを作成し、データベース内のデータを更新するには、マイ アプリケーション nice の小さな API を記述することができました。

列ではより新しい、した提携している Azure の機能を Azure に存在し、その他の Azure テクノロジとシームレスに統合する Microsoft のサーバーなしの Api です。これらの統合の 1 つは、Azure Cosmos DB に発展する Azure DocumentDB データ ストレージとです。

古い Node.js Api の振り返りし、でした取り除くことが、コードの約 98 %azure 関数に変換することによって実現 Azure 関数の場合、データを読み書きする Cosmos DB での統合の数を記述する必要です。作成したコードのほとんどが、データベースとやり取りするが気今すぐ Azure 関数のすべての作業をするためです。接続文字列を識別する構成よりも詳細 nothing で — データをデータベースからまたはに移動するかどうか: して関連のクエリでは、関数の組み込み機能が他の部分のです。

Visual Studio Code と拡張機能を使用します。

以前の Azure 関数の列で、Azure ポータルで直接提携です。お使いのコンピューター上で開発し、Azure に展開する Azure 関数の主要なツールを使用することもできます。ツール (バージョン 1) の最初のバージョンが Windows だけで、.NET 4.7.1 を使用して実行またはそれ以降、これらのツールを使用するための Visual Studio 2017 拡張機能があるとします。

これに対し、バージョン 2 の Azure 関数のコア ツール .NET Core で実行されるクロスプラット フォームであり、Visual Studio Code 拡張機能では、これを容易に操作できます。 (bit.ly/2H7VmxH)。この記事の内容を処理しますバージョンです。ツールと拡張機能の両方がプレビューであることを注意してください。

この拡張機能の操作で、Visual Studio Code 拡張機能の注意事項がありますが、いくつかのセットアップ要件があります。Windows、macOS または Linux の場合も、システムに既に Visual Studio のコードとその前提条件をインストールしていることを前提としています。

拡張機能では、簡単にするには Azure 関数を含む、関数を作成します (のさまざまなテンプレートから選択)、新しい Azure 関数アプリ フォルダーを作成できます。 実行し、それらをローカルでデバッグし Azure に配置します。したら感心非常に困難な作業では 1 回、行う必要があるは、コードに焦点を — サーバーなしのコンピューティングの promise があります。

Azure 関数の拡張機能だけでなくすればも Azure Cosmos DB 拡張機能をインストールの Visual Studio Code (bit.ly/2HkPfDE)。コレクションと、既存のデータベースのドキュメントを確認するを使用しているが、新しい Cosmos DB アカウント、データベースとコレクションを作成するだけでなく取得しドキュメントを更新し、ドキュメントを新規作成する、拡張機能を使用することもできます。既存の JSON ファイルを指定されたドキュメントをインポートできる修正案に配置したしていつかそこに表示することを期待します。

これらの拡張機能の両方を使用する重要なため、Azure アカウントの拡張機能をインストールした Visual Studio のコードから Azure アカウントにサインインする機能は、(bit.ly/2k1phdp)。

便利なチュートリアルがある各これら 3 つの拡張機能にリンクした各ページで理解できる使用を開始しています。すべてのコードおよび Node.js ソリューションに依存した依存関係を構築する場合よりも、Azure 関数の対応する、Node.js Web API を作成するのにはどれほど簡単に表示するために明るいウォークスルーをここでを行います。、ただし、まだを使用する JavaScript の言語として関数をします。Visual Studio のコードには、JavaScript および Node.js のサポートが組み込まれています。

Azure 関数のプロジェクトを作成します。

3 つの拡張機能とその依存関係をインストールすると、今度は my API を再作成します。マイ コンピューター]、Visual Studio のコードで開いて、NinjaFunctions をという名前の新しいフォルダーを作成して起動しました。いる場合は、Azure 関数のフォルダーにフォルダーを有効にする Azure 関数の拡張機能を使用して作業を開始します。アイコンをクリックして、新しいプロジェクトの作成に似ています、フォルダー)、Azure 関数ペインのツールバーで、これを行うことができます。既に開かれている NinjaFunctions フォルダーおよび言語を選択する画面の指示に従います。JavaScript を選択します。拡張機能フォルダーに、関数に必要ないくつかのファイルを追加し、Git リポジトリを初期化します。図 1に追加 (.vscode、.gitignore、host.json および local.settings.json) ファイルと同様に、Azure 関数の出力ウィンドウでこのプロセスの結果を使用して IDE を示しています。確認できる、クラウド ベースの Azure 関数アプリのすべてを一覧表示する Azure 関数ペイン、次に、my Cosmos DB データベースでは、その拡張機能に感謝します。

新しい Azure 関数のプロジェクトの作成後に Visual Studio Code の図 1

プロジェクトで Azure の関数の作成

セットアップ、プロジェクトでは、最初の関数を作成する時間を勧めします。この関数は、JSON ファイルを Cosmos DB データベースにインポートされます。新しいデータベースのアカウント (lermandatapoints) 既に作成しましたが、データベースまたはコレクションはまだ作成していないことに注意してください。あっ Azure Cosmos DB 拡張機能を使用しています。拡張機能] ウィンドウで、データベースを作成し、メニューからデータベースの作成を選択する Cosmos DB アカウント右クリックします。型が表示されたら、新しい名前 (私は、当然は Ninjas) このデータベースが既定の設定を使用して Azure アカウントで作成されます。自由に必要な場合、ポータルでこれらの設定を調整できます。最後に、によって、新しいデータベースを右クリックし、コレクションの作成を選択し、その名前を指定するデータベースのコレクションを作成します。退屈され、自分のコレクション、Ninjas も呼び出しを行います。パーティション キーをこのほとんどのデモについては空白にできます。

最初の関数の目的は、JSON 形式で指定された既存のドキュメントを読み取るし、新しいコレクションに追加します。  この列に自分の最新の Azure 機能記事が読んだ場合、いずれかのコードと呼びます"を作成する Azure 関数をことができます読み取りから Cosmos DB でほぼなし"に説明した可能性があります (msdn.com/magazine/mt829268)。この場合、コードをほとんど含まない Cosmos DB に書き込むことのできる関数を作成すればします。

フロント エンドを構築するはされません。代わりに、使用、Postman アプリケーション my Api への呼び出しを作成して、メッセージの本文としての JSON ドキュメントを渡します。同様に、Fiddler で同じ実行できます。

Azure 関数の拡張機能] ウィンドウに戻すには、プロジェクト フォルダーに新しい関数を作成する Create Function アイコンをクリックします。この関数を HTTP 要求に応答する、HTTP トリガーを選択して、し、名前を提供します。私は、AddNinjaDocument です。次の画面の指示、ように関数匿名資格情報を指定せずにテストする方が簡単です。

この操作に応答して、拡張機能では、3 つのファイルを新しいフォルダーが作成します。

• function.json は、関数の既定の構成が含まれています

ロジックの • index.js ファイル

• サンプル データ ファイル

関数を構成します。

年 2018年 1 月コラム、"を作成する Azure 関数への対話で Cosmos DB"で作成された関数と同様に (msdn.com/magazine/mt814991)、この関数は Cosmos DB データベースへのデータを出力します。以前の記事でこの統合を構成するポータルを使用し、ポータルでは、選択肢を書いた function.json ファイルにします。このとき、定義します構成を手動で function.json でします。開いているファイルわかります既に定義されている、2 つの統合、という事実に基づいて HTTP トリガー テンプレートが使用されました。2 番目の統合の後にコンマを追加し、構成ではこの cosmosDB、データベース、統合 (cosmosDB) の種類、データベースとコレクションの名前、接続の設定、および方向に送信するドキュメントの名前を指定し、コピー(データベースに送信) の統合の。

{
  "name": "outputDocument",
  "type": "cosmosDB",
  "databaseName": "Ninjas",
  "collectionName": "Ninjas",
  "createIfNotExists": true,
  "connectionStringSetting": "mydbconnection",    
  "direction": "out"
}

Function.json ファイルに書き込むことがないように local.settings.json ファイルで、接続文字列を定義します。Local.settings.json、ローカルの表現です、app.settings.json ファイルは、ポータルに存在し、アプリケーションの機密情報が含まれています。

そのため、ここでは、私だけが言い、接続文字列にある mydbconnection という設定にします。

この設定は、local.settings.json の [値] セクションでは移動します。Cosmos DB の拡張機能] ウィンドウで、Cosmos DB アカウントを右クリックし、json ファイルに貼り付けることで、接続文字列をコピーできます。文字列で開始されます。

"mydbconnection":
"AccountEndpoint=https://yourdb.documents.azure.com/

予定されている拡張機能で、Azure 関数の核となるツール、function.json ファイルで cosmosDB 種類の存在は自動的に実行をローカルでプロジェクトをデバッグするために必要なロジックを持つパッケージをインストールする拡張機能をトリガーします。この時点では、する必要がありますこのパッケージを手動でインストールします。今すぐに操作してみましょう。

ターミナル ウィンドウで、NinjaFunctions、ルート フォルダーを指しているし、次の Azure 機能 CLI コマンドを入力することを確認します。

func extensions install -p Microsoft.Azure.WebJobs.Extensions.CosmosDb -v 3.0.0-beta7

この記事の執筆は現在、ベータ版をインストールすることに注意してください。最新バージョンの NuGet ページを確認するには、手動でインストールが (bit.ly/2EyLNCw)。これは、プロジェクトで機能拡張機能と呼ばれる新しいフォルダーが作成されます (を参照してください図 2)。フォルダーには、プロジェクト ファイルで制御は、.NET 標準 2.0 プロジェクト extensions.csproj です。Csproj コード リストは図 3です。

図 2 に、新しい機能拡張を格納するフォルダー、Cosmos DB の拡張機能

図 3 Cosmos DB 拡張機能への参照で extensions.csproj フォルダー

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <TargetFramework>netstandard2.0</TargetFramework>
      <WarningsAsErrors></WarningsAsErrors>
      <DefaultItemExcludes>**</DefaultItemExcludes>
  </PropertyGroup>
  <ItemGroup>
    <PackageReference Include="Microsoft.Azure.WebJobs.Extensions.CosmosDb"                       Version="3.0.0-beta7" />
    <PackageReference       Include="Microsoft.Azure.WebJobs.Script.ExtensionsMetadataGenerator"       Version="1.0.0-beta2" />
  </ItemGroup>
</Project>

わずかなコードを追加します。

AddNinjaDocuments 関数に戻りましょう。Function.json ファイルは、関数のロジックが存在する場所である index.js ファイルを完了するため、次の手順のすべてのセットが。すべての既定のサンプル コードを削除することができます。関数の本当に必要なは、関数の出力を受信した JSON をバインドするコードです。つまり、Cosmos DB コレクションに送信される新機能。

module.exports = function (context, req) {
  context.bindings.outputDocument=req.body;
  context.done();
};

多少のデバッグ情報をするおくと便利です。そのため、純粋の必要最低限のバージョンではなくには、次のように、既定のサンプル コードの内容全体を置き換えます。

module.exports = function (context, req) {   
  context.log('HTTP request received.');
  try {
    context.bindings.outputDocument = req.body;
  }
  catch (error) {
    context.log(error);
  }
  context.bindings.res = { status: 201, body: "Insert succeeded." };
  context.done();
};

JavaScript コードとはまったく異なります (C#) 関数のコード前の記事では、このキーをメモします。Azure 機能での JavaScript の構造について学習できますbit.ly/2GQ9eJtです。

ランタイムは、関数に渡されるコンテキストを使用して、関数との間のデータが渡すされます。という名前を付け、Cosmos DB function.json 構成では"バインド"outputDocument です。これでバインディングをどのような本文は、受信 HTTP 要求にカプセル化する設定します。バインディングを作成したテンプレートの名前が付いた res 関数の成功をリレーを使用して、HTTP 応答。Context.done メソッドは、関数が完了したことをランタイムに通知します。

Visual Studio のコードで、関数の実行

すべてはそのため、関数は!他のすべてがによって対処アプリケーションの設定、関数の構成と Azure 関数の Api です。さあ、Visual Studio のコードに関数を実行することができます。デバッグ、ブレークポイントを設定および変数を調査することも確実ですが、コマンドを使用してターミナルで行うことができる関数アプリの実行しましょうのみ。

func start

ターミナル ウィンドウで、明るい色の Azure 関数のロゴが表示され、処理情報を出力します。このすべての出力の最後には、関数が実行されている URL 表示されます。プロジェクトに複数の関数がある場合、Url がごとに個別に表示されます。Postman、Fiddler では、この URL を使用して POST 要求を作成します。本文は JSON 内に貼り付けることができます] セクション内の一覧に図 4し、要求を送信します。図 5で要求の URL と本文の応答と共に表示 my Postman UI を示しています。

図 4 JSON コード ドキュメントのデータベースに挿入します。

 

{
    "Name": "Kacy Catanzaro",
    "ServedInOniwaban": false,
    "Clan": "American Ninja Warriors",
    "Equipment": [
      {
        "EquipmentName": "Muscles",
        "EquipmentType": "Tool"
      },
      {
        "EquipmentName": "Spunk",
        "EquipmentType": "Tool"
      }
    ],
    "DateOfBirth": "1/14/1990"
  }

図 5 AddNinjaDocuments 関数を呼び出して要求を作成します。

挿入を確認しています

内の HTTP 応答を while図 5と言うと、すべてうまくは実際には、クラウド内のデータベースに送信されたデータを参照してください。Azure Cosmos DB 拡張機能のおかげでできることを確認する Visual Studio のコードで直接です。最初に、関数のアプリが実行を停止しているかどうかを必ずみましょう。ターミナル ウィンドウで、[ホストをシャット ダウンするには、CTRL + C キーを押します。Ctrl キーを押しながら C キーを押す必要があります、プロンプトを取得する 2 番目の時間は、端末に戻します。

ここで、Cosmos DB 拡張機能で、アカウント、データベース、およびコレクションを展開します。拡張機能のペインで、更新アイコンで表示を更新する必要があります。コレクション内には、追加したドキュメントを表示できます。ように、追加しただけでなく、データが表示されます、エディターで開きますが、Azure Cosmos DB によってメタデータが追加されたことを選択図 6です。

Cosmos DB 拡張機能によって表示される、6、この新しいドキュメントを図します。

次のステップ

この記事に付属するダウンロードには、元の Node.js API から他のメソッドを置き換える、作成した 2 つの以上関数も含まれています。名前の要素とその他の id に基づいたデータを返すでフィルター処理するデータを返す 1 つです。これらのオプションではなく Cosmos DB への出力バインドでは、SQL API を使用してデータベース クエリを定義する入力バインディング。HTTP 応答は、クエリの結果の JSON 表現を順です。

テストし、Azure で関数 [Visual Studio のコードをデバッグしたら後、は、関数をパブリッシュする、Azure アカウントに、また、拡張機能を使用することができます。拡張機能のリリース ノートには、詳細についてを説明します。

見て github.com/julielerman/AureliaDocDB で GitHub リポジトリにも、元の記事からダウンロードすることをお勧めします。API は models フォルダーであり、読み書き可能な呼び出しにより DocumentDB Cosmos DB との統合により、Azure 関数の作成に関連するはるかに多くのコードがあるように表示されます。今後、自分のコードを記述思うを常に検討する Azure 関数防御の最前線としては別の Web API を記述する際に!


Julie Lerman は、バーモント ヒルズ在住の Microsoft Regional Director、Microsoft MVP、ソフトウェア チームの指導者、およびコンサルタントです。世界中のユーザー グループやカンファレンスで、データ アクセスなどのトピックについてプレゼンテーションを行っています。彼女のブログは thedatafarm.com/blog (英語) で、彼女は O'Reilly Media から出版されている『Programming Entity Framework』(2010 年) および『Code First』版 (2011 年)、『DbContext』版 (2012 年) を執筆しています。彼女の Twitter (@julielerman、英語) をフォローして、juliel.me/PS-Videos (英語) で彼女の Pluralsight コースをご覧ください。