次の方法で共有


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

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

このチュートリアルでは、 API Management 開発者ポータルを自己ホストする方法について説明します。 セルフホスティングは、開発者ポータルの機能を 拡張 するためのいくつかのオプションの 1 つです。 たとえば、API Management インスタンスの複数のポータルをさまざまな機能でセルフホストできます。 ポータルを自己ホストすると、そのメンテナンス担当者になり、アップグレードの責任を負います。 開発者ポータルでは、コンテンツを管理するために API Management REST API が必要です。

Von Bedeutung

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

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

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

マネージド ポータルでメディア ファイルを既にアップロードまたは変更している場合は、この記事で後述 する「管理対象からセルフホステッドへの移行」を参照してください。

[前提条件]

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

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

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

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

    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
    

ヒント

常に 最新のポータル リリース を使用し、フォークされたポータル up-to-date のままにします。 API Management 開発チームは、毎日の開発目的でこのリポジトリの master ブランチを使用します。 これは、ソフトウェアの不安定なバージョンを持っています.

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

config.design.json ファイル

src フォルダーに移動し、config.design.json ファイルを開きます。

{
    "environment": "development",
    "subscriptionId": "< subscription ID >",
    "resourceGroupName": "< resource group name >",
    "serviceName": "< API Management service name >"
}

subscriptionIdresourceGroupName、およびserviceNameで、API Management インスタンスのサブスクリプション、リソース グループ、およびサービス名の値を入力します。 I

config.design.json のオプションの設定

必要に応じて、 config.design.json ファイルで次の設定を構成します。

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

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

    {
        ...
        "integration": {
            "googleFonts": {
                "apiKey": "< your Google API key >"
            }
        }
        ...
    }
    
    
  3. まだキーがない場合は、Google Cloud コンソールを使用してキーを構成できます。 次の手順に従います。

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

config.publish.json ファイル

src フォルダーに移動し、config.publish.json ファイルを開きます。

{
    "environment": "publishing",
    "subscriptionId":"<service subscription>",
    "resourceGroupName":"<service resource group>",
    "serviceName":"<service name>"
}

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

config.runtime.json ファイル

src フォルダーに移動し、config.runtime.json ファイルを開きます。

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

< service name >は、前の構成ファイルで使用した API Management インスタンスの名前に置き換える必要があります。

静的 Web サイトを構成する

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

  1. Azure portal でストレージ アカウントに移動します。

  2. サイドバーメニューで、 データ管理>静的 Web サイトを選択します。

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

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

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

  6. 保存 を選択します。

プライマリ エンドポイントの URL を書き留めます。 後で、セルフホステッド ポータルにアクセスするように構成します。

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

ストレージ アカウントのクロスオリジン リソース共有 (CORS) 設定を構成するには:

  1. Azure portal で、ストレージ アカウントに移動します。

  2. サイドバー メニューの [設定] で、[ リソース共有 (CORS)] を選択します。

  3. [BLOB サービス] タブで、次の規則を構成します。

    ルール 価値
    許可されるオリジン *
    使用できるメソッド すべての HTTP 動詞を選択します。
    許可されるヘッダー *
    公開されるヘッダー *
    最大年齢 0
  4. 保存 を選択します。

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

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

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

