자, 당신이 강사로서 혹은 실습 진행자로서 파워 플랫폼 핸즈온 실습을 진행해야 한다고 가정하겠습니다. 실습을 위한 컨텐츠는 준비가 됐습니다. 이제 그렇다면 실습 환경을 준비해야겠지요? 파워 플랫폼 핸즈온 실습을 위해서는 크게 세 가지 방법이 있습니다.

  1. 실습자 본인의 기존 파워 플랫폼 환경을 그대로 사용하는 것
  2. 실습자 각자 새롭게 환경을 구성하는 방법
  3. 진행자가 일괄적으로 환경을 구성하는 방법

각각의 방법은 저마다 장단점이 있게 마련인데, 대략 아래와 같이 정리할 수 있을 것입니다.

  1. 첫번째 방법은 진행자 입장에서는 가장 편리한 방법입니다. 이미 실습자의 환경이 구성되어 있기 때문이죠. 하지만, 실습자 개개인이 속한 테넌트마다 구성이 다를 수 있으므로 파워 플랫폼 실습에 적합한지 아닌지 알 수 있는 방법이 없습니다. 따라서, 실습 동안 권한 문제라든가 다양한 문제를 겪을 가능성이 농후한 편이죠.
  2. 두번째 방법은 진행자 입장에서는 편리할 수도 있고 아닐 수도 있습니다. 우선 환경 구성 자체를 실습자에게 위임하는 과정만 놓고 보자면 진행자 관점에서는 편리할 수도 있겠지만, 그 환경 구성을 위한 가이드 문서를 꼼꼼하게 작성해서 전달해야 합니다. 또한 아무리 자세하게 가이드를 제공한다고 하더라도, 실습자 개개인의 컴퓨터 활용 능력에 따라 환경 구성이 손쉬울 수도 있고 아닐 수도 있습니다. 결국 가이드 문서대로 되었다고 가정하면 낭패를 볼 수 있습니다.
  3. 마지막 방법은 진행자가 모두 사전에 구성을 해 놓는 방법인데요, 실습자 입장에서는 실습에 집중할 수 있으니 아주 편리한 방법이죠. 반면에 진행자 입장에서는 이를 매번 수동으로 설정한다고 생각하면 굉장히 끔찍한 일이 될 겁니다.

따라서, 이 포스트에서는 핸즈온랩 실습 진행자 관점에서 최초 수동으로 해야만 하는 부분을 제외하고는 모두 스크립트 한 번 실행으로 환경 설정을 최대한 자동화하는 방법에 대해 알아보기로 하겠습니다.

이 포스트에서 사용한 파워셸 스크립트는 이 리포지토리에서 다운로드 받을 수 있습니다.

명령어 하나로 환경 설정하기

편의상 여기서는 아래와 같은 내용으로 테넌트를 생성했다고 가정합니다.

  • 테넌트 이름: powerplatformhandsonlab
  • 테넌트 URL: powerplatformhandsonlab.onmicrosoft.com
  • 관리자 이메일: admin@powerplatformhandsonlab.onmicrosoft.com
  • 관리자 패스워드: Pa$$W0rd!@#$

이 정보를 이용해서, 한 번에 환경 설정을 하려면 어떻게 하면 될까요? 여기 전체 파워셸 스크립트가 있으니 이걸 이용해 아래와 같이 명령어를 실행시켜 보세요.

