利用Node.JS访问Azure用户角色信息

简介: 版权声明:本文为博主chszs的原创文章,未经博主允许不得转载。 https://blog.csdn.net/chszs/article/details/7820193 回报CSDN!我们在微软的Windows Azure云计算平台上进行软件开发时,很有可能会遇到这个需求,那就是获取用户的角色环境信息。
版权声明:本文为博主chszs的原创文章,未经博主允许不得转载。 https://blog.csdn.net/chszs/article/details/7820193

回报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
%~d0
CD "%~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 unrestricted
CALL %powerShellDir%\powershell.exe -Command "& .\set_azure_role_information.ps1"
ECHO Done!
 
ECHO Restarting IIS..
CALL iisreset
ECHO Done!
 
ECHO Starting the W3SVC service..
CALL NET START W3SVC
ECHO 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);

在模拟器上运行上面的例子,显示的结果如下:





目录
相关文章
|
4月前
|
Kubernetes Ubuntu Windows
【Azure K8S | AKS】分享从AKS集群的Node中查看日志的方法(/var/log)
【Azure K8S | AKS】分享从AKS集群的Node中查看日志的方法(/var/log)
142 3
|
4月前
|
资源调度 JavaScript Linux
【Azure 应用服务】本地Node.js部署上云(Azure App Service for Linux)遇到的三个问题解决之道
【Azure 应用服务】本地Node.js部署上云(Azure App Service for Linux)遇到的三个问题解决之道
|
1月前
|
前端开发 JavaScript
如何在 JavaScript 中访问和修改 CSS 变量?
【10月更文挑战第28天】通过以上方法,可以在JavaScript中灵活地访问和修改CSS变量,从而实现根据用户交互、页面状态等动态地改变页面样式,为网页添加更多的交互性和动态效果。在实际应用中,可以根据具体的需求和场景选择合适的方法来操作CSS变量。
|
1月前
|
JavaScript C++ 容器
【Azure Bot Service】部署NodeJS ChatBot代码到App Service中无法自动启动
2024-11-12T12:22:40.366223350Z Error: Cannot find module 'dotenv' 2024-11-12T12:40:12.538120729Z Error: Cannot find module 'restify' 2024-11-12T12:48:13.348529900Z Error: Cannot find module 'lodash'
42 11
|
2月前
|
机器学习/深度学习 自然语言处理 JavaScript
信息论、机器学习的核心概念:熵、KL散度、JS散度和Renyi散度的深度解析及应用
在信息论、机器学习和统计学领域中,KL散度(Kullback-Leibler散度)是量化概率分布差异的关键概念。本文深入探讨了KL散度及其相关概念,包括Jensen-Shannon散度和Renyi散度。KL散度用于衡量两个概率分布之间的差异,而Jensen-Shannon散度则提供了一种对称的度量方式。Renyi散度通过可调参数α,提供了更灵活的散度度量。这些概念不仅在理论研究中至关重要,在实际应用中也广泛用于数据压缩、变分自编码器、强化学习等领域。通过分析电子商务中的数据漂移实例,展示了这些散度指标在捕捉数据分布变化方面的独特优势,为企业提供了数据驱动的决策支持。
123 2
信息论、机器学习的核心概念:熵、KL散度、JS散度和Renyi散度的深度解析及应用
|
2月前
|
JavaScript 前端开发 UED
JavaScript 地址信息与页面跳转
JavaScript 地址信息与页面跳转
69 1
|
2月前
|
前端开发 JavaScript Go
JS基础:输出信息的5种方式详解
JS基础:输出信息的5种方式详解
41 1
|
2月前
|
运维 JavaScript Linux
容器内的Nodejs应用如何获取宿主机的基础信息-系统、内存、cpu、启动时间,以及一个df -h的坑
本文介绍了如何在Docker容器内的Node.js应用中获取宿主机的基础信息,包括系统信息、内存使用情况、磁盘空间和启动时间等。核心思路是将宿主机的根目录挂载到容器,但需注意权限和安全问题。文章还提到了使用`df -P`替代`df -h`以获得一致性输出,避免解析错误。
|
3月前
|
JavaScript 前端开发 索引
JavaScript基础知识-数组基于索引访问
关于JavaScript数组基于索引访问的基础知识介绍。
26 1
JavaScript基础知识-数组基于索引访问
下一篇
DataWorks