Visual Studio로 Azure Function 개발하기

Azure Function은 Azure App Service에 포함된 기능 중 하나인 Azure Web Job을 별도의 상품으로 분리하여 출시하였습니다. 하지만 아쉽게도 Visual Studio의 풍부한 IDE 지원을 아직까지도 직접 받을 수 있는 상태는 아닙니다. 또한 Microsoft Docs 등에 공개된 방법도 간접적으로 Azure Function의 설정을 이용한다거나, Node용 CLI를 활용하는 정도에서 언급되는 것이 전부입니다.

소개하려는 내용은 Visual Studio의 콘솔 프로젝트와 Azure Storage Emulator를 이용하여 C# Azure Function을 C# Script가 아닌 통상적인 C# Compiler 기반 프로젝트로 개발과 테스트를 진행하고, 이것을 C# Azure Function으로 마이그레이션하는 방법에 관한 것입니다. 만약 LINQPAD Premium Version을 구입하여 사용 중이라면, 같은 작업을 LINQPAD에서도 실행할 수 있으니 더 적극적으로 Azure Function을 개발하실 수 있을 것입니다.

시작하기

Azure Web Job 기반이기 때문에, 기존에 .NET용으로 출시한 Web Job SDK와 각종 Extension을 Azure Function 사이에는 어느 정도 호환성이 있습니다. 다시 말해서 C# 스크립트로 무언가 새로운 코드를 작성한다기 보다, 기존의 SDK를 C# 스크립트에서 사용할 수 있도록 포장한 것이 Azure Function의 본질에 가깝습니다. 아쉽게도 완전히 같은 코드 베이스는 아니지만, 호환성이 있기 때문에 취할 수 있는 이점이 있고, 그 부분을 활용하는 것입니다.

시작을 위하여 다음의 소프트웨어 스택이 설치되어있는지 점검합니다.

  • Azure Storage Emulator (Azure Cloud Service SDK에 포함되어있습니다.)
  • Visual Studio 2015 Community Edition 이상의 IDE
  • .NET Framework 4.6 이상

만약 Windows 개발 환경이 아닌 경우 Azure Storage Emulator는 제공되지 않기 때문에 어쩔 수 없이 실제 Azure Storage 계정을 만들어 연결해야 합니다. IDE의 경우 Visual Studio Code, Visual Studio for Mac, Rider를 대신 활용할 수 있습니다. 그리고 Mono를 설치하여 개발을 진행할 수 있습니다. 아쉽게도 .NET Core는 2017년 4월 현재 지원되지 않습니다.

선호하는 IDE로 콘솔 프로젝트를 만든 다음, 다음의 NuGet 패키지들을 설치합니다.

  • Microsoft.Azure.WebJobs (2.0.0 이상)
  • Microsoft.Azure.WebJobs.Extensions (2.0.0 이상)

그 다음 Main 메서드를 다음과 같이 코딩합니다.

var jobHostConfig = new JobHostConfiguration("UseDevelopmentStorage=true");
jobHostConfig.UseCore();
jobHostConfig.UseFiles();
jobHostConfig.UseTimers();
jobHostConfig.UseDevelopmentSettings();

using (var cts = new CancellationTokenSource())
using (var jobHost = new JobHost(jobHostConfig))
{
    jobHost.StartAsync(cts.Token);
    Console.WriteLine("Press Ctrl + C to stop the service.");
    Console.CancelKeyPress += (s, e) => cts.Cancel();
    cts.Token.WaitHandle.WaitOne(Timeout.Infinite);
}

Local Azure Storage Emulator를 사용할 수 있는 Windows 환경에서만 UseDevelopmentStorage=true 연결 문자열을 지정하고, 그 외 환경에서는 실제 Azure Storage Account의 연결 문자열을 해당 속성 블레이드에서 찾아 대입해야 합니다.

그리고 Azure Function에 호스팅하려는 함수를 다음과 같이 코딩합니다.

public static void Run(
    [TimerTrigger("* * * * * *", UseMonitor = true)]
    TimerInfo myTimer,
    TraceWriter log)
{
    log.Info($"C# Timer trigger function executed at: {DateTime.Now}");
}

TimerTrigger가 TimerInfo 메서드 인자에 지정되는 것에 유의하여 위와 같이 코딩합니다. TimerTrigger에 지정되는 첫 인자는 타이머의 실행 간격을 나타냅니다. Crontab에 사용되는 반복 간격 표시 문법을 참조하여 값을 지정하도록 구성하는 것이 Azure Function으로 마이그레이션 할 때 편리하므로 해당 문법을 익히는 것을 권장합니다.

그리고 실행이 잘 되는지 확인하기 위하여, Azure Storage Emulator를 시작하고, F5 키를 눌러 샘플 프로그램을 실행합니다. 다음과 비슷하게 출력되면 정상적으로 실행되는 것입니다.

Press Ctrl + C to stop the service.
Development settings applied
Found the following functions:
TimerSample.Run
Singleton lock acquired (1ce1ebaf1e584866b90488a9e1b5d19f/TimerSample.Run.Listener)
The next 5 occurrences of the schedule will be:
2017-04-24 오전 12:16:59
2017-04-24 오전 12:17:00
2017-04-24 오전 12:17:01
2017-04-24 오전 12:17:02
2017-04-24 오전 12:17:03
Job host started
Executing 'TimerSample.Run' (Reason='Timer fired at 2017-04-24T00:16:59.0273081+09:00', Id=aa02dc0a-5a89-4ebd-bf08-8182cce53a0c)
C# Timer trigger function executed at: 2017-04-24 오전 12:16:59
Executed 'TimerSample.Run' (Succeeded, Id=aa02dc0a-5a89-4ebd-bf08-8182cce53a0c)
Executing 'TimerSample.Run' (Reason='Timer fired at 2017-04-24T00:17:00.0061625+09:00', Id=f8161e5d-c989-4d2d-9a49-cb5d9d269134)
C# Timer trigger function executed at: 2017-04-24 오전 12:17:00
Executed 'TimerSample.Run' (Succeeded, Id=f8161e5d-c989-4d2d-9a49-cb5d9d269134)
...

마이그레이션

이렇게 만들어진 Azure Function이 정말 잘 수행되는지 점검할 때 활용할 수 있는 유용한 서비스가 하나 있습니다. Try Azure App Service를 이용하면 실제 Microsoft Azure 구독과 무관하게, Microsoft 계정 이외에도 Google (GMAIL), Facebook, Github 계정으로 로그인하여 1시간짜리 테스트 Azure Function 계정을 발급받을 수 있습니다.

https://azure.microsoft.com/ko-kr/try/app-service/ 에 방문하여 새로운 계정을 하나 생성합니다.