./Set-Environment.ps1 `
-AdminUsername "admin" `
-AdminPassword "Pa`$`$W0rd!@#`$" `
-TenantName "powerplatformhandsonlab"

네, 그렇습니다. 이게 됩니다! 아래에서 스크립트 하나씩 뜯어볼까요?

Microsoft 365 테넌트 생성

실습 진행자가 가장 먼저 해야 할 일은 Microsoft 365 테넌트를 생성하는 것입니다. Microsoft 365는 30일짜리 무료 평가판을 제공하는데, 관리자를 포함해 총 25개의 라이센스를 제공하므로, 실습용으로 사용하기 좋습니다. http://aka.ms/Office365E5Trial 링크를 클릭해서 아래와 같이 무료로 Miicrosoft 365 E5 평가판 테넌트를 생성합니다.

Microsoft 365 E5 평가판 가입 첫화면

아래 화면에서 필요한 정보를 모두 입력하면 평가판 테넌트가 만들어집니다.

Microsoft 365 E5 평가판 가입 화면

이제 테넌트가 만들어졌으니 실제로 실습 환경을 파워셸로 구성해 보겠습니다. 참고로 아래에서 진행한 모든 파워셸 명령어는 관리자 권한의 파워셸 콘솔 안에서 실행시켜야 하는 것 잊지 마세요!

프로비저닝 순서

환경 구성을 위한 순서가 딱히 정해져 있지는 않습니다. 하지만, 아래 순서대로 하는 것을 권장하는 편인데, 이는 파워 앱 모듈과 애저 AD 모듈 사이에 호환성이 없어지는 부분이 하나 있기 때문입니다.

  1. Microsoft Dataverse 데이터베이스 초기화
  2. 사용자 계정 추가
  3. Microsoft 365 권한 부여
  4. 라이센스 부여
  5. 애저 권한 부여

만약에 첫번째 Microsoft Dataverse 데이터베이스 초기화를 가장 먼저 하지 않고 사용자 계정 추가 이후에 진행한다면 에러가 생깁니다. 어떤 에러가 생기는 지는 아래에서 다시 다루도록 하겠습니다.

NOTE: AzureAD 모듈을 사용하기 위해서는 Windows 환경의 파워셸 5.1 버전이 필요합니다. 파워셸 6 이상의 버전은 지원하지 않습니다. 사용 환경에 대해서는 파워셸을 통해 Microsoft 365에 연결하기 페이지를 참조하세요.

AzureAD 파워셸 모듈 설치

Microsoft 365 테넌트에 사용자 계정을 추가하기 위해서는 먼저 AzureAD 모듈을 설치해야 합니다. 이 포스트를 쓰는 현재 최신 버전은 2.0.2.130입니다. 아래와 같이 Install-Module 명령어를 사용하면 되는데요, 맨 마지막의 -Force -AllowClobber 옵션을 주면 동일한 버전이 이미 설치가 되어 있을 경우에도 별다른 경고 메시지 없이 재설치합니다.

Install-Module -Name AzureAD `
-Scope AllUsers -Repository PSGallery `
-Force -AllowClobber

AzureAD 관리자 로그인

파워셸 모듈 설치가 끝났다면, 이제 테넌트 관리자로 로그인 할 차례입니다. 단순히 Connect-AzureAD 명령어만 실행시켜도 상관 없겠지만, 이 경우에는 웹 브라우저 기반의 로그인 창이 별도로 생기게 되므로, 자동화 스크립트의 경우에는 맞지 않습니다. 오히려 가능한 한 현재 파워셸 콘솔 창에서 벗어나지 않고 모두 해결해야 하므로 아래와 같은 방식으로 로그인을 하면 효과적입니다.

$tenantName = "powerplatformhandsonlab"
$adminUpn = "admin@$tenantName.onmicrosoft.com"
$adminPW = ConvertTo-SecureString "Pa`$`$W0rd!@#`$" -AsPlainText -Force
$adminCredential = New-Object `
-TypeName System.Management.Automation.PSCredential `
-ArgumentList ($adminUpn, $adminPW)
$connected = Connect-AzureAD -Credential $adminCredential

사용자 추가

