利用Node.JS訪問Azure使用者角色資訊

來源:互聯網
上載者:User

回報CSDN!

我們在微軟的Windows Azure雲端運算平台上進行軟體開發時,很有可能會遇到這個需求,那就是擷取使用者的角色環境資訊。比如要擷取當前的執行個體名稱、部署ID(DeploymentID)、甚至是要知道哪些角色在運行?哪些角色沒有運行?如果我們要使用NodeJS來實現這些任務,那就需要一些技巧。因為角色環境類(RoleEnvironment)是託管的.NET代碼。

在本文中,我們會討論怎樣設定正在啟動並執行Azure角色資訊,以便讓這些資訊能夠很容易地被NodeJS伺服器所訪問。訣竅是使用環境變數和使用啟動任務,用啟動並執行PowerShell作為兩者間的橋樑。

下面我建立了一個例子來說明這一點,大家可以自行測試。基本上,它獲得了啟動任務,它把Azure角色環境資訊轉存到環境變數,並用server.js指令檔輸出這些變數。無論如何,大家可以從下面的代碼看它到底是怎麼工作的。

我們需要完成下列任務:

1、建立一個啟動任務,該任務運行一個cmd指令碼,指令碼可訪問Azure角色環境資訊;

2、設定環境變數的資訊,以便於可以從NodeJS訪問這些資訊;

3、通過process.env對象,用server.js擷取值。

下面進行詳細說明。cmd指令碼是這樣的:

指令碼一:setupenvironmentvariables.cmd

@ECHO off%~d0CD "%~dp0" IF EXIST %WINDIR%\SysWow64 (set powerShellDir=%WINDIR%\SysWow64\windowspowershell\v1.0) ELSE (set powerShellDir=%WINDIR%\system32\windowspowershell\v1.0) ECHO Setting the Environment variables..CALL %powerShellDir%\powershell.exe -Command Set-ExecutionPolicy unrestrictedCALL %powerShellDir%\powershell.exe -Command "& .\set_azure_role_information.ps1"ECHO Done! ECHO Restarting IIS..CALL iisresetECHO Done! ECHO Starting the W3SVC service..CALL NET START W3SVCECHO Done!

上面的代碼解釋如下:

1、要在Azure雲上執行未簽名的PowerShell指令碼,你必須把執行策略(Execution Policy)設定為無限制(Unrestricted)。我使用了Set-ExecutionPolicy命令,但要注意它的值不會改變,除非你手動修改值。在PowerShell 2.0環境下,還可以使用-ExecutionPolicy命令來設定在當前範圍下無限制。但是由於預設的WebRole模板使用了osFamily="1"設定,它在Windows Server 2008 SP2有效,所以我們不會使用此命令。

2、重點:在環境變數設定後,我們需要重啟IIS伺服器,重啟W3SVC,讓服務生效。Azure雲平台的W3SVC設定為手工模式,因此這就是為什麼它不會在IIS伺服器複位後自動啟動。

我們來看下一個PowerShell指令碼:

指令碼二:setazurerole_information.ps1

[Reflection.Assembly]::LoadWithPartialName("Microsoft.WindowsAzure.ServiceRuntime")[Environment]::SetEnvironmentVariable("RoleName", [Microsoft.WindowsAzure.ServiceRuntime.RoleEnvironment]::CurrentRoleInstance.Role.Name,"Machine")[Environment]::SetEnvironmentVariable("RoleInstanceID", [Microsoft.WindowsAzure.ServiceRuntime.RoleEnvironment]::CurrentRoleInstance.Id,"Machine")[Environment]::SetEnvironmentVariable("RoleDeploymentID", [Microsoft.WindowsAzure.ServiceRuntime.RoleEnvironment]::DeploymentId,"Machine")[Environment]::SetEnvironmentVariable("IsAvailable", [Microsoft.WindowsAzure.ServiceRuntime.RoleEnvironment]::IsAvailable,"Machine")[Environment]::SetEnvironmentVariable("CustomVariable", "Some value","Machine")

代碼說明:我們通過RoleEnvironment屬性值設定一些環境變數。要注意,還可以設定自訂的環境變數。

指令碼三:ServiceDefinition.csdef

<Task commandLine="setup_environment_variables.cmd"    executionContext="elevated" taskType="simple" />

最後,我們用NodeJS編寫server.js代碼,它可以輸出響應的結果。

指令碼四:server.js

var http = require('http');var port = process.env.port || 1337; http.createServer(function (req, res) {res.writeHead(200, { 'Content-Type': 'text/plain' }); res.write("Role Name: " + process.env.RoleName + "\n");res.write("Role InstanceID: " + process.env.RoleInstanceID + "\n");res.write("Role DeploymentID: " + process.env.RoleDeploymentID + "\n");res.write("Is running?: " + process.env.IsAvailable + "\n");res.write("Custom variable: " + process.env.CustomVariable + "\n"); res.end();}).listen(port);

在模擬器上運行上面的例子,顯示的結果如下:

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.