내보내기(0) 인쇄
모두 확장

Azure에서 시작 작업 실행

업데이트 날짜: 2014년 5월

역할이 시작되기 전에 시작 작업을 사용하여 작업을 수행할 수 있습니다. 수행할 작업에는 구성 요소 설치, COM 구성 요소 등록, 레지스트리 키 설정 또는 장기 실행 프로세스 시작이 포함됩니다.

note참고
VM 역할에는 시작 작업이 적용되지 않습니다.

시작 작업은 역할이 시작되기 전에 수행되는 작업입니다. 시작 작업은 Task 요소 내에서 Startup 요소를 사용하여 ServiceDefinition.csdef 파일에 정의됩니다. 일반적으로 시작 작업은 배치 파일이지만 PowerShell 스크립트를 시작하는 배치 파일 또는 콘솔 응용 프로그램일 수도 있습니다.

환경 변수는 시작 작업으로 정보를 전달하며 로컬 저장소는 시작 작업에서 정보를 전달하는 데 사용될 수 있습니다. 예를 들어 환경 변수는 설치할 프로그램의 경로를 지정할 수 있으며, 파일이 로컬 저장소에 기록될 수 있고 이후에 역할에서 이 파일을 읽을 수 있습니다.

시작 작업은 TEMP 환경 변수로 지정된 디렉터리에 정보와 오류를 기록할 수 있습니다. 시작 작업 중에 클라우드에서 실행되는 경우 TEMP 환경 변수는 C:\Resources\temp\<guid>.<rolename>\RoleTemp 디렉터리로 확인됩니다.

시작 작업은 다시 부팅하는 사이에 여러 번 실행될 수도 있습니다. 예를 들어 시작 작업은 역할이 재활용될 때마다 실행되며 역할 재활용에 재부팅이 포함되지 않을 수도 있습니다. 시작 작업은 문제 없이 여러 번 실행될 수 있도록 하는 방식으로 작성되어야 합니다.

시작 프로세스가 완료되려면 시작 작업은 0인 errorlevel(또는 종료 코드)로 끝나야 합니다. 시작 작업이 0이 아닌 errorlevel로 끝나면 역할이 시작되지 않습니다.

Windows Azure에서 역할 시작 절차는 다음과 같습니다.

  1. 인스턴스가 시작 중으로 표시되고 트래픽을 받지 않습니다.

  2. 모든 시작 작업이 해당 taskType 특성에 따라 실행됩니다.

    • simple 작업은 한 번에 하나씩 동기적으로 실행됩니다.

    • backgroundforeground 작업은 시작 작업과 병렬로 비동기적으로 시작됩니다.

      Warning경고
      IIS는 시작 프로세스에서 시작 작업 단계 중에 완전히 구성되지 않을 수 있으므로 역할 관련 데이터를 사용하지 못할 수도 있습니다. 역할 관련 데이터가 필요한 시작 작업은 Microsoft.WindowsAzure.ServiceRuntime.RoleEntryPoint.OnStart를 사용해야 합니다.

  3. 역할 호스트 프로세스가 시작되고 사이트가 IIS에서 만들어집니다.

  4. Microsoft.WindowsAzure.ServiceRuntime.RoleEntryPoint.OnStart 메서드가 호출됩니다.

  5. 인스턴스는 준비로 표시되고 트래픽이 인스턴스로 라우팅됩니다.

  6. Microsoft.WindowsAzure.ServiceRuntime.RoleEntryPoint.Run 메서드가 호출됩니다.

시작 작업은 ServiceDefinition.csdef 파일에서 Task 요소에 정의됩니다. commandLine 특성은 시작 배치 파일 또는 콘솔 명령의 이름 및 매개 변수를 지정하고, executionContext 특성은 시작 작업의 권한 수준을 지정하며, taskType 특성은 작업이 실행될 방식을 지정합니다.

이 예제에서는 환경 변수 MyVersionNumber가 시작 작업에 대해 만들어지고 "1.0.0.0" 값으로 설정됩니다.

ServiceDefinition.csdef:

    <Startup>
      <Task commandLine="Startup.cmd" executionContext="limited" taskType="simple" >
        <Environment>
          <Variable name="MyVersionNumber" value="1.0.0.0" />
        </Environment>
      </Task>
    </Startup>

다음 예제에서 Startup.cmd 배치 파일은 "The current version is 1.0.0.0" 줄을 TEMP 환경 변수로 지정된 디렉터리의 StartupLog.txt 파일에 씁니다. EXIT /B 0 줄은 시작 작업이 0인 errorlevel로 끝나도록 합니다.

ECHO The current version is %MyVersionNumber% >> "%TEMP%\StartupLog.txt" 2>&1
EXIT /B 0

note참고
시작 배치 파일이 Windows Azure에서 프로젝트에 적절하게 배포되려면(웹 역할의 경우 approot\bin, 작업자 역할의 경우 approot) Visual Studio에서 시작 배치 파일의 출력 디렉터리에 복사 속성이 항상 복사로 설정되어야 합니다.

아래에서는 ServiceDefinition.csdef 파일에 있는 Task 요소의 특성에 대해 설명합니다.

