[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

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 템플릿을 연결하여 프로비져닝 하는 방법도 제공합니다. 향후 아티클에서 좀 더 자세한 내용을 준비하여 공유할 수 있도록 하겠습니다.