CORS 設定を追加するには:

  1. Azure portal で API Management インスタンスに移動します。
  2. サイドバー メニューで、 開発者ポータル>Settings を選択します。
  3. [ セルフホステッド ポータルの構成 ] タブで、1 つ以上の Origin ドメイン値を追加します。 例えば:
    • セルフホステッド ポータルがホストされているドメイン (例: https://contoso.developer.azure-api.net
    • localhost 該当する場合には、ローカル開発用として、http://localhost:8080https://localhost:8080
  4. 保存 を選択します。

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

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

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

    npm run start
    
  2. ブラウザーを使用して認証するように求められます。 続行するには、Microsoft 資格情報を選択します。

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

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

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

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

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

手順 5: ポータルをローカルに発行する

  1. npm run publish を実行します。 ブラウザーを使用して認証するように求められます。 続行するには、Microsoft 資格情報を選択します。

  2. しばらくすると、コンテンツは dist/website フォルダーに発行されます。

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

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

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

  2. 次の az storage blog upload-batch コマンドを実行します。 <connection-string>をストレージ アカウントの接続文字列に置き換えます。 ストレージ アカウントの [セキュリティ + ネットワーク>Access キー ] セクションから取得できます。

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

手順 7: Web サイトに移動する

Web サイトは、Azure Storage のプロパティで指定されたホスト名の下に表示されるようになりました。 サイドバー メニューで、 データ管理>Static Web サイトに移動します。 ホスト名はプライマリ エンドポイントの値 です

Web サイト エディターをホストする

Web サイト コードを変更する場合は、変更したウィジェットの編集を適切にサポートできるように、Web サイト エディター コードの更新が必要になる場合があります。 この場合、ポータルをホストするだけでなく、エディター アプリケーションをホストすることもできます。 そのためには、それをビルドし、API Management サービスにアクセスするように構成する必要があります。

このためには、テナントに Microsoft Entra ID アプリケーションが必要です。

  1. Microsoft Entra ID テナントにアプリケーションを登録します。 アプリケーション (クライアント) IDディレクトリ (テナント) ID を書き留めます。 後の手順で構成します。
  2. デザイナーがホストされている Web アプリのエンドポイントを指すように、このアプリケーションで Web リダイレクト URI (応答 URL) を構成します。 これは通常、BLOB ストレージベースの Web サイトの場所です。 例: https://<your-storage-account-name>z13.web.core.windows.net/
  3. パイプライン (GitHub Actions) でポータルを発行する場合は、このアプリケーションのクライアント シークレットも作成します。 生成されたシークレット値をメモし、安全な場所に格納します。

次に、次の手順に従って Web サイト エディターをホストします。

  1. clientId ファイルにtenantIdフィールドとconfig.design.json フィールドを追加します。

    {
        ...
        "clientId": "< Entra ID app ID >",
        "tenantId": "< Entra ID tenant ID >"
        ...
    }
    
  2. npm run build-designer コマンドを実行してデザイナーをビルドします。

  3. 生成された /dist/designer フォルダーに移動します。このフォルダーには、次の内容のファイル config.json が含まれています。

    {
        "subscriptionId": "< subscription ID >",
        "resourceGroupName": "< resource group name >",
        "serviceName": "< API Management service name >",
        "clientId": "< Entra ID client ID >",
        "tenantId": "< Entra ID tenant ID >"
    }
    
  4. Azure Resource Manager API を使用して API Management サービスに接続するために必要な subscriptionIdresourceGroupNameserviceNameの構成を確認します。

パイプラインでポータルを発行する (GitHub Actions)

GitHub Actions などのパイプラインでセルフホステッド ポータルを発行できます。

パイプラインによる発行を実行するためには、Entra ID アプリケーション資格情報も必要です。 前の手順で説明したのと同じ Entra ID アプリケーションを使用できます。 tenantIdclientId、特にclientSecretは、それぞれのキー ストレージに保持する必要があります。 詳細については、 GitHub Actions でのシークレットの使用 に関するページを参照してください。

GitHub Actions パイプライン YAML の例:


name: Portal-Publishing-Pipeline

on:
  pull_request:
    branches:
      - master

jobs:
  publish:
    runs-on: ubuntu-latest
    env:
      AZURE_TENANT_ID: ${{ secrets.AZURE_TENANT_ID }}
      AZURE_CLIENT_ID: ${{ secrets.AZURE_CLIENT_ID }}
      AZURE_CLIENT_SECRET: ${{ secrets.AZURE_CLIENT_SECRET }}
    steps:
      - name: Checkout code
        uses: actions/checkout@v5

      - name: Set up Node.js
        uses: actions/setup-node@v5
        with:
          node-version: '20.x'

      - name: Install dependencies
        run: npm install

      - name: Run publish command
        run: npm run publish

API Management 通知テンプレートを変更する

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

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

次の 更新 されたセクションの値は、 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 開発者ポータル scripts.v3 フォルダーにあります。

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

ヒント

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