관리자 로그인이 끝났다면, 이제 본격적으로 사용자를 추가할 차례입니다. 평가판 테넌트에는 관리자를 포함해서 모두 25개의 라이센스를 사용할 수 있으므로, 추가 가능한 실습자의 수는 최대 24명이다. 이와 관련한 자세한 내용은 파워셸로 Microsoft 365 사용자 계정 만들기 페이지를 참조하고, 여기서는 아래 파워셸 스크립트를 실행시킵니다.

  • 사용자의 패스워드는 편의상 UserPa$$W0rd!@#$로 통일시켰으며, 임의로 바꿀 수 없게끔 설정합니다.
  • 사용자의 지역은 테넌트가 만들어진 지역으로 설정합니다. 여기서는 KR이겠네요.
  • 모두 24개의 계정을 만들어야 하므로 ForEach-Object 루프 구문을 사용합니다.
  • 만들어진 계정은 나중에 다시 사용하기 위해 모두 $users 배열 개체에 저장합니다.
$userPWProfile = New-Object -TypeName Microsoft.Open.AzureAD.Model.PasswordProfile
$userPWProfile.Password = "UserPa`$`$W0rd!@#`$"
$userPWProfile.EnforceChangePasswordPolicy = $false
$userPWProfile.ForceChangePasswordNextLogin = $false
$usageLocation = "KR"
$users = @()
(1..24) | ForEach-Object {
$user = New-AzureADUser `
-DisplayName $("PPUser" + $_.ToString("00")) -GivenName $("User" + $_.ToString("00")) -SurName "PP" `
-UserPrincipalName $("ppuser" + $_.ToString("00") + "@$tenantName.onmicrosoft.com") `
-UsageLocation $usageLocation `
-MailNickName $("ppuser" + $_.ToString("00")) `
-PasswordProfile $userPWProfile `
-AccountEnabled $true
$users += $user
}

사용자 계정 역할 및 권한 부여

앞서 추가한 사용자에게 적합한 권한을 부여할 차례입니다. 파워 플랫폼 실습을 위한 환경 설정이니만큼, 파워 플랫폼 관리자 권한을 부여하기로 하겠습니다. 하지만, 이 권한은 기본적으로 비활성화 되어 있기 때문에, 그에 앞서 아래 명령어를 통해 파워 플랫폼 관리자 권한을 활성화 시킵니다. 권한 할당과 관련한 자세한 내용은 이 파워셸을 통해 Microsoft 365 계정에 관리자 권한 부여하기 페이지를 참조하세요.

$roleName="Power Platform Administrator"
$role = Get-AzureADDirectoryRole | Where-Object { $_.DisplayName -eq $roleName }
if ($role -eq $null) {
$roleTemplate = Get-AzureADDirectoryRoleTemplate | Where-Object { $_.DisplayName -eq $roleName }
$enabled = Enable-AzureADDirectoryRole -RoleTemplateId $roleTemplate.ObjectId
$role = Get-AzureADDirectoryRole | Where-Object { $_.DisplayName -eq $roleName }
}

위와 같이 파워 플랫폼 관리자 권한을 $role 개체로 받아왔으니, 이를 앞서 생성한 계정에 모두 부여할 차례입니다. 아래 명령어를 실행시켜 볼까요?

$users | ForEach-Object {
$assigned = Add-AzureADDirectoryRoleMember `
-ObjectId $role.ObjectId `
-RefObjectId $_.ObjectId
}

사용자 계정 라이센스 부여

이번에는 각 사용자에게 파워 플랫폼을 사용할 수 있는 라이센스를 부여할 차례입니다. 기본적으로 평가판 테넌트에는 파워 플랫폼을 사용할 수 있는 라이센스를 계정 수 만큼 제공하고 있으니 이를 사용하면 됩니다. 이와 관련해서 좀 더 자세한 내용은 파워셸을 통해 계정에 Microsoft 365 라이센스 부여하기 페이지를 참조하세요.

우선 라이센스 이름을 검색해 볼까요? 평가판 테넌트를 만든 후 추가적인 작업을 하지 않았으므로 라이센스는 하나만 나올 것이고 그 이름은 ENTERPRISEPREMIUM일 것입니다.

Get-AzureADSubscribedSku

아래 명령어를 사용해서 모든 사용자 계정에 라이센스를 부여합니다.

