SharePoint アドイン モデル内のリモート タイマー ジョブ

新しい SharePoint アドイン モデルにおいて、リモート タイマー ジョブを実装する方法は、完全信頼コードの場合とは異なります。 一般的な完全信頼コード (FTC) /ファーム ソリューション シナリオでは、SharePoint タイマー ジョブは SharePoint Server-Side オブジェクト モデル コードを使用して作成され、ファーム ソリューションを介して展開され、SharePoint サーバーの全体管理 Web サイトで管理されました。 このシナリオでは、SharePoint は、スケジュール設定とタイマー ジョブの実行の両方を処理します。

SharePoint アドイン モデル シナリオでは、タイマー ジョブは SharePoint の外部で作成され、スケジュール設定されます。 SharePoint は、このシナリオでのタイマー ジョブのスケジュール設定や実行について責任を負いません。

基本ガイドライン

タイマー ジョブの作成については、大まかに次のような基本ガイドラインが提供されています。

  • タイマー ジョブは、SharePoint の外部で実装する必要があります。
  • タイマー ジョブのスケジュール設定は、SharePoint の外部で実装する必要があります。
  • タイマー ジョブは、サービス アカウントまたは OAuth を使用して認証する必要があります。

タイマー ジョブの作成に関する課題

Office 365テナンシーでのタイマー ジョブの作成に関連する最大の課題は、ファーム スコープソリューションを Office 365 テナントにデプロイできないことです。 ファーム スコープソリューションがないと、SharePoint タイマー ジョブをデプロイできません。

タイマー ジョブを作成する新しい方法は、構築とスケジュール設定を SharePoint の外部で行う方法です。 オンプレミスの SharePoint 環境では、SharePoint タイマー ジョブに関連付けられている次の要因を考慮してください。

  • SharePoint には数百のタイマー ジョブが標準で付属しています。これらは SharePoint のスケジューラが常に対応する必要のあるものです。
  • 実装コードをAzureまたは別の環境に移動することで、SharePoint サーバーに必要なメモリとプロセッサの電力を削減できます。
  • タイマー ジョブと関連付けられたスケジュール設定や実装を別のサーバーに移すことで、SharePoint サーバーの拡張性が向上し、結果として安定します。

タイマー ジョブのスケジュールのオプション

タイマー ジョブのスケジュール設定を実装するには、いくつかのオプションがあります。

  • Windows スケジューラー
    • Windows サービス
  • Azure WebJob
    • Azure ワーカー プロセス

Windows スケジューラー

このパターンでは、Windows スケジューラーは、タイマー ジョブに関連付けられたスケジュールの側面を処理します。 実装コードには、コンソール アプリケーション、PowerShell スクリプト、または Windows スケジューラーから呼び出すことができるその他のコードを使用できます。

Windows サービス サブ オプション

Windows サービスには、Windows スケジューラと同じ特性があります。 Microsoft ではこのパターンをお勧めしませんが、一般的に使用されるため、言及する価値があります。

Windows スケジューラー環境に適した場合

Azure サブスクリプションにアクセスして、Azure Web ジョブでタイマー ジョブをスケジュールできない場合は、Windows オペレーティング システムを持つ任意のコンピューターにこのオプションを実装できるため、Windows スケジューラを使用することをお勧めします。

  • Windows スケジューラーを実行するハードウェアを追加する必要があります。
  • タイマー ジョブを実行するハードウェアを追加する必要があります。

はじめに

次の記事では、Windows スケジューラー パターンを使用し、開始するためのコード サンプルを提供します。

Azure WebJob

このパターンでは、Azure WebJob は、タイマー ジョブに関連付けられているスケジュールの側面を処理し、実装コードを含みます。

  • Azure WebJob (スケジュールと実装コード) を実行するために追加のハードウェアは必要ありません。
  • スケジュール設定や実装コードに Azure WebJob を使用しており、1 つの場所で管理しやすいため、有利です。

Azure Worker ロール サブ オプション

Azure Worker ロールは、Azure Web ジョブと同じ特性を持ちます。 Microsoft ではこのパターンをお勧めしませんが、一般的に使用されるため、言及する価値があります。

Azure WebJob 環境に適した場合

Azure WebJobs でタイマー ジョブをスケジュールするための、Azure サブスクリプションへのアクセス権を持っている場合。

はじめに

次の記事では、Azure WebJob パターンについて説明し、開始するためのコード サンプルを提供します。

  • Office 365 サイト用 Azure WebJobs の開始
    • Office 365 またはオンプレミスの SharePoint 環境のためにスケジュールされたジョブとして機能するよう、Azure WebJob を構築する方法。 発行と監視に関する情報が含まれています。
  • Core.SimpleTimerJob (Microsoft 365 PnP サンプル)
    • 10 種類の例を含む優れたコード サンプル。 注: Azure WebJob パターンには、すべての 10 個のコード例が適用できるわけではありません。