그 다음, 위의 Run 메서드의 코드를 복사합니다. 단, 몇 가지 복사 전에 수정하거나 확인해야 할 부분이 있습니다.

  • 개발 중에 참조한 NuGet 패키지의 참조를 지정해야 합니다. project.json 파일은 기본적으로 만들어지지 않으므로 다음과 같은 뼈대를 만들고, 현재 개발한 프로젝트 내의 package.config 파일의 내용을 여기로 복사해서 넣어야 합니다. 종속 관계에 따라 자동으로 설치되는 패키지들은 제외하고, 실제로 추가했던 패키지만 지정해서 넣으면 됩니다.
{
  "frameworks": {
    "net46":{
      "dependencies": {
        "Microsoft.ProjectOxford.Face": "1.1.0"
      }
    }
   }
}
  • NuGet 패키지가 아닌 BCL 내 어셈블리 또는 개별 .NET DLL 파일을 참조했을 경우에는 C# 스크립트만의 고유 문법인 #r 지시자를 사용하여 참조를 지정합니다.
    • GAC에 설치했거나 별도로 수동 참조한 .NET DLL 파일은 bin 폴더로 직접 업로드해야 합니다.
    • x86용으로 명시하여 빌드한 DLL이거나, 설치 준비 및 사용 과정에서 시스템 레지스트리 변경 등의 작업이 필요한 경우에는 사용할 수 없습니다.
  • 함수를 옮겨 담기 전에는 메서드 이름과 시그니처가 처음 Azure Function을 만들었을 때와 동일한지 점검합니다. 만약 정상적으로 실행되지 않는다면 function.json 파일의 내용을 참고합니다.
{
  "disabled": false,
  "bindings": [
    {
      "name": "myTimer",
      "type": "timerTrigger",
      "direction": "in",
      "schedule": "0 */5 * * * *"
    }
  ]
}
  • 마지막으로 앞에서 TimerTrigger나 BlobTrigger, 혹은 ServiceBusTrigger와 같이 트리거에 지정한 인자의 값을 확인하여 function.json 파일을 수정하도록 합니다. 위의 예제의 경우 매 초 마다 실행되도록 하였으므로, function.json의 schedule 프로퍼티를 “* * * * * *”으로 바꾸어야 합니다.

마무리

이렇게 해서 만들어진 최종 버전의 CSX 파일을 실제 Azure Function 서비스로 배포하는 것은 자유롭게 할 수 있습니다. 연속성 있는 개발을 위해서, 버전 관리 저장소를 통하여 배포하도록 설정해두면 더욱 편리할 것입니다.

이 글을 작성하면서 좀 더 고민해볼 만한 주제가 있다면, 아래와 같은 부분들이 있을 것 같습니다.

  • HTTP Trigger, Web Hook Trigger는 Web Job과 사실 직접적인 상관이 없으며, ASP.NET Web API의 서브셋에 가깝습니다. 다만 TraceWriter 클래스를 사용하는 부분만이 온전히 Web Job에 관련이 있는 부분입니다. 이 부분을 감안하여 DummyTraceWriter 클래스를 만들어 단위 테스트를 하도록 할 수 있을 듯 합니다.
class DummyTraceWriter : TraceWriter
{
    public DummyTraceWriter() : base(default(TraceLevel)) { }
    public override void Trace(TraceEvent traceEvent) => Console.WriteLine(traceEvent);
}
  • LINQPAD용 스크립트 템플릿을 만들어 공유한다면 정식 SDK가 출시되기 전에 더 많이 Azure Function을 개발하고 테스트할 수 있을 것이라고 생각합니다.
  • 일부 네이티브 코드를 포함하는 NuGet 패키지는 아마도 64비트용으로 빌드된 패키지를 사용하는 것이 실행에 문제가 없을 것으로 예상합니다. 32비트 버전의 패키지도 별도 EXE 파일로 실행하는 경우에는 Windows-on-Windows 호환성 기능으로 실행은 보장될 수 있을 것입니다.

더 세부적인 사항, 보충할 부분, 혹은 수정해야 할 부분에 대한 의견을 주시면 큰 도움이 될 것 같습니다.

[Quick Tip] Azure 리소스 삭제 및 수정 방지

모든 엔터프라이즈 시스템이 그러하듯, Azure 역시 계정의 역할과 소속된 그룹의 권한 범위에 따라 접근 가능한 리소스 그룹과 그룹 내에 속한 리소스들을 어디까지 조회하고, 설정을 편집하거나, 삭제할 수 있는지를 정할 수 있게 되어있습니다. 안전하게 리소스를 관리하기 위해서는 전체 권한을 가지고 있는 사용자로서 Azure 포털이나 서비스를 이용하는 것 보다는 역할이 축소된 사용자로서 로그인하여 관리하는 것이 안전합니다.

이와는 별개로, 전체 권한을 가진 사용자가 실수로 리소스를 편집하거나 삭제하는 것을 방지해야 할 필요가 있습니다. 이러한 경우 유용하게 사용할 수 있는 기능이 구독 및 Resource Group 단위 이하부터 지정 가능한 잠금 기능입니다.

잠금 기능 설정의 범위

잠금 기능은 앞의 예제에서 보인 것 처럼 리소스 그룹 단위로 설정할 수도 있고, 리소스 그룹 내의 모든 하위 리소스에 대하여 설정하는 것도 가능하며, 구독 수준에서 잠금을 설정하는 것도 가능합니다. 즉, Azure에서 관리할 수 있는 모든 리소스에 대해 잠금 설정이 가능하므로 안정 장치로서 적절하게 활용할 수 있습니다.

잠금 기능의 설정과 활용

잠금 기능은 설정의 수정을 방지하는 읽기 잠금과 리소스의 삭제를 방지하는 삭제 잠금이 있습니다. 상위 개체에 대해서 잠금을 설정하면 하위 개체에 자동으로 설정이 상속되어, 상위 개체의 잠금을 삭제하지 않는 한 권한의 유무와 상관없이 해당 잠금 설정이 적용됩니다.

예를 들어, 리소스 그룹을 하나 만들고 해당 리소스 그룹에 다음과 같이 삭제 잠금을 지정했다고 가정하겠습니다.

리소스 그룹 범위에 대해서 delete-protection 이라는 이름으로 설정하였기 때문에, 이 그룹 내에 속한 Azure 서비스 수준에서 관리되는 리소스 (가상 컴퓨터, 저장소, 관리되는 디스크 등)는 삭제 권한을 가진 사용자라고 하더라도 리소스를 삭제할 수 없게 됩니다. 예를 들면 다음과 같은 화면을 삭제 시에 만나게 됩니다.

잠금 기능 자동화

잠금 기능을 REST API를 이용하여 관리할 수도 있습니다. 이에 대한 자세한 내용은 https://docs.microsoft.com/ko-kr/azure/azure-resource-manager/resource-group-lock-resources 문서를 참조하십시오.

Saturday Azure Live 1702 행사 후기

안녕하세요. Azure 한국 사용자 그룹 운영진 남정현입니다.

Saturday Azure Live 1702 행사에 함께해주신 청중 및 스피커 여러분들께 진심으로 감사드립니다. 추운 날씨에도 불구하고 참석해주셔서 성황리에 행사가 마무리될 수 있어서 기쁩니다. 행사 장소를 제공해주신 마이크로소프트 멜팅팟 프로그램 관계자 여러분들께도 깊은 감사의 인사를 드립니다.

발표 자료 및 행사 실황 공유

행사 사진

이 날 행사는 총 4개의 세션으로 구성되었습니다.

청중 사전 설문 (접수 시점)

