Microsoft MVP성태의 닷넷 이야기
글쓴 사람
정성태 (techsharer at outlook.com)
홈페이지
첨부 파일
 
(연관된 글이 2개 있습니다.)

Azure Cloud Service 배포시 사용자 정의 작업을 추가하는 방법

Azure Cloud Service에 배포 시 해당 VM 머신에 또 다른 작업을 하고 싶을 수가 있습니다. 가령, 특정 S/W를 설치한다든지 환경 변수를 추가하는 등의 작업이 될텐데요.

이런 경우 "Azure Cloud Service" 프로젝트에 포함된 ServiceDefinition.csdef 파일의 "<Startup />" 노드를 이용할 수 있습니다.

How to configure and run startup tasks for a cloud service
; https://azure.microsoft.com/en-us/documentation/articles/cloud-services-startup-tasks/

대개의 경우 작업이 1개로 끝나지 않을 것이므로 예제에서 보이듯이,

<ServiceDefinition name="MyService" xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceDefinition">
    <WebRole name="WebRole1">
        ...
        <Startup>
            <Task commandLine="Startup.cmd" executionContext="limited" taskType="simple">
            </Task>
        </Startup>
    </WebRole>
</ServiceDefinition>

startup.cmd 파일로 .bat처럼 작업을 처리하면 됩니다.

수행할 명령어를 담은 startup.cmd 파일은 "Web Application" 프로젝트에 포함시키고 "Copy to Output Directory" 옵션을 "Copy if newer"로 설정해 반드시 /bin 폴더에 복사하도록 설정해야 합니다. (즉, Azure 배포 모듈은 "<Startup />"에 기술된 파일을 웹 응용 프로그램의 /bin 폴더에서 찾는다는 의미가 됩니다.)

그러고 보니, 예전에 이 방법을 통해 방화벽 포트를 여는 방법에 대해 소개했었죠. ^^

Azure - 네트워크 포트 여는 방법
; https://www.sysnet.pe.kr/2/0/1319

또한, <Task /> 노드는 1개 이상 설정할 수 있습니다. 그런 경우 위에서부터 차례대로 수행되지만 만약 선행 작업이 오류를 반환하는 경우 이후의 작업은 시도도 하지 않고 배포는 실패하게 됩니다.

당연하겠지만, Task/@commandLine의 인자로 .cmd 확장자 뿐만 아니라 .exe를 주는 것도 가능합니다.

<Startup>
    <Task commandLine="Installer.exe" executionContext="elevated" taskType="simple">
    </Task>
</Startup>

위의 설정은 installer.exe 파일을 /bin 폴더 하위에서 찾아 "elevated" 권한, 즉 관리자 권한으로 상승된 상태에서 실행하라는 것을 의미합니다.

.cmd나 .exe로 만들때 주의할 점은, 반드시 종료 코드가 0이어야만 다음 단계의 배포 작업으로 넘어간다는 것입니다. 이를 위해 .cmd 파일에서는 파일 마지막에 다음과 같이 명시적으로 종료 코드를 줄 수 있고,

EXIT /b 0

.exe의 경우 코드에서 반드시 0을 반환해야 합니다.

class Program
{
    static int Main(string[] args)
    {
        return 0;
    }
}

0이외의 값을 반환하면 웹 응용 프로그램 배포 단계까지 연결되지 않으므로, 만약 중요하지 않은 Task를 추가한 경우라면 필요 이상으로 오류 명시를 하지 않는 것이 좋습니다.




참고로, Task의 실행 환경에 적용되는 환경 변수를 설정하는 것도 가능합니다.

Define environment variables before a role starts
; https://azure.microsoft.com/en-us/documentation/articles/cloud-services-startup-tasks-common/

<Startup>
    <Task commandLine="Installer.exe"  executionContext="elevated" taskType="simple">
        <Environment>
            <Variable name="INSTALL_IN_AZURE" value="1" />
        </Environment>
    </Task>
</Startup>




[이 글에 대해서 여러분들과 의견을 공유하고 싶습니다. 틀리거나 미흡한 부분 또는 의문 사항이 있으시면 언제든 댓글 남겨주십시오.]

[연관 글]






