試験 70-487 Microsoft Azure とウェブサービスの開発 について

# 概要

試験時間・・・150分(+冒頭オリエンテーション30分)
問題数・・・・40-60問
合格点・・・・700点以上

・日本語公式ページ
https://www.microsoft.com/ja-jp/learning/exam-70-487.aspx

・試験のポリシーと FAQ
https://www.microsoft.com/ja-jp/learning/certification-exam-policies.aspx

試験範囲は以下の通り。

# 範囲

1. データへのアクセス（20〜25％）
2. Entity Frameworkを使用したデータのクエリと操作（20〜25％）
3. Web APIベースのサービスの作成と使用（20〜25％）
4. Webサービスの設計と実装（15-20％）
5. Webアプリケーションとサービスの展開（15-20％）

出題割合は１～３が多い。
以下、個々の範囲を確認。

# データへのアクセス（20〜25％）
1. データアクセス技術の選択
    - アプリケーション要件に基づいて、ADO.NET、Entity Framework、WCF Data Services、Azure Cosmos DBなどのデータアクセステクノロジを選択する
2. キャッシュ処理を実装する
    - 静的データをキャッシュし、ポリシー満了を含むキャッシュポリシーを適用する。
    - CacheDependencyを使用してキャッシュデータをリフレッシュする。
    - 通知を問い合わせる。
    - Redisを使用してキャッシングを実装する
3. トランザクションを実装する
    - System.Transactions名前空間のAPIを使用してトランザクションを管理する。
    - SQL Azure上の分散トランザクションを含む分散トランザクションを実装する。
    - トランザクション分離レベルを指定する
4. Microsoft Azureでデータストレージを実装する
    - Windows Azureのデータストレージにアクセスする。
    - Microsoft Azureでデータストレージメカニズムを選択する。
    - テーブル、キュー、Azure SQL、Cosmos DBなど、 コンテンツ配信ネットワーク（CDN）とAzure File Syncを使用してデータを配信する。
    - 再試行を使用して例外を処理する。
    - Azure SQLでElasticクライアントライブラリを使用する
5. WCFデータサービスの作成と実装
    - リソースを特定する。
    - フィルタリングを実装する。
    - クエリ式を作成する。
    - JSONを含むペイロード形式にアクセスする。
    - データサービスインターセプタとサービスオペレータを使用する。
    - データサービスをバージョンアップする。
    - データサービスプロバイダを実装する。
    - データサービスをホストする。 
    - アクションを使用してサーバー側の動作を実装する

準備用リソース