행사에 참석해주신 분들께서 사전 응답해주신 내용은 다음과 같습니다. 총 46명께서 응답해주셨습니다.

  • 현재 어떤 포지션으로 일하고 계십니까?
    • 백엔드 개발: 15명
    • 시스템 엔지니어링: 8명
    • 웹 프론트엔드 개발: 7명
    • 모바일 앱 개발: 5명
    • 해당 없음: 5명
    • 스마트 클라이언트, 데스크탑, 패키지 SW 개발: 3명
    • 데이터베이스 관리: 2명
    • 임베디드 개발: 1명
  • 어떤 클라우드 컴퓨팅 플랫폼에 대한 경험을 해보셨습니까? (중복 가능)
    • Microsoft Azure: 23명
    • Amazon Web Service: 22명
    • 경험 없음: 9명
    • Google Cloud Platform: 5명
    • KT UCLOUD: 5명
    • 자체 데이터센터 또는 클라우드 플랫폼: 4명
    • IBM Bluemix: 2명
    • Aliyun Cloud: 2명
    • Softlayer: 1명
  • 회사가 어떤 업종에 속합니까? 학생이거나 대학원생이신 경우 “없음”으로 입력하여 주십시오. (중복 가능)
    • 정보통신일반 (SI, 컨설팅 포함): 22명
    • 학생/대학원생/기타: 8명
    • 소프트웨어 개발: 6명
    • 전자상거래 및 금융: 5명
    • 게임 개발: 3명
    • 헬스케어: 2명
    • 교육: 1명

설문지 응답 및 청중 세션 평가

아울러 이번 행사에서는 설문지를 배포하여 행사에 대한 청중 평가와 피드백을 처음으로 수집하였습니다. 아래는 평가와 의견을 정리한 내용입니다. 총 18분께서 응답해주셨습니다.

  • “Saturday Azure Live 1702” 행사 만족도 (중복 가능)
    • 대체적으로 괜찮았다: 8명
    • 다음에 다시 오겠다: 10명
    • 의견
      • 참석자와의 상호 교류가 아쉽습니다. 강의 위주로 구성된 것 같습니다. 유익한 내용이 많아 감사드립니다.
      • 좋은 내용으로 세션 열어주셔서 감사합니다.
      • 고생 많으셨습니다. SAL 파이팅입니다!!!
      • 대체로 만족합니다. 기본 지식이 없는 대상자에게도 맞는 행사도 열어주시면 좋을 것 같습니다.
      • 발표자분들 정말 고생 많으셨습니다.
      • Azure에 대한 새로운 소식이나 기본 Tutorial 짧게라도 하고 넘어가면 초보자에게 큰 도움이 되겠음
      • 좋은 세미나 감사합니다!!!
      • 고생하셨습니다.
      • AI 연동 서비스(에 관한 내용을 다루어주셨으면 좋겠습니다.)
  • 세션 1 “Azure와 C#으로 만드는 모바일 서비스” 에 대한 평가
    • 생각과 다르다: 1명
    • 어려웠다: 3명
    • 만족한다: 14명
    • 의견
      • 유익했습니다.
      • 강의 너무 좋았습니다. PowerBI와 Azure, UWP, Xamarin 크로스플랫폼 부분에 대한 세션도 좋은 것 같습니다.
      • 디버깅 – 출력 창에서 정확히 뭘 했는지 모르겠음. Push 설명 자세하고 좋음
      • 감사합니다. 많은 정보 얻어갑니다!
      • Azure 세션이긴 하나, UWP 개발의 가장 기본 내용 조금만 더 설명해주세요!
      • Demo가 어려웠음
      • C#을 이용한 윈도 모바일 + 윈도 앱에 대해서 잘 보았습니다.
      • 너무 많은 주제를 전달하려 하다보니 강의 시간과 일관성이 떨어져 아쉬웠습니다.
  • 세션 2 “Event Sourcing on Azure” 에 대한 평가
    • 생각과 다르다: 2명
    • 어려웠다: 2명
    • 만족한다: 14명
    • 의견
      • 핵심 내용 설명이 부족했습니다.
      • 모르고 있었던 CQRS 잘 설명해주셔서 감사합니다. 서비스 구현에 정말 도움이 많이 될 것 같습니다.
      • 감사합니다. 많은 정보 얻어갑니다!
      • Event Sourcing과 CQRS에 대해서 이해하기 쉽게 설명해주셔서 감사합니다. Azure의 서비스와 매칭되는 것도 좋았습니다.
      • 듣고 싶은게 많았는데 시간이 모자라 아쉬웠습니다.
  • 세션 3 “공연 스타트업에서의 Azure 사용하기 by 1인 개발자”에 대한 평가
    • 생각과 다르다: 1명
    • 어려웠다: 1명
    • 만족한다: 16명
    •  의견
      • 실용적인 지식이 도움되었습니다.
      • WebApp이나 Page Publishing 부분에도 관심이 많았는데, 잘 설명해주셔서 감사합니다.
      • 다음엔 좀 더 유려하게.. 화이팅입니다.
      • 감사합니다. 많은 정보 얻어갑니다!
      • WordPress Plugin 부분 따라하기 어려웠음
      • Project Nami에 대해서 알 수 있어서 좋았습니다. 쪠 super Cache에 대해서도 알 수 있었습니다. KISA Whitelist도 알 수 있어서 좋았습니다. (Sendgrid)
      • 수고 하셨습니다. Live Demo는 위험합니다. ^^
  • 세션 4 “Azure Microservice를 위한 API Management with Functions” 에 대한 평가
    • 어려웠다: 1명
    • 만족한다: 17명
    •  의견
      • 사용자 입장에서 리뷰하는 것이 유익했습니다.
      • Functions에 대해 관심이 많은데요, 잘 설명해주셔서 장단점 잘 파악해서 사용할 수 있을 것 같습니다.
      • IoT 세션은 처음인데 너무 재미있엇습니다.
      • 감사합니다. 많은 정보 얻어갑니다!
      • Azure Functions, BLOB Storage에 대해서 잘 알 수 있었습니다.
      • 재미있었습니다.

의견 주신 내용을 수렴하여 차후 세미나에서 더 많은 분들께 만족을 드릴 수 있도록 하겠습니다.

행사 회고

총 46명의 신청자 중에서 실제로 참석하신 분은 절반인 23명에 채 못 미치는 18명 내외였던 것으로 확인됩니다. 지난 3회의 Saturday Azure Live 진행 시에도 50% 미만의 참석률 문제가 있었지만 문제가 개선되지 않아 많은 안타까움을 느끼고 있습니다. 무료 세미나이기는 하나, 참석을 희망함에도 접수 상황을 보고 발걸음을 돌리시는 분들도 계셨을 것을 생각해보면 매우 바람직하지 않은 현상이라고 생각합니다.

이와 같이 No-Show가 발생하는 일이 개선되지 않고 반복되면 행사를 준비하는 주최측은 물론 참석자 분들 모두에게 좋지 않은 결과를 야기합니다. 이와 같은 현상이 왜 문제가 되는지에 관해서는 http://channy.creation.net/blog/517 에 소개된 아티클을 일독하시는 것을 권해드립니다.

고민 끝에, 차회 행사인 1703 행사부터는 소정의 실비 접수료를 참가 접수 시 온라인상으로 수납하고, 당일 행사에 참석하신 분들 중 끝까지 세션을 들으시고 익명 설문지를 제출하시는 분께 실비 접수료에 상응하는 간단한 도서문화상품권을 되돌려드리는 형태로 유료 세미나로 전환하기로 방침을 정하였습니다.