commandLine - 시작 작업에 대한 명령줄을 지정합니다.

  • 선택적인 명령줄 매개 변수가 포함된 명령으로, 시작 작업을 시작합니다.

  • 일반적으로 .cmd 또는 .bat 배치 파일의 파일 이름입니다.

  • PowerShell 스크립트를 시작하는 배치 파일 또는 콘솔 응용 프로그램일 수 있습니다. PowerShell 스크립트를 시작 작업으로 사용하는 방법은 PowerShell 스크립트를 시작 작업으로 사용을 참조하십시오.

executionContext - 시작 작업에 대한 권한 수준을 지정합니다. 권한 수준은 제한되거나 승격될 수 있습니다.

  • limited - 시작 작업이 역할과 동일한 권한으로 실행됩니다. executionContext 요소의 Runtime 특성도 limited이면 사용자 권한이 사용됩니다.

  • elevated - 시작 작업이 관리자 권한으로 실행됩니다. 이 경우 역할의 권한 수준을 높이지 않고도 시작 작업이 프로그램을 설치하고, IIS 구성을 변경하고, 레지스트리를 변경하고, 기타 관리자 수준 작업을 수행할 수 있습니다.

note참고
시작 작업의 권한 수준은 역할의 권한 수준보다 클 수 있습니다. 시작 작업은 elevated 권한을 사용하여 프로그램을 설치하거나 IIS 설정을 변경할 수 있지만, 역할은 보안상의 이유로 limited 권한을 사용할 수 있습니다.

taskType - 시작 작업이 실행되는 방식을 지정합니다.

  • simple 작업은 ServiceDefinition.csdef 파일에 지정된 순서로 한 번에 하나씩 동기적으로 실행됩니다. 한 simple 시작 작업이 0인 errorlevel로 끝나면 다음 simple 시작 작업이 실행됩니다. 실행할 simple 시작 작업이 더 이상 없으면 역할 자체가 시작됩니다.

    note참고
    simple 작업이 0이 아닌 errorlevel로 끝나는 경우 인스턴스가 차단됩니다. 이후의 simple 시작 작업과 역할 자체는 시작되지 않습니다.

    배치 파일이 0인 errorlevel로 끝나도록 하려면 배치 파일 프로세스의 끝에서 EXIT /B 0 명령을 실행합니다.

  • background 작업은 역할의 시작과 병렬로 비동기적으로 실행됩니다.

  • foreground 작업은 역할의 시작과 병렬로 비동기적으로 실행됩니다. foregroundbackground 작업의 주요 차이점은 foreground 작업은 foreground 작업이 실행되는 동안 역할이 계속 실행되도록 한다는 것입니다. 이는 또한 foreground 작업이 끝나지 않으면 역할이 종료되거나 재활용되지 않는다는 의미입니다. background 작업에는 이러한 제한이 없으므로 background 작업이 완료되지 않은 경우에도 역할이 재활용될 수 있습니다.

환경 변수는 시작 작업에 정보를 전달하는 방법입니다. 예를 들어 설치할 프로그램이 포함된 BLOB의 경로, 역할에서 사용할 포트 번호 또는 시작 작업의 기능을 제어할 설정을 넣을 수 있습니다.

시작 작업에 대한 환경 변수의 두 가지 종류에는 RoleEnvironment 클래스의 멤버에 따라 정적 환경 변수와 환경 변수가 있습니다. 두 환경 변수는 ServiceDefinition.csdef 파일의 Environment 섹션에 있으며 Variable 요소와 name 특성을 사용합니다.

정적 환경 변수는 value 요소의 Variable 특성을 사용합니다. 위의 예제에서는 정적 값 "1.0.0.0"이 있는 환경 변수 MyVersionNumber를 만듭니다. 또 다른 예는 StagingOrProduction 환경 변수의 값에 따라 다른 시작 작업을 수행하기 위해 "staging" 또는 "production" 값으로 수동으로 설정할 수 있는 StagingOrProduction 환경 변수를 만드는 것입니다.

RoleEnvironment 클래스의 멤버를 기반으로 하는 환경 변수는 value 요소의 Variable 특성을 사용하지 않습니다. 대신 적절한 RoleInstanceValue 특성 값이 있는 xPath 자식 요소가 RoleEnvironment 클래스의 특정 멤버를 기반으로 환경 변수를 만드는 데 사용됩니다. 다양한 RoleEnvironment 값에 액세스하기 위한 xPath 특성의 값은 Azure의 xPath 값에서 찾을 수 있습니다.

예를 들어 인스턴스가 계산 에뮬레이터에서 실행되고 있으면 "true"이고 클라우드에서 실행되고 있으면 "false"인 환경 변수를 만들려면 다음 VariableRoleInstanceValue 요소를 사용합니다.

    <Startup>
      <Task commandLine="Startup.cmd" executionContext="limited" taskType="simple">
        <Environment>
          
          <!-- Create the environment variable that informs the startup task whether it is running 
               in the Compute Emulator or in the cloud. "%ComputeEmulatorRunning%"=="true" when 
               running in the Compute Emulator, "%ComputeEmulatorRunning%"=="false" when running 
               in the cloud. -->

          <Variable name="ComputeEmulatorRunning">
            <RoleInstanceValue xpath="/RoleEnvironment/Deployment/@emulated" />
          </Variable>

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

참고 항목

표시:
© 2014 Microsoft