API Management 開発者ポータルをセルフホストする

適用対象: Developer | Basic | Standard | Premium

このチュートリアルでは、API Management 開発者ポータルをセルフホストする方法について説明します。 セルフホスティングは、開発者ポータルの機能を拡張するためのいくつかのオプションの 1 つです。 たとえば、さまざまな機能を持つ、API Management インスタンス用の複数のポータルをセルフホストできます。 ポータルをセルフホストする場合、その保守担当者となり、アップグレードの責任を負うことになります。

重要

開発者ポータルのコードベースのコアを変更する必要がある場合にのみ、開発者ポータルをセルフホストすることを検討してください。 このオプションには、次のような詳細な構成が必要です。

  • 可用性とパフォーマンスを向上させるためにオプションで CDN などのソリューションによってアクセスされるホスティング プラットフォームへのデプロイ
  • ホスティング インフラストラクチャの維持と管理
  • セキュリティ パッチを含む手動更新。この場合、コードベースをアップグレードする際のコード競合を解決することが必要な場合があります

Note

セルフホステッド ポータルでは、マネージド開発者ポータルで使用できる可視性およびアクセス制御はサポートされていません。

メディア ファイルがマネージド ポータルに既にアップロードされているか変更されている場合は、この記事の後の方にある「マネージドからセルフホステッド開発者ポータルへの移行」を参照してください。

前提条件

ローカルの開発環境を設定するには、次のものが必要です。

手順 1: ローカル環境を設定する

ローカル環境を設定するには、リポジトリを複製し、開発者ポータルの最新リリースに切り替えて、npm パッケージをインストールする必要があります。

  1. api-management-developer-portal レポジトリを GitHub から複製します。

    git clone https://github.com/Azure/api-management-developer-portal.git
    
  2. レポジトリのローカル コピーに移動します。

    cd api-management-developer-portal
    
  3. ポータルの最新のリリースをチェックアウトします。

    次のコードを実行する前に、リポジトリのリリース セクションで現在のリリース タグを確認し、<current-release-tag> の値を最新のリリース タグに置き換えます。

    git checkout <current-release-tag>
    
  4. 使用可能な npm パッケージをインストールします。

    npm install
    

ヒント

常に最新のポータル リリースを使用し、フォークしたポータルを最新の状態に保つようにします。 ソフトウェア エンジニアはこのリポジトリの master ブランチを日常の開発目的で使用します。 これにはソフトウェアの不安定なバージョンがあります。

手順 2: JSON ファイル、静的な Web サイト、および CORS 設定を構成する

開発者ポータルでは、コンテンツを管理するために API Management REST API が必要です。

config.design.json ファイル

src フォルダーにアクセスし、config.design.json ファイルを開きます。

{
  "environment": "development",
  "managementApiUrl": "https://<service-name>.management.azure-api.net",
  "managementApiAccessToken": "SharedAccessSignature ...",
  "backendUrl": "https://<service-name>.developer.azure-api.net",
  "useHipCaptcha": false,
  "integration": {
      "googleFonts": {
          "apiKey": "..."
      }
  }
}

