在Azure的definition文件里,我们可以定义一些环境变量,这里是个例子:
<WorkerRole>
<Startup>
<Task taskType="background" commandLine="my.cmd"
executionContext="limited">
<Environment>
<Variable value="my_value" />
</Environment>
</Task>
</Startup>
<Runtime>
<Environment>
<Variable value="my_value2" />
</Environment>
</Runtime>
</WorkerRole>
Azure的lifecycle提供了类似于servlet的start和rutnime概念,在definition里的环境变量定义是分开的,也就是说startup里的环境变量在runtime里是看不到的,反之亦然。所以如果要开发的是java程序,要确保java程序能拿到环境变量,要先确定你的java程序是在什么时候启动的。Azure的eclipse插件创建的工程里,java程序都是在startup的时候启动的,那这样的话环境变量就要定义在Startup里了。但是这种方式我们能定义自己的环境变量,但是还是拿不到Azure的运行信息(比如当前运行的instance的编号等待)。 Azure有提供一些API用来获取Azure运行相关信息的,但是,最简单的可能还是去获取环境变量了(如果你只要这些信息的话)。
Azure默认提供了以下的一些环境变量,这些环境变量在Startup和Runtime里都有, 所有标有星号(*)的变量都在Azure portal里可以看到:
@AccountUsername *– Azure远程桌面登陆的时候的用户名,在CSCFG文件中可配置 @AccountEncryptedPassword * – 加密后的远程桌面密码,使用Host Service里的SSL证书加密,在CSCFG文件中可配置 @AccountExpiration *– 远程桌面用户过期时间,在CSCFG文件中可配置 @ConnectionString – diagnostics 使用的为了连接Azure Storage使用的Connection String,在CSCFG文件中可配置. DiagnosticStore – diagnostics 使用的为了连接Azure Storage使用的Storage account,在CSCFG文件中可配置. RdRoleId – Role instance 的唯一id,例子:eaaa6a386255466dada9dd158c5d4008.WebTest_IN_0 RoleRoot – Azure role代码的根目录, 可以在%RoleRoot%\AppRoot路径下找到放在代码中的文件RdRoleRoot – 内容和RoleRoot一样 RoleDeploymentID * – Host service的当前deployment的id,和RdRoleId的前面一部分是一致的,比如:eaaa6a386255466dada9dd158c5d4008 RoleInstanceID * – 当前instance的id,比如:WebTest_IN_0 RoleName * – 当前role的名字比如: WebTest __WaRuntimeAgent__ – 运行在系统中的Azure安装的agent的id(Azure在所有instance中都会安装agent来收集一些信息) WA_CONTAINER_SID – Azure容器id
关键字:Azure, 环境变量,获取Instance信息