API Management 開発者ポータルをセルフホストする
適用対象: Developer | Basic | Standard | Premium
このチュートリアルでは、API Management 開発者ポータルをセルフホストする方法について説明します。 セルフホスティングは、開発者ポータルの機能を拡張するためのいくつかのオプションの 1 つです。 たとえば、さまざまな機能を持つ、API Management インスタンス用の複数のポータルをセルフホストできます。 ポータルをセルフホストする場合、その保守担当者となり、アップグレードの責任を負うことになります。
重要
開発者ポータルのコードベースのコアを変更する必要がある場合にのみ、開発者ポータルをセルフホストすることを検討してください。 このオプションには、次のような詳細な構成が必要です。
- 可用性とパフォーマンスを向上させるためにオプションで CDN などのソリューションによってアクセスされるホスティング プラットフォームへのデプロイ
- ホスティング インフラストラクチャの維持と管理
- セキュリティ パッチを含む手動更新。この場合、コードベースをアップグレードする際のコード競合を解決することが必要な場合があります
Note
セルフホステッド ポータルでは、マネージド開発者ポータルで使用できる可視性およびアクセス制御はサポートされていません。
メディア ファイルがマネージド ポータルに既にアップロードされているか変更されている場合は、この記事の後の方にある「マネージドからセルフホステッド開発者ポータルへの移行」を参照してください。
前提条件
ローカルの開発環境を設定するには、次のものが必要です。
- API Management サービス インスタンス。 お持ちでない場合は、「クイック スタート - Azure API Management インスタンスの作成」を参照してください。
- 静的な Web サイト機能が有効になっている Azure ストレージ アカウント。 「ストレージ アカウントを作成する」を参照してください。
- マシン上の Git。 こちらの Git チュートリアルに従ってインストールしてください。
- マシン上の Node.js (LTS バージョン、
v10.15.0
以降) および npm。 「Node.js と npm のダウンロードとインストール」を参照してください。 - Azure CLI。 Azure CLI のインストール手順に従ってください。
手順 1: ローカル環境を設定する
ローカル環境を設定するには、リポジトリを複製し、開発者ポータルの最新リリースに切り替えて、npm パッケージをインストールする必要があります。
api-management-developer-portal レポジトリを GitHub から複製します。
git clone https://github.com/Azure/api-management-developer-portal.git
レポジトリのローカル コピーに移動します。
cd api-management-developer-portal
ポータルの最新のリリースをチェックアウトします。
次のコードを実行する前に、リポジトリのリリース セクションで現在のリリース タグを確認し、
<current-release-tag>
の値を最新のリリース タグに置き換えます。git checkout <current-release-tag>
使用可能な 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": "..."
}
}
}
ファイルを構成します。
managementApiUrl
の値で、<service-name>
を API Management インスタンスの名前で置き換えます。 カスタム ドメインを構成した場合は、代わりにそれを使用します (たとえば、https://management.contoso.com
)。{ ... "managementApiUrl": "https://contoso-api.management.azure-api.net" ...
SAS トークンを手動で作成して、API Management インスタンスへの直接の REST API アクセスを有効にします。
生成されたトークンをコピーし、
managementApiAccessToken
値として貼り付けます。backendUrl
の値で、<service-name>
を API Management インスタンスの名前で置き換えます。 カスタム ドメインを構成した場合は、代わりにそれを使用します (たとえば、https://portal.contoso.com
)。{ ... "backendUrl": "https://contoso-api.developer.azure-api.net" ...
開発者ポータルで CAPTCHA を有効にする場合は、
"useHipCaptcha": true
を設定します。 必ず開発者ポータル バックエンドの CORS 設定を構成してください。integration
のgoogleFonts
で、必要に応じてapiKey
を Web Fonts Developer API へのアクセスを許可する Google API キーに設定します。 このキーは、開発者ポータル エディターの [スタイル] セクションで Google フォントを追加する場合にのみ必要です。まだキーがない場合は、Google Cloud コンソールを使用してキーを構成できます。 次の手順のようにします。
- Google Cloud コンソールを開きます。
- Web Fonts Developer API が有効になっているかどうかを確認します。 そうでない場合は、有効にしてください。
- [Create credentials] (資格情報の作成)> [API key] (API キー) の順に選択します。
- 開いているダイアログで、生成されたキーをコピーし、
config.design.json
ファイル内のapiKey
の値として貼り付けます。 - [Edit API key] (API キーの編集) を選択して、キー エディターを開きます。
- エディターの [API restrictions] (API の制限) で、[Restrict key] (キーの制限) を選択します。 ドロップダウンで、[Web Fonts Developer API] を選択します。
- [保存] を選択します。
config.publish.json ファイル
src
フォルダーにアクセスし、config.publish.json
ファイルを開きます。
{
"environment": "publishing",
"managementApiUrl": "https://<service-name>.management.azure-api.net",
"managementApiAccessToken": "SharedAccessSignature...",
"useHipCaptcha": false
}
ファイルを構成します。
前の構成ファイルの
managementApiUrl
値とmanagementApiAccessToken
値をコピーして貼り付けます。開発者ポータルで 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"
}
ファイルを構成します。
前の構成ファイルの
managementApiUrl
値をコピーして貼り付けます。backendUrl
の値で、<service-name>
を API Management インスタンスの名前で置き換えます。 カスタム ドメインを構成した場合は、代わりにそれを使用します (たとえば、https://portal.contoso.com
)。{ ... "backendUrl": "https://contoso-api.developer.azure-api.net" ...
静的な Web サイトを構成する
インデックスおよびエラー ページへのルートを指定して、ストレージ アカウントの静的な Web サイト機能を構成します。
Azure portal でストレージ アカウントに移動し、左側のメニューから [静的な Web サイト] を選択します。
[静的な Web サイト] ページで、 [有効] を選択します。
[インデックス ドキュメント名] フィールドに「index.html」と入力します。
[エラー ドキュメントのパス] フィールドに、「404/index.html」と入力します。
[保存] を選択します。
ストレージ アカウントの CORS 設定を構成する
ストレージ アカウントのクロスオリジン リソース共有 (CORS) 設定を構成します。
Azure portal でストレージ アカウントに移動し、左側のメニューから [CORS] を選択します。
[Blob service] タブで、次のルールを構成します。
ルール 値 許可されたオリジン * 許可されたメソッド すべての HTTP 動詞を選択します。 許可されるヘッダー * 公開されるヘッダー * 最長有効期間 0 [保存] を選択します。
開発者ポータル バックエンドの CORS 設定を構成する
開発者ポータル バックエンドの CORS 設定を構成して、セルフホステッド開発者ポータルから送信された要求を許可します。 セルフホステッド開発者ポータルは、開発者ポータルのバックエンド エンドポイント (ポータル構成ファイルに backendUrl
設定) に依存して、次のようないくつかの機能を有効にします。
- CAPTCHA 検証
- テスト 今ソースでのOAuth 2.0 認可
- ユーザー認証と製品サブスクリプションの委任
CORS 設定を追加するには、次のようにします。
- Azure portal で API Management インスタンスに移動し、左側のメニューから [開発者ポータル]>[ポータル設定] を選択します。
- [Self-hosted portal configuration](セルフホステッド ポータルの構成) タブで、1 つ以上の配信元ドメイン値を追加します。 例:
- セルフホステッド ポータルがホストされているドメイン (例:
https://www.contoso.com
) - ローカル開発の場合
localhost
(該当する場合)。たとえばhttp://localhost:8080
やhttps://localhost:8080
など
- セルフホステッド ポータルがホストされているドメイン (例:
- [保存] を選択します。
手順 3: ポータルを実行する
これで、ローカル ポータル インスタンスを開発モードでビルドして実行できるようになりました。 開発モードでは、すべての最適化がオフになっており、ソース マップが有効になっています。
次のコマンドを実行します。
npm start
しばらくすると、既定のブラウザーが自動的に開き、ローカル開発者ポータル インスタンスが表示されます。 既定のアドレスは http://localhost:8080
ですが、8080
が既に使用されている場合は、ポートが変更される可能性があります。 プロジェクトのコードベースを変更すると、リビルドがトリガーされ、ブラウザー ウィンドウが最新の情報に更新されます。
手順 4: ビジュアル エディターを使用して編集する
ビジュアル エディターを使用して、次のタスクを実行します。
- ポリシーをカスタマイズする
- コンテンツを作成する
- Web サイトの構造を整理する
- 外観のスタイルを適用する
「チュートリアル:開発者ポータルへのアクセスとそのカスタマイズ」を参照してください。 管理ユーザー インターフェイスの基本的事項が記載され、既定のコンテンツに対する推奨される変更の一覧が示されています。 すべての変更をローカル環境に保存し、Ctrl + C キーを押して閉じます。
手順 5: ローカルで発行する
ポータル データは、厳密に型指定されたオブジェクトの形式で生成されます。 次のコマンドでは、それらを静的ファイルに変換し、出力を ./dist/website
ディレクトリに配置します。
npm run publish
手順 6: 静的ファイルを BLOB にアップロードする
Azure CLI を使用して、ローカルで生成された静的ファイルを BLOB にアップロードし、訪問者がそれらにアクセスできるようにします。
Windows コマンド プロンプト、PowerShell、またはその他のコマンド シェルを開きます。
次の 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
ファイルでは、別のストレージ アカウントを使用することをお勧めします。 この方法により、ポータルのホスティング サービスをより細かく制御し、管理を簡素化することができます。
次のステップ
- セルフホストの代替アプローチについて説明します。