認証オプション

タイマー ジョブが SharePoint とやり取りするためには、認証する必要があります。 現時点では、タイマー ジョブを認証に使用するパターンは 2 つあります。

  • サービス アカウントの使用
  • OAuth を使用する

サービス アカウントの使用

このパターンでは、タイマー ジョブの認証に使用する 1 つ以上のサービス アカウントを定義します。

  • サービス アカウントは、SharePoint で定義されます。

    • Office 365 テナンシーでは、タイマー ジョブに含まれる機能によっては、サービス アカウントに Office 365 ライセンスが割り当てられていなければならない場合があります。
    • タイマー ジョブごとにサービス アカウントを作成するか、すべてのタイマー ジョブ用に単一のアカウントを作成することができます。
    • 実行する操作を簡単に追跡できるように、サービス アカウントの名前をわかりやすいものにします。

    次に例を示します。タイマー ジョブでリスト アイテムが変更されると、リスト アイテムの [更新者] 列に、タイマー ジョブに関連付けられているサービス アカウントの名前が表示されます。

  • サービス アカウントによって認証するときは、サービス アカウントのユーザー名とサービス アカウントを取得する必要があります。

    • 次のコード スニペットは、ユーザー名とパスワードを使用して認証を行う方法を示しています。

    • ユーザー名とパスワードの保存と取得は安全な方法で行うよう注意してください。

      using (ClientContext context = new ClientContext("https://tenancy.sharepoint.com"))
      {
        // Use default authentication mode
        context.AuthenticationMode = ClientAuthenticationMode.Default;
        // Specify the credentials for the account that will execute the request
        context.Credentials = new SharePointOnlineCredentials("User Name", "Password");
      }
      

はじめに

次の記事では、サービス アカウント認証パターンの使用方法について説明し、開始するためのコード サンプルを提供します。

OAuth を使用する

このパターンでは、SharePoint または Azure Active Directory でアプリケーションを定義し、アプリケーションに関連付けられている認証トークンを使用して認証します。

  • SharePoint アプリケーションを使用して認証する場合は、アプリ プリンシパルを作成し、アクセス許可を割り当てます。

    • このパターンでは、プロバイダー ホスト型 SharePoint アドインまたはコンソール アプリケーションを使用してタイマー ジョブを実装することがあります。
    • プロバイダーホスト型 SharePoint アドインまたはコンソール アプリケーションにアプリケーション プリンシパルを登録するには、SharePoint の AppRegNew ページを使用します。

    このページには、次の URL でアクセスします。 http://<tenancy>/<site>/_layouts/AppRegNew.aspx

    • アプリケーション プリンシパルにアクセス許可を付与するには、SharePoint の AppInv ページを使用します。

    このページには、次の URL でアクセスします。 http://<tenancy>/<site>/_layouts/AppInv.aspx

  • タイマー ジョブでは、対話型ユーザーが関連付けられていないため、アプリのみのアクセス許可が使用されます。

    • 次のコード スニペットは、アクセス トークンを取得し、アプリのみのアクセス許可を使用して SharePoint に対する認証を行う方法を示しています。

      string accessToken = TokenHelper.GetAppOnlyAccessToken(TokenHelper.SharePointPrincipal, siteUri.Authority, realm).AccessToken;
      
      using(var clientContext = TokenHelper.GetClientContextWithAccessToken(siteUri.ToString(),accessToken))
      {
        //Implement timer job code
      }
      
  • Azure Active Directory アプリケーションを使用して認証する場合、Azure ポータルで Azure Active Directory アプリケーションを作成し、アクセス許可を割り当てることができます。

    • このパターンでは、プロバイダー ホスト型 SharePoint アドインまたはコンソール アプリケーションを使用してタイマー ジョブを実装することがあります。
    • このパターンでは、アクセス トークンを取得するため、Active Directory 認証ライブラリまたは Microsoft Graph API とやり取りを行います。
    • アクセス トークンは SharePoint への認証 (および場合によって、Office 365 テナンシーの他の Office 365 サービス) に使用されます。

はじめに

次の記事では、OAuth 認証パターンについて説明し、開始するためのコード サンプルを提供します。

PnP サンプル

適用対象

  • Office 365 マルチテナント (MT)
  • Office 365 専用 (D) 一部
  • SharePoint 2013 オンプレミス - 一部

専用およびオンプレミスの場合のパターンは SharePoint アドイン モデル手法と同じですが、使用可能なテクノロジは異なる可能性があります。