갑작스럽게 방침을 전환한 것에 대한 점 때문에 놀라셨다면 죄송합니다. 하지만 더 윤택하고 더 나은 세미나를 준비하여 보다 많은 분들과 함께 할 수 있도록 매사 최선을 다하겠습니다.

고맙습니다.

 

Saturday Azure Live 1701 행사 후기

안녕하세요. Azure 한국 사용자 그룹 운영진 남정현입니다.

Saturday Azure Live 1701 행사에 함께해주신 청중 및 스피커 여러분들께 진심으로 감사드립니다. 추운 날씨에도 불구하고 참석해주셔서 성황리에 행사가 마무리될 수 있어서 기쁩니다. 행사 장소를 제공해주신 마이크로소프트 멜팅팟 프로그램 관계자 여러분들께도 깊은 감사의 인사를 드립니다.

행사 사진

이날 행사는 총 3개의 세션으로 구성되었습니다.

  • Microsoft Conversation as a Platform 소개 – 한국 마이크로소프트 오일석 에반젤리스트님
  • Azure WebApp 개념원리 – Microsoft Azure MVP, Azure 한국 사용자 그룹 운영진, (주)바풀 CTO 김영재님
  • DevOps와 Hybrid Cloud – Azure 한국 사용자 그룹 운영진, SDDC 한국 사용자 그룹 운영진 김세준님

아울러 이번 행사에서는 설문지를 배포하여 행사에 대한 청중 평가와 피드백을 처음으로 수집하였습니다. 아래는 평가와 의견을 정리한 내용입니다.

  • “Saturday Azure Live 1701” 행사 만족도 (중복 가능)
    • 만족스럽지 않다: 1명
    • 대체적으로 괜찮았다: 8명
    • 다음에 다시 오겠다: 7명
    • 의견
      • 처음이라 낯설어서 아직은 없습니다. 참, Azure 관련 자료 감사합니다.
      • 인공지능 (Machine Learning, Deep Learning 등)에 대한 세미나도 가능하시면 부탁드립니다.
      • Azure에서 서비스하고 있는 내용이 광범위 하긴 하지만, 전체 세션간에 주제에 대한 연관성이 있었으면 좋겠습니다. 개발자를 위한, 운영 엔지니어를 위한 주제를 통일하고 Deep Dive 세션 진행을 통해 레벨업할 수 잇었으면 좋겠습니다.
  • 세션 1 “Microsoft Conversation as a Platform 소개” 평가
    • 좀 어려웠다: 4명
    • 만족한다: 10명
    • 의견
      • LUIS에 한국어 추가되면 Azure 사용자 그룹에 알려주세요.
      • 이해하기 쉽게 설명해주셔서 감사합니다.
      • 짧은 시간에 많은 내용을 하기 힘들겠지만 Practice 비중이 조금 더 늘었으면 좋겠습니다.
      • Azure의 기본적인 개념에 대해 더 자세히 알려주셨으면 좋겟어요.
      • 좋았습니다.
  • 세션 2 “Azure WebApp 개념원리” 평가
    • 좀 어려웠다: 4명
    • 만족한다: 10명
    • 의견
      • 실무에서 적용된 Service들이라던지 그런 개념이 많이 담겨있어서 어느정도만 이해할 수 있었지만, 준비에 감사드립니다. 🙂
      • 정기 세미나로 계획 중이시면 기본적인 Overview 보다는 구체적인 기능들을 Review 할 수 있는 심화 세션으로 진행되었으면 좋겠습니다.
      • 설명보단 시연이 좀 더 많은 시간이 있었다면 좋을 것 같아요.
      • 더 많은 (Azure WebApp 활용 및 적용) 사례도 궁금합니다.
  • 세션 3 “DevOps와 Hybrid Cloud” 평가
    • 좀 어려웠다: 1명
    • 만족한다: 12명
    • 의견
      • SE (System Engineer)에 대한 이해가 되었습니다.
      • Hybrid Cloud를 검토중인상황에 많은 부분을 생각해볼 수 있는 유용한 시간이었습니다.
      • 초반에 설명이 장황해 잘 이해가…

의견 주신 내용을 수렴하여 차후 세미나에서 더 많은 분들께 만족을 드릴 수 있도록 하겠습니다.

고맙습니다.

[ClouDeveloper News – Azure Edition] 2017년 1월 5일

클라우드 컴퓨팅을 중심으로 관련된 여러 기술과 업계 소식을 매주 전하는 ClouDeveloper News를 시작합니다. 파일럿 프로그램으로 구상하여 운영 중에 있으며 추후 여러 피드백과 의견 수렴을 통하여 프로그램의 틀을 갖추어 나갈 예정이오니 많은 관심과 구독을 부탁드립니다.

이번주 포커스/주요 소식

Saturday Azure Live 1701 (등록 바로가기)

Saturday Azure Live 1701이 1월 14일(토) 오후 2시부터 서울 강남 토즈1호점에서 열립니다. Microsoft Azure Korea 페이스북 그룹에서 진행하는 Saturday Azure Live는 매월 둘째 주 토요일마다 진행하는 Microsoft Azure의 기술 정보를 함께 공유하는 정기 세미나입니다. Azure에 관해 정보를 얻을 수 있을 뿐 아니라, 발표하고 싶은 주제가 있다면 스피커로! 경험담을 공유하고 싶다면 라이트닝 토크까지! 함께 하실 수 있습니다.

Agenda
Overview – 세션 소개 (발표자: Azure MVP 남정현)
Session 1 – Microsoft Conversation as a Service 소개 (발표자: 한국 마이크로소프트, 오일석 에반젤리스트)
Session 2 – Azure WebApp 개념원리 (발표자: (주)바풀 CTO, Azure MVP 김영재)
Session 3 – DevOps와 Hybrid Cloud (발표자: 한국 Azure 사용자 그룹, 김세준)

Azure Functions deprecating preview versions – 구 버전의 Azure Function을 사용하시는 경우 2017년 2월 1일 전에 1.0 버전 이상으로 업그레이드해야 합니다.

General availability: Larger block blobs in Azure Storage – Azure Storage에 더 큰 크기의 Block BLOB 업로드가 지원됩니다. 195GB에서 최대 4.77TB까지 업로드가 가능하며, 모든 Azure 리젼에서 사용할 수 있습니다.

MSRT December 2016 addresses Clodaconas, which serves unsolicited ads through DNS hijacking – Microsoft 악성 코드 제거 도구의 새 버전이 업데이트되면서, DNS 하이재킹을 통한 MITM 공격을 유발할 가능성이 있는 악성 코드를 제거할 수 있는 기능이 새로 추가되었습니다.

Several New Azure Services now available in UK – 영국 Azure 리젼에서 다수의 Azure 서비스를 새롭게 사용할 수 있게 되었다는 소식입니다. 이 중에는 Azure Function, Power BI, Power BI Embedded, DocumentDB 도 포함되어있습니다.

Mark Russinovich Azure CTO에게 Sysinternals를 이용하여 성공적으로 문제를 해결했던 사례를 스크린샷과 로그를 포함하여 보내면, Sysinternals 책을 저자 서명과 함께 배송해주는 이벤트를 진행하고 있습니다. 트위터 전문

커뮤니티 소식

Azure 서비스 공지 사항

아티클, 기고

새로운 제품 및 서비스

활용 및 노하우

웹 캐스트