$sku = Get-AzureADSubscribedSku
$license = New-Object -TypeName Microsoft.Open.AzureAD.Model.AssignedLicense
$license.SkuId = $sku.SkuId
$licensesToAssign = New-Object -TypeName Microsoft.Open.AzureAD.Model.AssignedLicenses
$licensesToAssign.AddLicenses = $license
$users | ForEach-Object {
$assigned = Set-AzureADUserLicense -ObjectId $_.ObjectId -AssignedLicenses $licensesToAssign
}

여기까지 해서 핸즈온랩 실습에 필요한 모든 사용자 계정에 역할, 권한, 라이센스까지 자동으로 할당했습니다.

파워 플랫폼 기본 환경 Microsoft Dataverse 활성화

파워 플랫폼 핸즈온랩 실습을 위해서 또 한가지 해야 할 것이 있습니다. 바로 Microsoft Dataverse 라는 데이터베이스를 활성화 시키는 작업이다. 다양한 Microsoft 365 제품군과 협업을 하기 위해서 반드시 활성화 시켜야 하는 부분이므로, 아래와 같은 절차를 거쳐 초기화합니다. 파워셸을 이용한 파워 플랫폼 관리자 기능에 대한 좀 더 자세한 내용은 관리자용 파워 앱 cmdlet 페이지를 참조하세요.

가장 먼저 파워 앱 관련 파워셸 모듈인 Microsoft.PowerApps.Administration.PowerShellMicrosoft.PowerApps.PowerShell을 설치합니다. 앞서와 마찬가지로 -Force -AllowClobber 옵션을 이용하면 이미 설치가 되어 있을 경우 재설치합니다.

Install-Module -Name Microsoft.PowerApps.Administration.PowerShell `
-Scope AllUsers -Repository PSGallery `
-Force -AllowClobber
Install-Module -Name Microsoft.PowerApps.PowerShell `
-Scope AllUsers -Repository PSGallery `
-Force -AllowClobber

위에서 설정한 $adminUpn, $adminPW 값을 이용해서 파워 앱 환경에 관리자로 로그인합니다.

$connected = Add-PowerAppsAccount -Username $adminUpn -Password $adminPW

NOTE: 로그인 과정에서 아래와 같은 에러메시지를 내면서 파워 앱 환경에 로그인 할 수 없는 경우가 생길 수 있습니다.

파워 앱 환경 로그인 불가능

이것은 Microsoft 365 테넌트에 로그인하는 과정과 파워 앱에 로그인하는 프로세스가 내부적으로 달라 생기는 일이기 때문에, 이런 에러 메시지를 보면 당황하지 말고 새 파워셸 콘솔 창을 관리자 권한으로 열고 거기서 로그인하면 됩니다.

아래와 같은 가정을 바탕으로 Microsoft Dataverse 데이터베이스를 초기화 시킵니다.

  • 기본 환경의 Dataverse 데이터베이스를 활성화 시킵니다.
  • 기본 환경의 통화 설정을 따라갑니다.
  • 기본 환경의 언어 설정을 따라갑니다.