- [Transaction isolation levels](https://docs.microsoft.com/ja-jp/sql/odbc/reference/develop-app/transaction-isolation-levels?view=sql-server-2017)
- [WCF Data Services](https://docs.microsoft.com/ja-jp/dotnet/framework/data/wcf/index)
- [XML documents and data](https://docs.microsoft.com/ja-jp/dotnet/standard/data/xml/index)

# Entity Frameworkを使用したデータのクエリと操作（20〜25％）
1. Entity Frameworkを使用してデータの照会と操作をする
    - DbContextを使用してデータを照会、更新、および削除する。
    - 遅延実行を使用するクエリを作成する。
    - 遅延読み込みと一括読み込みを実装する。
    - コンパイルされたクエリを作成して実行する。
    - Entity SQLを使用してデータを照会する。
    - グローバルクエリフィルタを作成する
2. Entity Frameworkのデータプロバイダを使用してデータをクエリし、操作する
    - System.Data.EntityClient名前空間のConnection、DataReader、およびCommandオブジェクトを使用してデータをクエリして操作する。
    - 同期操作と非同期操作を実行する。
    - トランザクションを管理（API）する
3. LINQ to Entitiesを使用してデータを照会する
    - LINQ演算子（プロジェクト、スキップ、集計、フィルター、結合など）を使用してデータを照会する。
    - ログクエリ。
    - クエリの境界を実装する
4. ADO.NETを使用してデータを照会し操作する
    - Connection、DataReader、およびCommandオブジェクトを使用してデータを照会および操作する。
    - 同期操作と非同期操作を実行する。
    - トランザクションを管理する
5. Entity Frameworkデータモデルを作成する
    - タイプごとのテーブル、クラスごとのテーブル、階層ごとのテーブルを使用してデータモデルを構造化する。
    - コードを最初に、モデルを最初に、データベースを最初に含めて、データモデルを管理するアプローチを選択して実装する。
    - POCOオブジェクトを実装する。
    - 概念スキーマ定義、ストレージスキーマ定義、およびCSDL、SSDL、MSLなどのマッピング言語を使用してデータモデルを記述する
6. 第三者データベースを使用してEntity Frameworkを実装する
    - MySQLとSQLiteデータベースを使用してEntity Frameworkを実装する。
    - データベース機能の違いを管理する戦略を設計する。
    - Entity Frameworkを使用してON DUPLICATE KEYを含むデータベース固有のテクノロジを活用する

準備用リソース

- [Entity Framework](https://docs.microsoft.com/ja-jp/ef/ef6/index)
- [Loading related entities](https://docs.microsoft.com/ja-jp/ef/ef6/querying/related-data)
- [IQueryable<T> Interface](https://docs.microsoft.com/ja-jp/dotnet/api/system.linq.iqueryable-1?redirectedfrom=MSDN&view=netframework-4.8)

# Web APIベースのサービスの作成と使用（20〜25％）

1. Web APIの設計
    - HTTPアクションでHTTPリソースを定義する。
    - 適切なURIスペースを計画し、ルーティングを使用してURIスペースをマップする。
    - 要件を満たす適切なHTTPメソッドを選択する。
    - 要件を満たすレスポンスに適したWeb APIフォーマットを選択する。
    - HTTPアクションをいつ非同期にするかを計画する
2. Web APIを実装する
    - JSON形式のデータを受け入れる。
    - コンテンツネゴシエーションを使用して異なるデータ形式をクライアントに配信する。
    - データバインディングを処理するアクションとパラメータを定義する。
    - より柔軟なアプリケーションを作成するために依存性の注入を実装する。
    - コントローラの実行を管理するアクションフィルタと例外フィルタを実装する。
    - 非同期アクションと同期アクションを実装する。
    - ストリーミングアクションを実装する。
    - ミドルウェアを実装する
3. Web APIを保護する
    - 認証のためのアイデンティティを実装する。
    - ロール、クレーム、およびカスタム認可を使用して認可を実装する。
    - データ保護APIを実装する。
    - クロスドメイン要求（CORS）を有効にする。
    - クロスサイトリクエスト偽造（XSRF）を防止する。
    - アプリケーションへのアクセスを制御する認可フィルタを実装し拡張する。
4. Web APIのホストと管理
    - IISでWeb APIをホストする。
    - 自分のプロセスでWeb APIを自己ホストする。
    - KestrelでWeb APIをホストする。
    - Windows Azure Web Appでサービスをホストする。
    - Dockerコンテナでサービスをホストする。
    - ストリーミングのためにホストサーバを設定する。
    - ホスティング環境と連携する
5. Web API Webサービスを使用する
    - HttpClientを使用してWeb APIサービスを使用する。
    - 要求を異なる形式で送受信する。
    - 再試行ロジックを処理する。
    - コンテンツネゴシエーションを実装する。
    - Urisとペイロードを構築するためにSwaggerを使用する。
    - AutoRestを使ってクライアントを構築する

準備用リソース

- [Getting started with ASP.NET Web API 2 (C#)](https://docs.microsoft.com/ja-jp/aspnet/web-api/overview/getting-started-with-aspnet-web-api/tutorial-your-first-web-api)
- [Implementing Basic CRUD functionality with the Entity Framework in ASP.NET MVC application](https://docs.microsoft.com/ja-jp/aspnet/mvc/overview/getting-started/getting-started-with-ef-using-mvc/implementing-basic-crud-functionality-with-the-entity-framework-in-asp-net-mvc-application)
- [Json class](https://docs.microsoft.com/ja-jp/dotnet/api/system.web.helpers.json?redirectedfrom=MSDN&view=aspnet-webpages-3.2)

# Webサービスの設計と実装（15-20％）

1. WCFサービスを使用する
    - SvcUtilを使用してプロキシを生成する。
    - サービス参照を作成してプロキシを生成する。
    - チャネルファクトリの作成と実装 構成設定を使用してWCFサービスを構成する。
    - WCFサービスのバインドを作成および構成する。
    - サービスバスエンドポイントを使用してAzureへのバインディングをリレーする。
    - Azureサービスバスリレーと統合する
2. サーバーレスのAzure Webサービスを実装する
    - Logic AppsやAPI Appsを含むApp Servicesを使用してWebサービスをホストする。
    - Azure機能ベースのサービスを設計し実装する。
    - Azureウェブジョブを設計し実装する。
    - サービスファブリックベースのWebサービスの設計と実装する。
    - サーバーレス環境でスケジュールベースの処理を実装する
3. Azureでトラフィック管理を実装する
    - スケーリングを含むAzure Load Balancerを実装する。
    - Azureアプリケーションゲートウェイを実装する。
    - Azure Traffic Managerを実装する。
    - 複数リージョン用デザイン。
    - Azure CDNを利用してWebサービスをキャッシュする。
    - ログ分析を実装する
4. Azure API管理を実装する
    - 証明書、Azure Active Directory、およびOAuthを使用してWebサービスを保護する。
    - シークレット、キャッシング、外部サービス、監視およびスロットルを含むポリシーを定義し実装する。
    - Azure PortalとSwaggerを使用してAPIインターフェイスを定義する。
    - ロギング、災害復旧、複数の地域を使用して実行中のサービスを管理する
5. Webサービスを監視する
    - Azure Event Hubを使用してログとメトリックを収集する。
    - Azure Event Hubs、Stream Analytics、およびMachine Learningを使用してログとメトリックを処理する。
    - Azure App Insightsを使用してWebサービスを監視およびトラブルシューティングする

準備用リソース

- [ASP.NET Web Deployment using Visual Studio: Introduction](https://docs.microsoft.com/ja-jp/aspnet/web-forms/overview/deployment/visual-studio-web-deployment/introduction)
- [How to: Create a Web Deployment Package in Visual Studio](https://docs.microsoft.com/ja-jp/visualstudio/deployment/tutorial-import-publish-settings-iis?view=vs-2017)
- [Installing NuGet](https://docs.microsoft.com/ja-jp/nuget/install-nuget-client-tools)

# Webアプリケーションとサービスの展開（15-20％）

1. 展開戦略を設計する
    - Web Deployを使用して展開する。
    - Visual StudioでWeb公開を使用して展開する。
    - XCopyを使用してWebアプリケーションを展開する。
    - VSTSまたはTFSビルドサーバーからの展開を自動化する。
    - Webアプリケーションをコンテナにデプロイする。
    - 継続的な展開パイプラインを設計する。
    - クラウド同期を使用して展開する
2. Azureの展開戦略を選択する
    - 適切なサービスを決定する。
    - インプレースアップグレードと展開スロットスワップを実行する。
    - ステージング環境を作成する。
    - アップグレードドメインを構成する。
    - 入力エンドポイントと内部エンドポイントを作成と構成する。
    - オペレーティングシステムの構成を指定する。
    - ARMテンプレートを実装してデプロイメントをカスタマイズする。
    - サービスファブリックに展開する。
    - Azureスタックに展開する
3. デプロイするためにWebアプリケーションを設定する
    - 生産モードまたはリリースモードからデバッグモードに切り替える。
    - 構成ファイルを変換する。
    - Azure設定を構成する。
    - アプリケーションシークレットのためにAzure Key Vaultを設定する。
    - Azure App Serviceのデプロイメント資格を設定する
4. NuGetを使用してパッケージを管理する
    - NuGetパッケージを作成して設定する。
    - 既存のNuGetパッケージをインストールして更新する。
    - バージョン管理の競合の問題を解決する。
    - NuGet用のローカルリポジトリキャッシュに接続し、独自のパッケージリポジトリを設定する。
    - NuGetの依存関係を管理する
5. 複数のアプリケーションとサーバー間でアセンブリを共有する
    - 複数のサーバー間でアセンブリを使用する環境を準備する。
    - 強い（一意性を保証された）名前を使用してアセンブリに署名する。
    - アセンブリをグローバルアセンブリキャッシュに展開する。
    - アセンブリのバージョン管理を実装する。
    - アセンブリマニフェストを作成する。
    - アセンブリバインディングのリダイレクトを構成する。
    - クロスプラットフォームライブラリのネットスタンダードをターゲットにする

準備用リソース

- [ASP.NET Web Deployment using Visual Studio: Introduction](https://docs.microsoft.com/ja-jp/aspnet/web-forms/overview/deployment/visual-studio-web-deployment/introduction)
- [How to: Create a Web Deployment Package in Visual Studio](https://docs.microsoft.com/ja-jp/previous-versions/dd465323(v=vs.110))
- [Installing NuGet](https://docs.microsoft.com/ja-jp/nuget/install-nuget-client-tools)

# 感想

- web api + efをいくつか作ってみた方が良さそう

以上