ClouDeveloper 페이스북 페이지에 댓글로 의견을 남겨주시면 뉴스 발행 및 각종 정보 전달에 반영하도록 하겠습니다. 고맙습니다.

의견 남기기: https://fb.com/cloudeveloper

[ClouDeveloper News – Azure Edition] 2016년 12월 22일

클라우드 컴퓨팅을 중심으로 관련된 여러 기술과 업계 소식을 매주 전하는 ClouDeveloper News를 시작합니다. 파일럿 프로그램으로 구상하여 운영 중에 있으며 추후 여러 피드백과 의견 수렴을 통하여 프로그램의 틀을 갖추어 나갈 예정이오니 많은 관심과 구독을 부탁드립니다.

이번주 포커스/주요 소식

  • New Azure Logic Apps innovation – general availability of cloud-based Enterprise Integration Pack
    • Azure Logic App에서 클라우드 기반의 엔터프라이즈 시스템 연동 기능을 사용할 수 있게 되었습니다. 그중에서도, 이번에 새로 출시된 기능에는 EDI 문서 송수신에 관련된 기능이 포함됩니다.
  • Microsoft Azure Storage Import/Export Announcements
    • Azure Storage 가져오기/내보내기 기능이 정삭 출시되었습니다. 디스크 단위로 데이터를 가져오거나 내보내는 서비스와 해당 플랫폼 별로 실제 데이터 송수신 작업을 처리하는 에이전트 도구도 같이 출시되었습니다.
  • SQL Server next version Community Technology Preview 1.1 now available
    • SQL Server의 차세대 버전의 프리뷰 릴리즈가 Windows와 Linux 용으로 업데이트되어 출시되었습니다. 레드햇 7.3과 우분투 16.10에서의 실행을 지원하게 되었고, 데이터 가져오기 원본 데이터 소스로 MySQL을 사용할 수 있게 개선된 것을 포함, 다수의 개선 사항이 추가되었습니다.
  • AzCopy 5.1.1 Release
    • AzCopy 명령줄 유틸리티를 사용하여 BLOB 저장소 컨테이너 상의 데이터를 고속으로, 효율적으로 가져오거나 저장소로 업로드하는 기능을 수행하고, SDK를 이용하여 추가 개발하지 않고 스크립트 수준에서 자동화 로직을 개발하는데 활용할 수 있습니다. 이번 5.1.1 버전에서는 오픈 소스로 공개된  Azure Storage Data Movement Library 의 기능을 채택하도록 프로그램을 업데이트한 것이 주된 변경 사항입니다.
  • Introducing Microsoft R Server 9.0
    • Microsoft R Server 9.0이 출시되었습니다.

Azure 서비스 공지 사항

아티클, 기고

새로운 제품 및 서비스

활용 및 노하우

웹 캐스트

서드파티 소식

 

 

ClouDeveloper 페이스북 페이지에 댓글로 의견을 남겨주시면 뉴스 발행 및 각종 정보 전달에 반영하도록 하겠습니다. 고맙습니다.

의견 남기기: https://fb.com/cloudeveloper

[ClouDeveloper News – Azure Edition] 2016년 12월 15일

클라우드 컴퓨팅을 중심으로 관련된 여러 기술과 업계 소식을 매주 전하는 ClouDeveloper News를 시작합니다. 파일럿 프로그램으로 구상하여 운영 중에 있으며 추후 여러 피드백과 의견 수렴을 통하여 프로그램의 틀을 갖추어 나갈 예정이오니 많은 관심과 구독을 부탁드립니다.

이번주 커뮤니티 소식

Azure 서비스 공지 사항

  • General availability: Package Management extension for Visual Studio Team Services
    • Visual Studio Team Service에서 NuGet Package와 NPM Package를 관리할 수 있는 익스텐션 서비스가 새로 출시되었습니다. Visual Studio Marketplace에서 청약할 수 있는 상품입니다.
  • General availability: Azure IoT Gateway SDK
    • 기존 하드웨어나 인프라를 교체하지 않고, 게이트웨이 장치를 개발하여 Azure IoT와 자연스럽게 연동될 수 있도록 만들 수 있습니다. 오픈 소스로 공개된 Azure IoT Gateway SDK를 사용하여 기존 장치가 Azure IoT Hub와 직접 통신할 수 있는 여건이 되지 않더라도 원격에서 장치를 제어하거나 상태를 보고하는 대행 게이트웨이 하드웨어를 더 쉽게 개발할 수 있습니다.
  • With general availability, enhancements abound in Azure IoT Hub Device Management
    • Azure IoT Hub에서 그동안 강조되지 않았거나 샘플 코드 수준으로만 제공되어오던 “장치 관리”에 관련된 기능과 API가 GA로 전환되었습니다. 예약 작업, 다이렉트 메서드, 쿼리, 디바이스 트윈 API를 사용하여 좀 더 많은 장치 제어 시나리오를 커버할 수 있게 되었습니다.
  • Latest update of Azure Analysis Services preview brings scale up and down
    • Azure Analysis Service의 인스턴스 크기를 조정할 수 있는 기능이 포털에서 새롭게 제공됩니다. 상황에 따라 강력한 성능 발휘를 위하여 인스턴스 등급이나 규모를 늘리고, 사용하지 않는 때에는 최소한으로 낮추어 경제적으로 Azure Analysis Service를 활용할 수 있게 됩니다.

교육 자료

새로운 제품 및 서비스

  • Introducing Windows Server & SQL Server Premium Assurance
    • 지원이 중단될 예정인 Windows Server와 SQL Server에 대한 보안 업데이트 제공 서비스가 유상으로 제공됨에 따라 기존 라이프사이클에서 최대 6년까지 지원이 연장됩니다. 신규 플랫폼과 서비스로 이행을 하기에 시간적 여유가 없는 경우 선택할 수 있는 옵션입니다. Windows Server 2008, Windows Server 2008 R2, SQL Server 2008, SQL Server 2008 R2가 첫 지원 대상입니다.
  • Announcing SQL Server Management Studio – 16.5.1 Release
    • SQL Server Management Studio의 최신 버전인 16.5.1이 릴리스되었습니다. 제품 출시 후 발견된 문제점들을 수정한 패치 성격의 업데이트 버전입니다.

활용 및 노하우

웹 캐스트

  • SQL Server + Java: What’s new
    • 새 Microsoft JDBC 드라이버를 통해 Java 기반 애플리케이션에서 SQL Server에 접속하여 쓸 수 있는 새로운 기능들을 소개하는 웹 캐스트입니다. 최근 JDBC 드라이버의 소스 코드를 GitHub 리포지터리에 게시하여 오픈소스화 하였으며, Maven 리포지터리를 통하여 JDBC 드라이버에 대한 종속성을 간편하게 추가할 수 있게 되었습니다.
  • Azure Media Indexer 2: Japanese support, punctuation improvements, no more time limit
    • 동영상에서 화자가 말하는 언어를 음성 인식하여 자막을 만들고 동영상 검색의 기본 데이터를 형성하는데 도움을 주는 Azure Media Indexer의 새 버전에서는 Microsoft Research의 연구 성과를 바탕으로 지속적으로 품질과 성능을 개선하고 있으며, 이번 릴리스에서는 일본어 음성 인식 지원, 10분 길이 제한 해제, 발음과 문법 품질 향상을 주안점으로 두고 있습니다.
  • Get Started with Azure Functions
    • Azure Function에 대한 튜토리얼 웹 캐스트입니다.
  • Digital marketing solutions on Azure
    • Orchard, Umbraco와 같은 유명 CMS 솔루션을 Azure 위에서 기술적인 지식 없이 손쉽게 구축하여 디지털 마케팅 전략에 활용할 수 있는 방안을 소개하는 웨비나 세션을 소개합니다.
  • Dev and test better in the cloud
    • Azure 및 클라우드 환경에서 개발과 테스트 전략을 더 효율적으로 수행할 수 있는 방법을 소개하는 무료 웹 캐스트입니다.