ファイルを構成します。

  1. managementApiUrl の値で、<service-name> を API Management インスタンスの名前で置き換えます。 カスタム ドメインを構成した場合は、代わりにそれを使用します (たとえば、https://management.contoso.com)。

    {
    ...
    "managementApiUrl": "https://contoso-api.management.azure-api.net"
    ...
    
  2. SAS トークンを手動で作成して、API Management インスタンスへの直接の REST API アクセスを有効にします。

  3. 生成されたトークンをコピーし、managementApiAccessToken 値として貼り付けます。

  4. backendUrl の値で、<service-name> を API Management インスタンスの名前で置き換えます。 カスタム ドメインを構成した場合は、代わりにそれを使用します (たとえば、https://portal.contoso.com)。

    {
    ...
    "backendUrl": "https://contoso-api.developer.azure-api.net"
    ...
    
  5. 開発者ポータルで CAPTCHA を有効にする場合は、"useHipCaptcha": true を設定します。 必ず開発者ポータル バックエンドの CORS 設定を構成してください。

  6. integrationgoogleFonts で、必要に応じて apiKey を Web Fonts Developer API へのアクセスを許可する Google API キーに設定します。 このキーは、開発者ポータル エディターの [スタイル] セクションで Google フォントを追加する場合にのみ必要です。

    まだキーがない場合は、Google Cloud コンソールを使用してキーを構成できます。 次の手順のようにします。

    1. Google Cloud コンソールを開きます。
    2. Web Fonts Developer API が有効になっているかどうかを確認します。 そうでない場合は、有効にしてください
    3. [Create credentials] (資格情報の作成)> [API key] (API キー) の順に選択します。
    4. 開いているダイアログで、生成されたキーをコピーし、config.design.json ファイル内の apiKey の値として貼り付けます。
    5. [Edit API key] (API キーの編集) を選択して、キー エディターを開きます。
    6. エディターの [API restrictions] (API の制限) で、[Restrict key] (キーの制限) を選択します。 ドロップダウンで、[Web Fonts Developer API] を選択します。
    7. [保存] を選択します。

config.publish.json ファイル

src フォルダーにアクセスし、config.publish.json ファイルを開きます。

{
  "environment": "publishing",
  "managementApiUrl": "https://<service-name>.management.azure-api.net",
  "managementApiAccessToken": "SharedAccessSignature...",
  "useHipCaptcha": false
}

ファイルを構成します。

  1. 前の構成ファイルの managementApiUrl 値と managementApiAccessToken 値をコピーして貼り付けます。

  2. 開発者ポータルで CAPTCHA を有効にする場合は、"useHipCaptcha": true を設定します。 必ず開発者ポータル バックエンドの CORS 設定を構成してください。

config.runtime.json ファイル

src フォルダーにアクセスし、config.runtime.json ファイルを開きます。

{
  "environment": "runtime",
  "managementApiUrl": "https://<service-name>.management.azure-api.net",
  "backendUrl": "https://<service-name>.developer.azure-api.net"
}

ファイルを構成します。

  1. 前の構成ファイルの managementApiUrl 値をコピーして貼り付けます。

  2. backendUrl の値で、<service-name> を API Management インスタンスの名前で置き換えます。 カスタム ドメインを構成した場合は、代わりにそれを使用します (たとえば、https://portal.contoso.com)。

    {
    ...
    "backendUrl": "https://contoso-api.developer.azure-api.net"
    ...
    

静的な Web サイトを構成する

インデックスおよびエラー ページへのルートを指定して、ストレージ アカウントの静的な Web サイト機能を構成します。

  1. Azure portal でストレージ アカウントに移動し、左側のメニューから [静的な Web サイト] を選択します。

  2. [静的な Web サイト] ページで、 [有効] を選択します。

  3. [インデックス ドキュメント名] フィールドに「index.html」と入力します。

  4. [エラー ドキュメントのパス] フィールドに、「404/index.html」と入力します。

  5. [保存] を選択します。

ストレージ アカウントの CORS 設定を構成する

ストレージ アカウントのクロスオリジン リソース共有 (CORS) 設定を構成します。

  1. Azure portal でストレージ アカウントに移動し、左側のメニューから [CORS] を選択します。

  2. [Blob service] タブで、次のルールを構成します。

    ルール
    許可されたオリジン *
    許可されたメソッド すべての HTTP 動詞を選択します。
    許可されるヘッダー *
    公開されるヘッダー *
    最長有効期間 0
  3. [保存] を選択します。

開発者ポータル バックエンドの CORS 設定を構成する

開発者ポータル バックエンドの CORS 設定を構成して、セルフホステッド開発者ポータルから送信された要求を許可します。 セルフホステッド開発者ポータルは、開発者ポータルのバックエンド エンドポイント (ポータル構成ファイルに backendUrl 設定) に依存して、次のようないくつかの機能を有効にします。

  • CAPTCHA 検証
  • テスト 今ソースでのOAuth 2.0 認可
  • ユーザー認証と製品サブスクリプションの委任

CORS 設定を追加するには、次のようにします。

  1. Azure portal で API Management インスタンスに移動し、左側のメニューから [開発者ポータル]>[ポータル設定] を選択します。
  2. [Self-hosted portal configuration](セルフホステッド ポータルの構成) タブで、1 つ以上の配信元ドメイン値を追加します。 例:
    • セルフホステッド ポータルがホストされているドメイン (例: https://www.contoso.com)
    • ローカル開発の場合 localhost (該当する場合)。たとえば http://localhost:8080https://localhost:8080 など
  3. [保存] を選択します。

手順 3: ポータルを実行する

これで、ローカル ポータル インスタンスを開発モードでビルドして実行できるようになりました。 開発モードでは、すべての最適化がオフになっており、ソース マップが有効になっています。

次のコマンドを実行します。

npm start

しばらくすると、既定のブラウザーが自動的に開き、ローカル開発者ポータル インスタンスが表示されます。 既定のアドレスは http://localhost:8080 ですが、8080 が既に使用されている場合は、ポートが変更される可能性があります。 プロジェクトのコードベースを変更すると、リビルドがトリガーされ、ブラウザー ウィンドウが最新の情報に更新されます。

手順 4: ビジュアル エディターを使用して編集する

ビジュアル エディターを使用して、次のタスクを実行します。

  • ポリシーをカスタマイズする
  • コンテンツを作成する
  • Web サイトの構造を整理する
  • 外観のスタイルを適用する

チュートリアル:開発者ポータルへのアクセスとそのカスタマイズ」を参照してください。 管理ユーザー インターフェイスの基本的事項が記載され、既定のコンテンツに対する推奨される変更の一覧が示されています。 すべての変更をローカル環境に保存し、Ctrl + C キーを押して閉じます。

手順 5: ローカルで発行する

ポータル データは、厳密に型指定されたオブジェクトの形式で生成されます。 次のコマンドでは、それらを静的ファイルに変換し、出力を ./dist/website ディレクトリに配置します。

npm run publish

手順 6: 静的ファイルを BLOB にアップロードする

Azure CLI を使用して、ローカルで生成された静的ファイルを BLOB にアップロードし、訪問者がそれらにアクセスできるようにします。

  1. Windows コマンド プロンプト、PowerShell、またはその他のコマンド シェルを開きます。

  2. 次の Azure CLI コマンドを実行します。

    <account-connection-string> はストレージ アカウントの接続文字列に置き換えます。 これはストレージ アカウントの [アクセス キー] セクションから取得できます。

    az storage blob upload-batch --source dist/website \
        --destination '$web' \
        --connection-string <account-connection-string>
    

手順 7: Web サイトにアクセスする

ご使用の Web サイトは、Azure Storage のプロパティ ( [静的な Web サイト][プライマリ エンドポイント] ) で指定されたホスト名で公開されました。

手順 8: API Management 通知テンプレートを変更する

API Management 通知テンプレート内の開発者ポータルの URL を、セルフホステッド ポータルを指すように置き換えます。 「Azure API Management で通知と電子メール テンプレートを構成する方法」を参照してください。

特に、次の変更を既定のテンプレートに対して実行します。

Note

次の「更新」セクションの値は、https://portal.contoso.com/ でポータルをホストしていることを前提としています。

電子メールの変更確認

電子メールの変更確認通知テンプレートで、開発者ポータルの URL を更新します。

元のコンテンツ

<a id="confirmUrl" href="$ConfirmUrl" style="text-decoration:none">
  <strong>$ConfirmUrl</strong></a>

更新

<a id="confirmUrl" href="https://portal.contoso.com/signup?$ConfirmQuery" style="text-decoration:none">
  <strong>https://portal.contoso.com/signup?$ConfirmQuery</strong></a>

新しい開発者アカウントの確認

新しい開発者アカウントの確認通知テンプレートで、開発者ポータルの URL を更新します。

元のコンテンツ

<a id="confirmUrl" href="$ConfirmUrl" style="text-decoration:none">
  <strong>$ConfirmUrl</strong></a>

更新

<a id="confirmUrl" href="https://portal.contoso.com/signup?$ConfirmQuery" style="text-decoration:none">
  <strong>https://portal.contoso.com/signup?$ConfirmQuery</strong></a>

ユーザーの招待

ユーザーの招待通知テンプレートで、開発者ポータルの URL を更新します。

元のコンテンツ

<a href="$ConfirmUrl">$ConfirmUrl</a>

更新

<a href="https://portal.contoso.com/confirm-v2/identities/basic/invite?$ConfirmQuery">https://portal.contoso.com/confirm-v2/identities/basic/invite?$ConfirmQuery</a>

アクティブ化された新しいサブスクリプション

アクティブ化された新しいサブスクリプション通知テンプレートで、開発者ポータルの URL を更新します。

元のコンテンツ

Thank you for subscribing to the <a href="http://$DevPortalUrl/products/$ProdId"><strong>$ProdName</strong></a> and welcome to the $OrganizationName developer community. We are delighted to have you as part of the team and are looking forward to the amazing applications you will build using our API!

更新

Thank you for subscribing to the <a href="https://portal.contoso.com/product#product=$ProdId"><strong>$ProdName</strong></a> and welcome to the $OrganizationName developer community. We are delighted to have you as part of the team and are looking forward to the amazing applications you will build using our API!

元のコンテンツ

Visit the developer <a href="http://$DevPortalUrl/developer">profile area</a> to manage your subscription and subscription keys

更新

Visit the developer <a href="https://portal.contoso.com/profile">profile area</a> to manage your subscription and subscription keys

元のコンテンツ

<a href="http://$DevPortalUrl/docs/services?product=$ProdId">Learn about the API</a>

更新

<a href="https://portal.contoso.com/product#product=$ProdId">Learn about the API</a>

元のコンテンツ

<p style="font-size:12pt;font-family:'Segoe UI'">
  <strong>
    <a href="http://$DevPortalUrl/applications">Feature your app in the app gallery</a>
  </strong>
</p>
<p style="font-size:12pt;font-family:'Segoe UI'">You can publish your application on our gallery for increased visibility to potential new users.</p>
<p style="font-size:12pt;font-family:'Segoe UI'">
  <strong>
    <a href="http://$DevPortalUrl/issues">Stay in touch</a>
  </strong>
</p>
<p style="font-size:12pt;font-family:'Segoe UI'">
      If you have an issue, a question, a suggestion, a request, or if you just want to tell us something, go to the <a href="http://$DevPortalUrl/issues">Issues</a> page on the developer portal and create a new topic.
</p>

更新

<!--Remove the entire block of HTML code above.-->

パスワードの変更確認

パスワードの変更確認通知テンプレートで、開発者ポータルの URL を更新します。

元のコンテンツ

<a href="$DevPortalUrl">$DevPortalUrl</a>

更新

<a href="https://portal.contoso.com/confirm-password?$ConfirmQuery">https://portal.contoso.com/confirm-password?$ConfirmQuery</a>

すべてのテンプレート

フッターにリンクがあるすべてのテンプレートで、開発者ポータルの URL を更新します。

元のコンテンツ

<a href="$DevPortalUrl">$DevPortalUrl</a>

更新

<a href="https://portal.contoso.com/">https://portal.contoso.com/</a>

マネージドからセルフホステッド開発者ポータルへの移行

時間の経過と共に、ビジネス要件が変わることもあります。 マネージド バージョンの API Management 開発者ポータルがニーズを満たさなくなる状況になる可能性があります。 たとえば、新しい要件によって、サードパーティのデータ プロバイダーと統合するカスタム ウィジェットの構築を強いられることもあります。 マネージド バージョンとは異なり、セルフホステッド バージョンのポータルでは、十分な柔軟性と拡張性が提供されます。

切り替えプロセス

同じ API Management サービス インスタンス内でマネージド バージョンからセルフホステッド バージョンに切り替えることができます。 このプロセスでは、マネージド バージョンのポータルで行った変更が保持されます。 ポータルのコンテンツを事前にバックアップしてください。 バックアップ スクリプトは API Management 開発者ポータルの GitHub リポジトリscripts フォルダーにあります。

変換プロセスは、この記事の前の手順で示したような、一般的なセルフホステッド ポータルの設定とほぼ同じです。 この構成手順には例外が 1 つあります。 config.design.json ファイルのストレージ アカウントは、マネージド バージョンのポータルのストレージ アカウントと同じである必要があります。 SAS URL を取得する方法については、「チュートリアル: Linux VM のシステム割り当て ID を使用して SAS 資格情報で Azure Storage にアクセスする」を参照してください。

ヒント

config.publish.json ファイルでは、別のストレージ アカウントを使用することをお勧めします。 この方法により、ポータルのホスティング サービスをより細かく制御し、管理を簡素化することができます。

次のステップ