Как получить доступ к локальному хранилищу Azure из задачи запуска?

В моей задаче запуска роли Azure мне нужно развернуть собственное приложение C++. Я делаю это, запуская набор действий из файла .cmd.

Проблема в том, что на диске E:\, где находится содержимое роли и с которого запускается задача запуска, свободного места всего около 1 гигабайта, а этого недостаточно для развертывания этого приложения.

Я, конечно, могу запросить локальное хранилище в определении службы, но я не могу найти, как получить фактический путь, где будет расположено локальное хранилище, из задачи запуска — для этого есть RoleEnvironment.GetLocalResource(), но, похоже, оно доступно только из код роли, и мне нужно сделать то же самое из задачи запуска.

Как определить путь к моему локальному хранилищу из задачи запуска?


person sharptooth    schedule 13.07.2011    source источник


Ответы (3)


Для этого вы можете написать C# или PowerShell. В настоящее время я предпочитаю следующий сценарий PowerShell:

param($name)
[void]([System.Reflection.Assembly]::LoadWithPartialName("Microsoft.WindowsAzure.ServiceRuntime"))
write-host ([Microsoft.WindowsAzure.ServiceRuntime.RoleEnvironment]::GetLocalResource($name)).RootPath.TrimEnd('\\')

который я затем вызываю из командного файла по мере необходимости:

powershell -c "set-executionpolicy unrestricted"
for /f %%p in ('powershell .\getLocalResource.ps1 MyStorage') do set LOCALPATH=%%p

РЕДАКТИРОВАТЬ: см. также http://blog.smarx.com/posts/using-a-local-storage-resource-from-a-startup-task, тот же ответ, но в моем блоге.

person user94559    schedule 13.07.2011
comment
Также стоит прочитать, как определить сценарий запуска: msdn.microsoft.com/en -us/library/gg456327.aspx - person Marc LaFleur; 14.07.2011

Если я правильно помню, мы используем Azure Bootstrapper. Это удобно, и вам не придется разбираться со сложностями PowerShell, если вы с ним не знакомы.

В данный момент я не уверен на 100%, но я помню, что у него также есть доступ к локальным ресурсам, поэтому вы можете его использовать.

person Anže Vodovnik    schedule 13.07.2011

Как определить путь к моему локальному хранилищу из задачи запуска?

Используйте локальное хранилище для хранения файлов во время запуска

<!-- Create the Local Storage used by the startup task. -->
    <LocalResources>
      <LocalStorage name="StartupLocalStorage" sizeInMB="5"/>
    </LocalResources>

    <Startup>
      <Task commandLine="Startup.cmd" executionContext="limited" taskType="simple">
        <Environment>

          <!-- Create the environment variable that informs the startup task where to find its Local 
               Storage. %PathToStartupStorage% resolves to the fully qualified path to the location 
               of the Local Storage.-->
          <Variable name="PathToStartupStorage">
            <RoleInstanceValue xpath="/RoleEnvironment/CurrentInstance/LocalResources/LocalResource[@name='StartupLocalStorage']/@path" />
          </Variable>

        </Environment>
      </Task>
    </Startup>

И вы можете получить доступ к локальной переменной окружения PathToStartupStorage , %PathToStartupStorage% из вашего сценария запуска.

Дополнительные ссылки: http://msdn.microsoft.com/en-us/library/azure/hh974419.aspx

person jbian    schedule 25.04.2014