서드파티 소식

  • Kafka Connect for Azure IoT Hub
    • Azure IoT Hub에 연결하여 데이터를 Kafka로 보낼 수 있는 Connector의 오픈 소스 버전이 새롭게 공개되었습니다.

ClouDeveloper 페이스북 페이지에 댓글로 의견을 남겨주시면 뉴스 발행 및 각종 정보 전달에 반영하도록 하겠습니다. 고맙습니다.

의견 남기기: https://fb.com/cloudeveloper

[ClouDeveloper News – Azure Edition] 2016년 12월 8일

클라우드 컴퓨팅을 중심으로 관련된 여러 기술과 업계 소식을 매주 전하는 ClouDeveloper News를 시작합니다. 파일럿 프로그램으로 구상하여 운영 중에 있으며 추후 여러 피드백과 의견 수렴을 통하여 프로그램의 틀을 갖추어 나갈 예정이오니 많은 관심과 구독을 부탁드립니다.

이번주 커뮤니티 소식

  • 무료 Azure 교육 커리큘럼 공개
    • 2017년 6월 30일까지 다음의 커리큘럼이 무료로 제공됩니다.
      • Azure202x – Microsoft Azure Virtual Machines
      • Azure203x – Microsoft Azure Virtual Network
      • Azure204x – Microsoft Azure Identity
      • Azure205x – Microsoft Azure Storage
      • Azure214x – Microsoft Azure Fundamentals
      • Azure213x – Microsoft Azure for AWS Experts
  • Korea Embedded Linux Project 연합 세미나
    • 12월에는 KELP 커뮤니티 연합 세미나에 참여하게 되어 세션을 하나 발표하게 되었습니다. 행사는 12월 10일 토요일에 열리며, 오전 세션 (아침 10시 ~ 오후 2시), 오후 세션 (오후 2시 ~ 오후 5시)으로 나누어 선택하여 신청하실 수 있습니다.
    • 이번 KELP 연합 세미나는 우분투한국사용자모임, 자바카페 커뮤니티, Django Girls Seoul, 그리고 Microsoft Azure Korea가 함께 하는 세미나로 IoT를 공통 주제로 발표하는 세미나입니다.
      행사에 대한 세부적인 아젠다 및 참가 신청은 http://onoffmix.com/event/84425 에서 진행하실 수 있습니다.

Azure 서비스 공지 사항

행사 및 이벤트

  • Microsoft Tech Summit 2016-17
    • 전세계에서 열리는 Microsoft Tech Summit 행사 중, 한국에서는 2017년 4월 27일부터 28일까지 이틀 간 열립니다. 행사는 서울 잠실 롯데호텔월드에서 열릴 예정입니다.

교육 자료

새로운 제품 및 서비스

  • Sysmon v5, Process Explorer v16.20, Procdump v8.2, LiveKd v5.6
    • Sysinternals 유틸리티 중 인기있는 유틸리티인 Sysmon, Process Explorer와 함께 Procdump, LiveKd 유틸리티의 새 버전이 릴리스되었습니다. Windows OS를 기반으로 애플리케이션을 개발하거나 시스템을 모니터링할 때에는 꼭 필요한 필수 유틸리티들입니다.
  • Announcing a new book, Troubleshooting with the Windows Sysinternals Tools
    • Sysinternals 유틸리티의 사용법을 잘 알아두면 시스템이나 Windows OS에서 발생하는 문제를 해결하는데 큰 도움을 얻을 수 있습니다. 실제로 Sysinternals 유틸리티를 어떻게 활용하면 좋은지 상세한 가이드 북이 나와있습니다. 이 책은 Sysinternals 유틸리티의 개발자이자 Microsoft Azure 팀 사업부의 수장인 Mark Russinovich가 직접 집필하였습니다.
  • Announcing Microsoft BizTalk Server 2016 general availability
    • Visual Studio 2015, Windows Server 2016, SQL Server 2016 등 최근 출시된 개발 도구와 백엔드 서버 플랫폼들에 대한 호환성을 강화하고 클라우드 컴퓨팅 플랫폼에 좀 더 능동적으로 대응할 수 있도록 개선된 새 버전의 BizTalk Server가 정식으로 출시되었습니다.
  • Azure Mobile Apps for Apache Cordova reaches GA
    • Apache Cordova 개발 플랫폼에서 Azure Mobile Apps를 활용할 수 있는 SDK 및 도구가 정식 버전으로 릴리스되었습니다.
  • WMF 5.1 Releasing January 2017
    • Windows Management Framework 5.1 업데이트가 2017년 1월 중에 출시됩니다. Windows Server 2016에 포함된 것과 같은 버전입니다.
  • Sneak peek: A new Azure Cloud Console
    • Azure 포털에 웹 브라우저에서 바로 쓸 수 있는 콘솔 기능이 내장될 예정입니다. 현재 이 기능은 프리뷰 버전으로, 어떻게 콘솔을 활용할 수 있는지 상세한 내용과 데모 동영상이 같이 들어있습니다.

활용 및 노하우

웹 캐스트

서드파티 소식

  • Frame + Microsoft Azure = The Fastest Graphics in the Cloud!
    • 웹 브라우저 기반으로 Windows 애플리케이션을 스트리밍하는 엔터프라이즈 클라우드 플랫폼인 Frame이 Microsoft Azure의 N 시리즈 인스턴스를 기반으로 서비스를 제공하기 시작하였다는 소식입니다.

ClouDeveloper 페이스북 페이지에 댓글로 의견을 남겨주시면 뉴스 발행 및 각종 정보 전달에 반영하도록 하겠습니다. 고맙습니다.

의견 남기기: https://fb.com/cloudeveloper

[ClouDeveloper News – Azure Edition] 2016년 12월 1일

클라우드 컴퓨팅을 중심으로 관련된 여러 기술과 업계 소식을 매주 전하는 ClouDeveloper News를 시작합니다. 파일럿 프로그램으로 구상하여 운영 중에 있으며 추후 여러 피드백과 의견 수렴을 통하여 프로그램의 틀을 갖추어 나갈 예정이오니 많은 관심과 구독을 부탁드립니다.

Azure 서비스 공지 사항

새로운 제품 및 서비스

활용 및 노하우

