Windows Azure 들여다보기

실제 Windows Azure OS는 어떤 구성을 사용하고 어떤 설정을 바탕으로 움직이는것일까요? 물론, 충분한 양의 문서와 SDK와 API로 모든 이론적인 설명은 가능합니다. 하지만 좀 더 깊이 들어가서 알아볼 필요가 있을 때도 있습니다. 인터넷 서핑 중에 찾은 흥미로운 블로그 아티클 하나를 소개하고자 합니다.


 


출처: Windows Azure Team에서 Senior Program Manager로 근무 중인 David Lemphers의 블로그 (http://blogs.msdn.com/davidlem)에서 찾은 아티클 (http://blogs.msdn.com/davidlem/archive/2009/07/06/looking-inside-windows-azure.aspx) 입니다.


 


엄밀하게 말해서, Windows Azure OS를 실행하는 VM의 상황은 사실 블랙박스나 다름없습니다. 정상적으로 프로그래밍하고 테스트했다면 반 정도의 확률은 정상적으로 실행되지 않을 가능성도 있는 셈입니다. (기동에 실패하는 일보다는, 원하는 대로 서비스가 동작하지 않을 가능성을 의미합니다.) 특히, Worker Role의 경우 Web Role과는 달리 Custom Configuration에 강한 의존을 할 수 밖에 없는데요, 네트워크 서비스 등이 예상대로 동작하지 않으면 굉장히 큰 고민속에 빠지게 됩니다. 이런 곤란한 상황을 빠져나가려면 어떻게 하면 좋을까요?


 



 


배포할 Windows Azure 프로젝트의 .CSDEF 파일에 enableNativeCodeExecution 어트리뷰트의 값을 “true”로 명시적으로 설정하는 것으로부터 솔루션을 시작할 수 있습니다. (최근의 SDK와 OS의 경우, 이 설정은 기본적으로 ‘true’이지만 명시적으로 설정하는 것도 좋을것 같습니다.)


 


그리고 아래와 같이 간단한 asp.net 페이지에 사용할 코드 비하인드를 만듭니다.


 

newProc.StartInfo.UseShellExecute = false;
newProc.StartInfo.RedirectStandardOutput = true;
newProc.StartInfo.FileName = “cmd”;
newProc.StartInfo.Arguments = “/c ” + txtCommand.Text;

newProc.EnableRaisingEvents = false;
newProc.Start();

sr = newProc.StandardOutput;

txtStatus.Text += String.Format(“{0}rn”, sr.ReadToEnd());

newProc.Close();


위의 코드가 하는 역할은 단순합니다. Windows 명령줄 인터프리터를 대신 실행해주고 대신 결과를 출력해주는 것입니다. 그리고, Native Code의 실행을 허용했으므로 거의 대부분의 명령이 정상적으로 실행될 수 있을 것입니다. (관리자 권한 아래에서 실행되지는 않습니다.)


 


아래의 스크린 샷들은 실제 명령의 수행 결과들을 보여주는 것입니다. 그리고 이 블로그 아티클의 저자는 NETSTAT 명령을 원격에서 실행해보고, Tomcat Instance가 필요로하는 8080포트가 이미 점유된 상태이기 때문에 원하는대로 작동하지 않음을 확인할 수 있었다고 합니다.


 


ps. 이와 같은 도구는 확실히 디버깅이나 문제 진단에는 유용할 수 있지만, 아무리 클라우드 환경이라고 할지라도 이와 같은 도구가 개방되어있을 경우, 악용될 소지가 크기 때문에, 실제 배포 단계에서는 이러한 도구가 포함되지 않도록 유의할 필요가 있겠습니다.


 


샘플 페이지의 예시

샘플 페이지의 예시


NETSTAT 명령 실행 결과

NETSTAT 명령 실행 결과

TASKLIST 명령 실행 결과

TASKLIST 명령 실행 결과

댓글 남기기