開始使用 Azure CDN 開發
您可以使用適用於 JavaScript 的 Azure CDN SDK,自動建立和管理 CDN 配置檔和端點。 本教學課程會逐步引導您建立簡單的Node.js控制台應用程式,以示範數個可用的作業。 本教學課程並非要詳細說明適用於 JavaScript 的 Azure CDN SDK 的所有層面。
若要完成本教學課程,您應該已經 安裝並設定Node.js6.x.x 或更高版本。 您可以使用您要建立Node.js應用程式的任何文字編輯器。 若要撰寫本教學課程,我使用了 Visual Studio Code。
必要條件
撰寫 CDN 管理程式碼之前,您必須進行一些準備,讓程式代碼能夠與 Azure Resource Manager 互動。 若要進行這項準備,您需要:
- 建立資源群組以包含在本教學課程中建立的CDN配置檔
- 設定 Microsoft Entra 識別碼以提供應用程式的驗證
- 將許可權套用至資源群組,讓只有來自 Microsoft Entra 租使用者的授權使用者才能與 CDN 配置檔互動
建立資源群組
登入 Azure 入口網站。
按一下 [建立資源]。
搜尋 [資源群組],然後在 [資源群組 ] 窗格中,單擊 [ 建立]。
為您的資源組 名 CdnConsoleTutorial。 選取您的訂用帳戶,然後選擇您附近的位置。 如果您想要的話,您可以按兩下 [ 釘選到儀錶板 ] 複選框,將資源群組釘選到入口網站中的儀錶板。 釘選可讓您更輕鬆地稍後找到。 選取項目之後,請按兩下 [ 建立]。
建立資源群組之後,如果您未將它釘選到儀錶板,您可以按兩下 [瀏覽],然後按兩下 [資源群組] 來找到它。 若要開啟它,請按兩下資源群組。 記下您的 訂用帳戶標識碼。 我們稍後需要它。
建立 Microsoft Entra 應用程式並套用許可權
使用 Microsoft Entra ID 進行應用程式驗證的方法有兩種:個別使用者或服務主體。 服務主體類似於 Windows 中的服務帳戶。 而不是授與特定用戶許可權來與 CDN 配置文件互動,而是將許可權授與服務主體。 服務主體通常用於自動化的非互動式進程。 雖然本教學課程正在撰寫互動式控制台應用程式,但我們仍將焦點放在服務主體方法上。
建立服務主體包含數個步驟,包括建立 Microsoft Entra 應用程式。 若要建立它,我們將 遵循本教學課程。
重要
請務必遵循連結教學課程中的所有步驟。 請務必如所述完成。 請務必記下您的租使用者標識碼、租使用者功能變數名稱(通常是 .onmicrosoft.com 網域,除非您已指定自定義網域)、用戶端標識符和客戶端驗證密鑰,因為我們稍後需要此資訊。 請小心保護用戶端 識別碼 和 客戶端驗證密鑰,因為任何人都可以使用這些認證來執行作業作為服務主體。
當您進入名為 [設定多租使用者應用程式] 的步驟時,請選取 [ 否]。
當您進入將應用程式指派給角色的步驟時,請使用稍早建立的資源群組 CdnConsoleTutorial,但不是讀取者角色,而是指派 CDN 配置文件參與者角色。 在您指派應用程式 資源群組上的CDN設定檔參與者 角色之後,請返回本教學課程。
建立服務主體並指派 CDN 配置檔參與者 角色之後, 資源群組的 [使用者 ] 刀鋒視窗看起來應該類似下圖。
互動式用戶驗證
如果您寧願擁有互動式個別用戶驗證,而不是服務主體,程式與服務主體類似。 事實上,您必須遵循相同的程式,但進行一些次要變更。
重要
只有在您選擇使用個別用戶驗證,而不是服務主體時,才遵循這些後續步驟。
建立您的應用程式時,而不是 Web 應用程式,請選擇 [原生應用程式]。
在下一個頁面上,系統會提示您輸入 重新導向 URI。 URI 不會經過驗證,但請記住您輸入的內容。 您稍後需要它。
不需要建立 客戶端驗證金鑰。
我們將指派個別使用者或群組,而不是將服務主體指派給 CDN配置檔參與者 角色。 在此範例中,您可以看到我已將CDN示範使用者指派給CDN設定檔參與者角色。
建立專案並新增 npm 相依性
既然我們已為 CDN 配置檔建立資源群組,並提供 Microsoft Entra 應用程式許可權來管理該群組內的 CDN 配置檔和端點,我們可以開始建立應用程式。
建立資料夾以儲存您的應用程式。 從具有目前路徑中Node.js工具的控制台,將目前的位置設定為這個新資料夾,然後執行下列命令來初始化專案:
npm init
接著,您將會看到一系列問題來初始化專案。 針對 進入點,本教學課程會使用 app.js。 您可以在下列範例中看到我的其他選擇。
現在,我們的專案會使用 packages.json 檔案初始化。 我們的專案將使用 npm 套件中包含的一些 Azure 連結庫。 我們將使用 Node.js 中的 Microsoft Entra 驗證連結庫(@Azure/身分識別)和適用於 JavaScript 的 Azure CDN 用戶端連結庫(@Azure/Azure Resource Manager-cdn)。 讓我們將這些專案新增至專案作為相依性。
npm install --save @azure/identity
npm install --save @azure/arm-cdn
安裝套件之後, package.json 檔案看起來應該會像這個範例一樣(版本號碼可能不同):
{
"name": "cdn_node",
"version": "1.0.0",
"description": "Azure CDN Node.js tutorial project",
"main": "app.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "Cam Soper",
"license": "MIT",
"dependencies": {
"@azure/arm-cdn": "^7.0.1",
"@azure/identity": "^2.0.4"
}
}
最後,使用文本編輯器,建立空白文本檔,並將它儲存在專案資料夾的根目錄中,作為 app.js。 我們現在已準備好開始撰寫程序代碼。
需要、常數、驗證和結構
在 編輯器中開啟app.js ,讓我們取得撰寫程式的基本結構。
使用下列專案,在頂端新增 npm 套件的「需要」:
const { DefaultAzureCredential } = require("@azure/identity"); const { CdnManagementClient } = require('@azure/arm-cdn');
我們需要定義方法將使用的一些常數。 新增下列內容。 請務必視需要以您自己的值取代佔位符,包括角括弧>。<
//Tenant app constants const clientId = "<YOUR CLIENT ID>"; const clientSecret = "<YOUR CLIENT AUTHENTICATION KEY>"; //Only for service principals const tenantId = "<YOUR TENANT ID>"; //Application constants const subscriptionId = "<YOUR SUBSCRIPTION ID>"; const resourceGroupName = "CdnConsoleTutorial"; const resourceLocation = "<YOUR PREFERRED AZURE LOCATION, SUCH AS Central US>";
接下來,我們將具現化 CDN 管理用戶端,並提供我們的認證。
var credentials = new DefaultAzureCredential(); var cdnClient = new CdnManagementClient(credentials, subscriptionId);
我們的Node.js主控台應用程式會採用一些命令行參數。 讓我們驗證至少已傳遞一個參數。
//Collect command-line parameters var parms = process.argv.slice(2); //Do we have parameters? if(parms == null || parms.length == 0) { console.log("Not enough parameters!"); console.log("Valid commands are list, delete, create, and purge."); process.exit(1); }
這會將我們帶到程式的主要部分,我們會根據傳遞的參數,將分支分支至其他函式。
switch(parms[0].toLowerCase()) { case "list": cdnList(); break; case "create": cdnCreate(); break; case "delete": cdnDelete(); break; case "purge": cdnPurge(); break; default: console.log("Valid commands are list, delete, create, and purge."); process.exit(1); }
在我們的程式中的幾個位置,我們需要確定傳入正確的參數數目,並在它們看起來不正確時顯示一些說明。 讓我們建立函式來執行這個動作。
function requireParms(parmCount) { if(parms.length < parmCount) { usageHelp(parms[0].toLowerCase()); process.exit(1); } } function usageHelp(cmd) { console.log("Usage for " + cmd + ":"); switch(cmd) { case "list": console.log("list profiles"); console.log("list endpoints <profile name>"); break; case "create": console.log("create profile <profile name>"); console.log("create endpoint <profile name> <endpoint name> <origin hostname>"); break; case "delete": console.log("delete profile <profile name>"); console.log("delete endpoint <profile name> <endpoint name>"); break; case "purge": console.log("purge <profile name> <endpoint name> <path>"); break; default: console.log("Invalid command."); } }
最後,我們將在CDN管理用戶端上使用的函式是異步的,因此他們需要方法在完成時回呼。 讓我們建立一個可以顯示CDN管理客戶端的輸出(如果有的話),並正常結束程式。
function callback(err, result, request, response) { if (err) { console.log(err); process.exit(1); } else { console.log((result == null) ? "Done!" : result); process.exit(0); } }
既然撰寫程式的基本結構,我們應該根據參數來建立呼叫的函式。
列出 CDN 設定檔和端點
讓我們從程式代碼開始列出現有的配置檔和端點。 我的程式代碼批注提供預期的語法,因此我們知道每個參數的去向。
// list profiles
// list endpoints <profile name>
function cdnList(){
requireParms(2);
switch(parms[1].toLowerCase())
{
case "profiles":
console.log("Listing profiles...");
cdnClient.profiles.listByResourceGroup(resourceGroupName, callback);
break;
case "endpoints":
requireParms(3);
console.log("Listing endpoints...");
cdnClient.endpoints.listByProfile(resourceGroupName, parms[2], callback);
break;
default:
console.log("Invalid parameter.");
process.exit(1);
}
}
建立 CDN 設定檔和端點
接下來,我們將撰寫函式來建立配置檔和端點。
function cdnCreate() {
requireParms(2);
switch(parms[1].toLowerCase())
{
case "profile":
cdnCreateProfile();
break;
case "endpoint":
cdnCreateEndpoint();
break;
default:
console.log("Invalid parameter.");
process.exit(1);
}
}
// create profile <profile name>
async function cdnCreateProfile() {
requireParms(3);
console.log("Creating profile...");
var standardCreateParameters = {
location: resourceLocation,
sku: {
name: 'Standard_Verizon'
}
};
await cdnClient.profiles.beginCreateAndWait( resourceGroupName, parms[2], standardCreateParameters, callback);
}
// create endpoint <profile name> <endpoint name> <origin hostname>
async function cdnCreateEndpoint() {
requireParms(5);
console.log("Creating endpoint...");
var endpointProperties = {
location: resourceLocation,
origins: [{
name: parms[4],
hostName: parms[4]
}]
};
await cdnClient.endpoints.beginCreateAndWait(resourceGroupName, parms[2], parms[3], endpointProperties, callback);
}
清除端點
假設已建立端點,我們可能想要在程序中執行的一個常見工作就是清除端點中的內容。
// purge <profile name> <endpoint name> <path>
async function cdnPurge() {
requireParms(4);
console.log("Purging endpoint...");
var purgeContentPaths = [ parms[3] ];
await cdnClient.endpoints.beginPurgeContentAndWait(resourceGroupName, parms[2], parms[3], purgeContentPaths, callback);
}
刪除 CDN 設定檔和端點
我們將包含的最後一個函式會刪除端點和配置檔。
async function cdnDelete() {
requireParms(2);
switch(parms[1].toLowerCase())
{
// delete profile <profile name>
case "profile":
requireParms(3);
console.log("Deleting profile...");
await cdnClient.profiles.beginDeleteAndWait(resourceGroupName, parms[2], callback);
break;
// delete endpoint <profile name> <endpoint name>
case "endpoint":
requireParms(4);
console.log("Deleting endpoint...");
await cdnClient.endpoints.beginDeleteAndWait(resourceGroupName, parms[2], parms[3], callback);
break;
default:
console.log("Invalid parameter.");
process.exit(1);
}
}
執行程式
我們現在可以使用我們慣用的調試程式或控制台來執行Node.js程式。
提示
如果您使用 Visual Studio Code 作為調試程式,您必須設定環境以傳入命令行參數。 Visual Studio Code 會在 launch.json 檔案中執行此動作。 尋找名為 args 的屬性,併為您的參數新增字串值的陣列,使其看起來如下所示: "args": ["list", "profiles"]
。
讓我們從列出配置檔開始。
我們得到了空陣列。 因為我們的資源群組中沒有任何配置檔,因此這是預期的。 現在讓我們建立配置檔。
現在,讓我們新增端點。
最後,讓我們刪除我們的配置檔。
後續步驟
若要查看適用於 JavaScript 的 Azure CDN SDK 參考,請檢視 參考。
若要尋找 Azure SDK for JavaScript 的其他檔,請檢視 完整參考。
使用 PowerShell 管理 CDN 資源。