웹 캐스트

  • Leverage the cloud for modern business: 무료 온디맨트 웹 캐스트로 기존 비즈니스에서 클라우드를 어떻게 접목할 수 있는지에 대한 일반론을 설명합니다.
  • Get started with Xamarin and Azure Webinar: 한국 시간으로 12월 3일 토요일 새벽 2시부터 진행되는 웹 캐스트로 Xamarin 개발 플랫폼과 Azure를 연동하는 자세한 방법을 설명합니다.
  • SQL Server on Linux: High availability and security: SQL Server on Linux가 Windows 버전과 같이 고가용성과 안정성, 그리고 보안을 준수할 수 있는지 궁금하기도하고 불확실하다는 생각을 가지고 계시다면 이 웹 캐스트를 확인해보실 것을 추천합니다.
  • Microsoft Ignite On-Demand: 지난 가을에 열린 Microsoft Ignite 2016의 모든 세션을 VOD로 시청할 수 있는 카탈로그 페이지가 열렸습니다.
  • Connect(); 2016 On-Demand: 지난 11월에 열린 Connect(); 2016의 모든 세션을 VOD로 시청할 수 있는 카탈로그 페이지가 열렸습니다.

서드파티 소식

  • Protect all of your public and hybrid cloud workloads on with Security: 엔드포인트 보안 및 침입 차단, VPN 등 다양한 보안 솔루션 포트폴리오를 제공하는 Fortinet이 Azure Platform의 각 영역에 대한 보안 솔루션을 제공합니다. https://www.fortinet.com/azure 에서 확인해보실 수 있습니다.

ClouDeveloper 페이스북 페이지에 댓글로 의견을 남겨주시면 뉴스 발행 및 각종 정보 전달에 반영하도록 하겠습니다. 고맙습니다.

의견 남기기: https://fb.com/cloudeveloper

Visual Studio 2017과 ARM Template 개발

Visual Studio 2017이 지난 Connect(); 2016 행사 때 Release Candidate 버전으로 처음 공개되면서 많은 사항들이 개선되었습니다. 정말 많은 변경 사항들이 있었지만 이번 아티클에서는 Azure Platform 개발과 활용에 깊게 관련되어있는 ARM 템플릿과 이를 통한 배포 자동화에 대해 살펴볼까 합니다.

Resource Group의 변천사, 그리고 존재 이유

Azure Platform의 네 번째 포털이 도입되기 전까지, Azure하면 단연 떠오르는 것은 Cloud Service를 기반으로 하는 모델이었습니다. Cloud Service 안에는 처음에 IIS를 기반으로 하는 Web Role, NT 서비스는 아니지만 간단한 백그라운드 작업을 실행할 수 있는 Worker Role, 그리고 더 이상 사용되지는 않지만 VM Role이라는 컨셉도 있었습니다.

이 중 VM Role은 VHD 이미지를 업로드하여 해당 VHD 이미지를 이용해서 Cloud Service 내에 필요한 만큼 미리 정의된 인스턴스를 생성할 수 있는 컨셉이고, 이것이 다듬어져서 VM Role 자체는 빠지고 Cloud Service가 Visual Studio에서 만든 CSPKG를 통해 만들어지는 경우와 Azure Portal에서 수동으로 가상 컴퓨터를 주문하여 만들어지는 경우로 나뉘게 되었습니다. 그러다보니 다소 모호한 점이 있었습니다.

그리고 Azure Portal의 네 번째 버전이 공개되면서 Cloud Service는 역할이 축소되고 Resource Group이라는 새로운 컨셉의 관리 단위가 등장합니다. Resource Group은 Azure Platform 내의 여러 자원을 묶어서 관리하는 용도로 잘 알려져있지만, 여기서 그치는 것이 아니라, 배포 및 제어의 단위도 됩니다.

Azure Platform을 사용하여 클라우드 서비스를 구축할 때에는 필연적으로 여러 서비스들, 여러 리소스들을 사용하게 됩니다. 이럴 때 한 땀 한 땀 리소스들을 프로비져닝하고 관리하기에는 번거롭고 시간이 많이 걸립니다. 이럴 때 Resource Group 단위로 프로비져닝하는 방법을 검토하는 것이 유용합니다.

왜 Resource Group을 자동화하는가?

여러 가지 이유가 있겠습니다만, Resource Group을 자동화하는 것이 반드시 대규모 솔루션만을 위한 것은 아닙니다. 꼭 대규모 솔루션이 아니어도 VM은 평소에 한 대 이상 사용할 수도 있고, VM을 만들기 위해서는 IP 주소 지정, 저장소 계정 설정 등 여러 리소스들에 필연적으로 연관될 수 밖에 없습니다. 이럴 때 여러 리소스를 한 땀 한 땀 프로비져닝하는 것은 세밀한 제어가 가능하지만 노력이 많이 필요합니다.

뿐만 아니라, Resource Group 프로비져닝 자동화 기능으로 여러 예약 명령을 주문하면 병렬적으로 각 리소스를 프로비져닝할 수 있는데 반해, 수동으로 진행할 경우 노력과 시간을 많이 쓰게 됩니다. 주된 관심사가 Azure 포털 내 혹은 각 리소스의 세부적인 기능 탐색이 아니라면 이런 부분은 과감하게 단축하는 것을 권할 수 있습니다.

ARM 템플릿 개발하기

서두에 말씀드린 것과 같이, Visual Studio 2017에 포함된 Azure 개발 툴 체인을 설치하는 것으로부터 시작합니다. http://www.visualstudio.com/ 에 방문하셔서 Visual Studio 2017 Community Edition 혹은 적절한 MSDN Subscription을 보유하고 계신 경우 Professional 혹은 Enterprise Edition을 받아서 Azure 개발 툴 체인을 선택하고 설치하시면 됩니다.

개발 도구를 설치한 다음, 아래 그림처럼 새 프로젝트에서 Azure Resource Group 프로젝트 템플릿을 찾아 새 프로젝트를 생성합니다.

이어서 프로젝트 템플릿의 종류를 선택하는 대화 상자가 나타나는데, 학습을 위하여 Blank Template을 한 번 선택해보겠습니다. 다른 템플릿에 대한 설명은 이번 아티클에서는 자세히 하지 않겠습니다만 필요하시다면 둘러보시는 것도 추천합니다.

비어있는 템플릿을 선택하였으므로 프로젝트 구성은 매우 단촐합니다.

  • azuredeploy.json 파일이 실제 ARM 템플릿의 내용에 해당하며, 이 파일을 편집하여 Resource Group 내에 배포될 자원들의 설정을 세부적으로 지정할 수 있습니다.
  • azuredeploy.parameters.json 파일은 azuredeploy.json 파일에서 parameters 섹션에 정의한 매개 변수들의 실제 값을 저장하는 파일입니다. 나중에 배포 단계에서 이 파일을 프로퍼티 그리드 상에서 편집할 수 있는 인터페이스를 제공하므로 처음부터 완성하려고 할 필요는 없습니다.
  • Deploy-AzureResourceGroup.ps1 파일은 실제 배포와 배포 상태 점검을 담당하는 PowerShell 스크립트로 Visual Studio 프로젝트 템플릿에 의하여 자동 생성되는 스크립트입니다. 아티클에서 설명하는 기본 사항을 다루기 위해서 별도로 커스터마이징해야 할 부분은 없습니다.

이 중에서 집중해서 봐야 할 부분은 azuredeploy.json 파일입니다. 이 파일을 더블 클릭하여 열면 아래 화면과 같이 화면 우측에 구성 목록이 나타나게 됩니다.

JSON 개요 창의 도구 모음에 있는 + 아이콘이 있는 리소스 추가 버튼을 클릭하면, 추가할 수 있는 리소스들의 목록이 표시됩니다.