[최초 등록일: ]
[최종 수정일: 8/11/2016]

Creative Commons License
이 저작물은 크리에이티브 커먼즈 코리아 저작자표시-비영리-변경금지 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.
by SeongTae Jeong, mailto:techsharer at outlook.com

비밀번호

댓글 작성자
 




[1]  2  3  4  5  6  7  8  9  10  11  12  13  14  15  ...
NoWriterDateCnt.TitleFile(s)
13982정성태8/2/20256개발 환경 구성: 753. CentOS 7 컨테이너 내에서 openssh 서버 호스팅
13981정성태8/1/2025262오류 유형: 971. CentOS 7에서 yum 사용 시 "Could not resolve host: mirrorlist.centos.org; Unknown error"
13980정성태7/31/2025311Linux: 119. eBPF - BPF_PROG_TYPE_CGROUP_SOCK 유형에서 정상 동작하지 않는 BPF_CORE_READ (2)
13979정성태7/30/2025326Linux: 118. eBPF - BPF_PROG_TYPE_CGROUP_SOCK 유형에서 정상 동작하지 않는 BPF_CORE_READ
13978정성태7/29/2025439오류 유형: 970. 파일 복사 시 "Data error (cyclic redundancy check). (0x80070017)" 에러
13977정성태7/28/2025556닷넷: 2349. C# 14 - (5) 문자열 리터럴을 utf-8 인코딩으로 저장파일 다운로드1
13976정성태7/25/2025819닷넷: 2348. C# - 카카오 카나나 모델 + Microsoft.ML.OnnxRuntimeGenAI 예제파일 다운로드1
13975정성태7/23/2025949닷넷: 2347. C# 14 - (4) 형식 인자가 없는 제네릭 타입의 nameof 지원파일 다운로드1
13974정성태7/22/20251297닷넷: 2346. C# 14 - (3) Span 타입과 배열 간의 암시적 형변환파일 다운로드1
13973정성태7/21/20251170닷넷: 2345. C# - 배열 및 Span의 공변성파일 다운로드1
13972정성태7/21/20251363닷넷: 2344. C#의 Identity conversion 의미파일 다운로드1
13971정성태7/17/20251442닷넷: 2343. C# 14 - (2) 속성 구문에서 문맥 키워드로 추가되는 field 예약어파일 다운로드1
13970정성태7/17/20251389닷넷: 2342. C# 14 - (1) (예약)
13969정성태7/17/20251436닷넷: 2341. snap으로 설치한 .NET 리눅스 실행 환경
13968정성태7/16/20251319오류 유형: 969. lddtree - TypeError: 'type' object is not subscriptable
13967정성태7/16/20251846오류 유형: 968. snap으로 설치한 "dotnet run" 실행 시 "undefined symbol: _dl_audit_symbind_alt, version GLIBC_PRIVATE" 오류
13966정성태7/15/20252395디버깅 기술: 223. WinDbg - .kframes 명령어
13965정성태7/11/20251679오류 유형: 967. 디버깅 모드로 실행 시 "Could not find file 'C:\Program Files\IIS Express\Oracle.DataAccess.Common.Configuration.Section.xsd'" 예외
13964정성태7/10/20252342닷넷: 2340. C# - Win32 Multimedia Timer 주기파일 다운로드1
13963정성태7/8/20251885VS.NET IDE: 202. Visual Studio 2022 + Copilot 기본 사용법
13962정성태7/7/20251900스크립트: 79. 파이썬 - onnxruntime_genai에서 지원하지 않는 모델 사용
13961정성태7/5/20251608디버깅 기술: 222. WinDbg 분석 사례 - IISreset 시점에 w3wp.exe의 crash 발생
13960정성태7/3/20252797개발 환경 구성: 752. ProcDump - C/C++ 예외 코드 필터를 지정한 덤프 생성 [2]
13959정성태6/25/20251820오류 유형: 966. Ubuntu - ping: connect: Network is unreachable
13958정성태6/21/20252497닷넷: 2339. C# - Phi-4-multimodal 모델의 GPU 가속 방법 (ORT 사용)파일 다운로드1
[1]  2  3  4  5  6  7  8  9  10  11  12  13  14  15  ...