$paenv = Get-AdminPowerAppEnvironment -Default
if ($paenv.CommonDataServiceDatabaseProvisioningState -ne "Succeeded") {
$currency = Get-AdminPowerAppCdsDatabaseCurrencies `
-LocationName $paenv.Location | Where-Object {
$_.IsTenantDefaultCurrency -eq $true
}
$language = Get-AdminPowerAppCdsDatabaseLanguages `
-LocationName $paenv.Location | Where-Object {
$_.IsTenantDefaultLanguage -eq $true
}
$activated = New-AdminPowerAppCdsDatabase `
-EnvironmentName $paenv.EnvironmentName `
-CurrencyName $currency.CurrencyName `
-LanguageName $language.LanguageName
}

애저 구독 할당

파워 플랫폼을 사용하다 보면 커스텀 커넥터를 사용하기 위해 애저 리소스를 다뤄야 할 경우도 생깁니다. 이 때 애저 구독이 필요한데요, 평가판 테넌트를 생성하면 평가판 애저 구독도 함께 활성화 시킬 수 있습니다. 다만, 이는 신용카드 인증을 위해 애저 포탈에서 직접 해야 합니다. 관리자 계정으로 애저 포탈에 로그인하면 아래와 같은 화면이 나오는데요,

애저 구독 평가판 가입 안내

시작 버튼을 눌러 평가판 구독 절차를 진행합니다.

애저 구독 평가판 가입 절차

위와 같이 관리자 계정에서 평가판 구독 절차가 끝났다면 이번에는 아래 파워셸 명령어를 실행시켜 애저에 로그인합니다. $adminCredential 개체는 앞서 AzureAD 로그인에 사용했던 것과 동일합니다.

$connected = Connect-AzAccount -Credential $adminCredential

NOTE: 파워셸로 애저 리소스를 관리하려면 관련 파워셸 모듈인 Az가 이미 설치되어 있어야 합니다. 아래 명령어를 통해 설치하면 됩니다. 마찬가지로 -Force -AllowClobber 옵션이 무엇을 의미하는 지는 이제 아시겠죠?

Install-Module -Name Az -Scope AllUsers -Repository PSGallery -Force -AllowClobber

그런데, 체험판 구독의 경우 사용할 수 있는 애저 리소스의 종류가 제한적입니다. 실제로 커스텀 커넥터를 위한 리소스는 기본적으로 사용할 수 없게 되어 있으므로 아래 명령어를 통해 파워 플랫폼 핸즈온 실습에 필요한 리소스를 활성화 시킵니다. 여기서는 애저 로직 앱, 애저 저장소, 애저 네트워크, 애저 API 매니지먼트, 애저 Cosmos DB 정도의 리소스를 사용한다고 가정하겠습니다.

$namespaces = @(
"Microsoft.Logic",
"Microsoft.Storage",
"Microsoft.Network",
"Microsoft.ApiManagement",
"Microsoft.DocumentDB"
)
$namespaces | ForEach-Object {
$provider = Get-AzResourceProvider `
-ProviderNamespace $_ | Where-Object { $_.RegistrationState -eq "Registered" }
if (($provider -eq $null) -or ($provider.Count -eq 0)) {
$registered = Register-AzResourceProvider -ProviderNamespace $_
}
}

이렇게 리소스 공급자를 등록했다면, 이제 각 사용자 계정에 구독을 할당할 차례입니다. 애저 구독과 권한 부여에 관련해서는 이 애저 파워셸로 애저 리소스에 대한 권한 부여 페이지를 참조하세요.

NOTE: 구독 전체를 할당하기 보다는 각 사용자별로 리소스 그룹을 생성하고 해당 리소스 그룹에만 기여자 권한을 부여해서 할당하는 것이 보안과 관리 측면에서 용이합니다. 여기서는 지역을 koreacentral로 할당하겠습니다.

$role = Get-AzRoleDefinition | Where-Object { $_.Name -eq "Contributor" }
$location = "koreacentral"
$users | ForEach-Object {
$rg = Get-AzResourceGroup | Where-Object {
$_.ResourceGroupName -eq $("rg-" + $_.MailNickName)
}
if ($rg -eq $null) {
$rg = New-AzResourceGroup `
-Name $("rg-" + $_.MailNickName) `
-Location $location
}
$assigned = New-AzRoleAssignment `
-ObjectId $_.ObjectId `
-RoleDefinitionId $role.Id `
-Scope $rg.ResourceId
}

각 실습자 계정별로 애저 평가판 구독과 실습에 필요한 리소스 그룹 할당이 끝났습니다! 이제 모든 환경 설정이 다 끝났네요.



지금까지 파워 플랫폼 핸즈온 실습을 위한 모든 환경 설정을 파워셸 스크립트로 구성해 봤습니다. 이제 핸즈온 실습 일정이 잡힐 경우 이 파워셸 스크립트만 실행시키면 짧은 시간 안에 모든 구성을 끝마치고 준비할 수 있을 것입니다. 이 참에 한 번 실습 진행해 보실까요? 😉

더 궁금하다면...