다음의 순서대로 리소스를 추가합니다.

  • 저장소 계정 – webserverStorage 이름 입력
  • 저장소 계정 – sqlserverStorage 이름 입력
  • 가상 네트워크 – backendVnet 이름 입력
  • Windows 가상 컴퓨터 – webserver 이름 입력, webserverStorage 선택, backendVnet의 가상 네트워크 1 항목 선택
  • Windows 가상 컴퓨터 – sqlserver 이름 입력, sqlserverStorage 선택, backendVnet의 가상 네트워크 1 항목 선택
  • 공용 IP 주소 – webserverAddress 이름 입력, webserverNic 선택 (webserver 가상 컴퓨터 생성 시 자동으로 추가됨)

JSON 개요 패널의 추가 버튼을 이용하여 리소스들을 추가할 수 있으므로 ARM 템플릿의 JSON 문법을 잘 몰라도 어렵지 않게 리소스 정의를 추가할 수 있습니다. 이렇게 하면 parameter로 받아야 할 항목, variable로 정의하여 관리해야 할 항목, 실제 resource들에 대한 정의가 자동으로 추가됩니다.

RC 버전에서 다듬어지지 않은 사항 한 가지를 점검하면, webserverStorageName과 sqlserverStorageName의 표현식에 관한 부분입니다. 기본 이름을 사용하면 이름이 너무 길어서 배포에 실패하게 되므로, 다음과 같이 수정하도록 합니다.

“variables”: {
“webserverStorageName”: “[concat(‘web‘, uniqueString(resourceGroup().id))]”,
“sqlserverStorageName”: “[concat(‘sql‘, uniqueString(resourceGroup().id))]”,

}

이렇게 스크립트를 완성하면, 솔루션 탐색기에서 마우스 오른쪽 버튼을 클릭하여 배포 – 새로 만들기 메뉴를 클릭합니다.

그러면 대화 상자가 나타납니다.

매개 변수 편집 버튼을 눌러 azuredeploy.parameters.json 파일을 편집합니다.

Password 부분을 제외한 나머지 매개 변수들을 적절하게 설정하고 저장 버튼을 클릭합니다. 암호는 매개 변수에 포함하지 않는 것이 안전합니다.

유효성 검사만 체크박스를 클릭하면 실제로 프로비져닝을 하지 않고 스크립트에서 틀리거나 부족한 부분만 검사할 수 있으니 적절하게 활용하실 수 있습니다. 단, 이것은 스크립트 파일 자체에 대한 검사일 뿐 내용 상 잘못되거나 실패할 수 있는 부분을 미리 검사해주지는 않습니다.

이렇게 배포를 시작하면 비워두었던 암호 매개 변수를 만날 때 암호를 넣어줄 것을 요청하는 대화 상자가 나타납니다. 여기에 대해 답을 해주면 배포 과정이 하단의 출력 패널 창에 계속 나타나는 것을 볼 수 있습니다. 다른 오류가 없으면 Azure Portal로 이동합니다.

ARM 템플릿 결과 보기

출력 창에 다음과 같이 [ERROR] 라는 문구 없이 결과가 나타나면 성공한 것입니다.

01:20:22 –
01:20:22 – DeploymentName : azuredeploy-1125-1615
01:20:22 – CorrelationId : 824a867a-21d6-48e9-9fef-b9c62fc9c78b
01:20:22 – ResourceGroupName : WebServerDeploy
01:20:22 – ProvisioningState : Succeeded
01:20:22 – Timestamp : 2016-11-25 오후 4:19:51
01:20:22 – Mode : Incremental
01:20:22 – TemplateLink :
01:20:22 – TemplateLinkString :
01:20:22 – DeploymentDebugLogLevel :
01:20:22 – Parameters : {[webserverStorageType, Microsoft.Azure.Commands.Reso
01:20:22 – urceManager.Cmdlets.SdkModels.DeploymentVariable], [s
01:20:22 – qlserverStorageType, Microsoft.Azure.Commands.Resourc
01:20:22 – eManager.Cmdlets.SdkModels.DeploymentVariable], [webs
01:20:22 – erverName, Microsoft.Azure.Commands.ResourceManager.C
01:20:22 – mdlets.SdkModels.DeploymentVariable], [webserverAdmin
01:20:22 – UserName, Microsoft.Azure.Commands.ResourceManager.Cm
01:20:22 – dlets.SdkModels.DeploymentVariable]…}
01:20:22 – ParametersString :
01:20:22 – Name Type Value
01:20:22 –
01:20:22 – =============== ========================= =========
01:20:22 – =
01:20:22 – webserverStorageType String Stan
01:20:22 – dard_LRS
01:20:22 – sqlserverStorageType String Stan
01:20:22 – dard_LRS
01:20:22 – webserverName String rkttuweb
01:20:22 –
01:20:22 – webserverAdminUserName String rk
01:20:22 – ttu
01:20:22 – webserverAdminPassword SecureString
01:20:22 –
01:20:22 – webserverWindowsOSVersion String
01:20:22 – 2012-R2-Datacenter
01:20:22 – sqlserverName String rkttusql
01:20:22 –
01:20:22 – sqlserverAdminUserName String rk
01:20:22 – ttu
01:20:22 – sqlserverAdminPassword SecureString
01:20:22 –
01:20:22 – sqlserverWindowsOSVersion String
01:20:22 – 2012-R2-Datacenter
01:20:22 – webserverAddressDnsName String r
01:20:22 – kttu
01:20:22 –
01:20:22 – Outputs : {}
01:20:22 – OutputsString :
01:20:22 –
01:20:22 –
01:20:22 –
01:20:22 –
01:20:22 – ‘azuredeploy.json’ 템플릿을 ‘WebServerDeploy’ 리소스 그룹에 배포했습니다.

Azure Portal로 이동하여 결과를 살펴보겠습니다.

보시는 것과 같이 주문한 모든 리소스들이 생성된 것을 확인할 수 있습니다. 이 리소스들을 Portal에 와서 혹은 명령줄 도구로 하나씩 번거롭게 생성하지 않고 효율적으로 주문하여 정상적으로 프로비져닝하였습니다.

Resource Group 삭제하기

이렇게 리소스 그룹을 만들고 난후, 결과가 혹시 마음에 들지 않거나 빠뜨린 부분이 있다면 리소스 그룹 자체를 삭제할 수 있습니다. 리소스 그룹 단위로 삭제 주문을 하는 것은 포털에서도 가능한 작업인데 이렇게 하면 리소스를 일일이 다니면서 정리하지 않아도 됩니다. 아래 그림과 같이 처리할 수 있습니다.

리소스 그룹 삭제 시 확인 차 리소스 그룹의 이름을 다시 입력받는 부분이 있습니다. 신중을 기하여 작업하시기 바랍니다.

결론

타 클라우드 서비스와 다르게 Azure에서는 모든 리소스를 지금 보신것과 같이 자동화하여 효율적으로 관리할 수 있습니다. VM 이외에도 Web App, Logic App 등을 같은 방법으로 프로비져닝할 수 있습니다. 그리고 이번 아티클에서는 다루지 않았지만, 기존에 만들어진 Azure 리소스를 역으로 ARM 스크립트로 추출하는 기능이나, ARM 템플릿을 연결하여 프로비져닝 하는 방법도 제공합니다. 향후 아티클에서 좀 더 자세한 내용을 준비하여 공유할 수 있도록 하겠습니다.