BLOG

Amazon AppStream 2.0에서 PowerShell 기반 동적 앱 프로바이더의 생성
작성일: 2019-10-02

Amazon AppStream 2.0 동적 애플리케이션의 프레임 워크는 AppStream 2.0 스트리밍 인스턴스 내에서 동적 앱 프로바이더를 구축하는 데 사용할 수 있는 API 작업을 제공합니다. 동적 앱 프로바이더는 이러한 API 조작을 사용하여 사용자가 실시간으로 액세스 할 수 있는 애플리케이션의 카탈로그를 변경합니다. 예를 들어 Active Directory 도메인 그룹 멤버십 또는 기타 비즈니스 논리를 기반으로 카탈로그에 애플리케이션을 추가 할 수 있습니다. AppStream 2.0은 Apache Thrift(https://thrift.apache.org)를 사용하여 API에 사용되는 프로세스 간 메시지를 정의합니다.

Apache Thrift를 사용하면 간단한 정의 파일에서 데이터 유형 및 서비스 인터페이스를 정의하여 클라이언트 및 서버를 구축 할 수 있습니다. 이러한 정의를 사용하여 여러 프로그래밍 언어로 코드 파일을 생성 할 수 있습니다.

이 게시 글에서는 AppStream 2.0의 동적 애플리케이션 프레임 워크 Thrift 정의 파일에서 .NET 동적 링크 라이브러리 (DLL)를 작성하는 방법에 대해 설명합니다. DLL을 만든 후 PowerShell 동적 애플리케이션 프레임 워크 클라이언트 스크립트와 함께 사용할 수 있습니다.

 

연습

이 게시 글에서는 다음 작업을 수행하는 방법을 보여줍니다.

  1. Apache Thrift 컴파일러를 다운로드하고 AppStream 2.0 Thrift 정의 파일을 준비합니다.
  2. Thrift 정의 파일에서 C # 코드 파일을 생성합니다.
  3. 생성 된 C # 코드 파일을 사용하여 새 Visual Studio 프로젝트를 작성 합니다.
  4. 동적 애플리케이션 프레임 워크 .NET DLL을 컴파일합니다.
  5. PowerShell 동적 애플리케이션 프레임 워크 클라이언트 스크립트 예제와 함께 .NET DLL을 사용하십시오.

 

Apache Thrift 컴파일러를 다운로드하고 AppStream 2.0 Thrift 정의 파일을 준비합니다.

https://thrift.apache.org/download로 이동하여 최신 버전의 Thrift 컴파일러를 다운로드하십시오.

Thrift 컴파일러를 다운로드 한 후 Thrift 컴파일러를 다운로드 한 동일한 디렉토리에 AppStreamServer.thrift 및 AppStreamServerMessages.thrift 정의 파합니다. 두 Thrift 정의 파일의 구문은 AppStream 2.0 관리 가이드의 Dynamic Application Framework Thrift 정의 및 Named Pipe Name에 있습니다.

 

 

Thrift 정의에서 C # 코드 파일의 생성

컴파일러를 다운로드하고 Thrift 정의 파일을 작성하면 DLL을 컴파일 하는데 필요한 C # 코드 파일을 생성 할 수 있습니다.

명령 또는 PowerShell 프롬프트에서 다음을 실행하십시오.

thrift-<version>.exe -r –gen csharp AppStreamServer.thrift

 

이 명령은 정의 파일과 같은 폴더에 gen-csharp 디렉토리를 출력합니다.

Model 하위 폴더 (gen-csharp → AppStream → ApplicationCatalogService → Model)에는 다음 C # 코드 파일이 있어야 합니다.

 

생성된 C # 코드 파일을 사용한 새 Visual Studio 프로젝트의 작성

필요한 코드 파일이 준비되었으므로 DLL 컴파일을 시작할 수 있습니다. 이 게시물에서는 Visual Studio 2019 사용 방법을 보여 드리지만, 최신 버전의 Visual Studio가 작동 하게 됩니다.

Visual Studio를 열고 기존 코드 파일에서 새 프로젝트 만들기 마법사를 시작합니다.

시작 페이지에서 프로젝트 유형으로 Visual C #을 선택합니다.

프로젝트 세부 사항을 지정하는 페이지에서 다음의 순서대로 실행합니다 :

  • 방금 생성된 C # 코드 파일의 장소를 참조합니다.
  • 이름에 프로젝트의 이름을 입력합니다.
  • 출력 유형에서 클래스 라이브러리를 선택합니다.

 

종료를 선택합니다.

이제 Thrift .NET 라이브러리를 프로젝트 솔루션에 추가할 차례입니다. 이 게시 글에서는 NuGet을 사용하여 이것을 진행하는 방법을 보여줍니다. NuGet은 패키지 관리에 사용되는 Visual Studio 확장 기능 입니다.

솔루션 탐색기에서 솔루션을 우 클릭 하고 솔루션의 NuGet 패키지 관리를 선택합니다.

검색창의 참조 탭에서 thrift라고 타이핑 합니다. 결과 목록에서 ApacheThrift (Apache Thrift Developers에서 공개)를 선택합니다.

 

동적 애플리케이션 프레임 워크 .NET DLL 컴파일

이제 DLL을 컴파일할 준비가 되었습니다. 솔루션을 마우스 오른쪽 단추로 클릭하고 솔루션 빌드를 선택합니다.

빌드가 성공하면 프로젝트의 디버그 폴더에 두 개의 DLL 파일이 표시됩니다. 클라이언트 스크립트에는 둘 다 필요합니다.

  • dll
  • dll

 

PowerShell 동적 애플리케이션 프레임 워크 클라이언트 스크립트 예제와 함께 .NET DLL 사용

다음 PowerShell 스크립트는 간단한 동적 애플리케이션 프레임 워크 클라이언트입니다. 이 클라이언트는 별도로 생성 된 CSV에서 애플리케이션 데이터를 가져 와서 사용자에게 표시되는 AppStream 2.0 애플리케이션 카탈로그에 추가합니다.

사용할 수 있는 동적 애플리케이션 프레임 워크 API 조치의 전체 목록은 AppStream 2.0의 App Entitlement 관리를 위한 API 조치를 참조하십시오.

Add-Type -Path C:\Path\To\AS2DAF.dll #Define the full path to the DAF DLL

Add-Type -Path C:\Path\To\Thrift.dll #Define the full path to the Thrift DLL

 

#Logging Function

Function Write-Log {

    Param ([string]$message)

    $stamp = (Get-Date).toString(“yyyy/MM/dd HH:mm:ss”)

    $logoutput = “$stamp $message”

    Add-content $logfile -value $logoutput

}

 

#Create Log file

$currentuser = (get-wmiobject Win32_ComputerSystem).UserName.Split(‘\’)[1]

$logfile = “C:\Users\$currentuser\Documents\Logs\DAFClient\$currentuser-$(get-date -f MM-dd-yyyy_HH_mm_ss)-dafupdate.log”

New-Item -path $logfile -ItemType File -Force | Out-Null

 

$csvpath = “<Path to CSV>” #Define the CSV path

 

#If the CSV does not exist, exit the script

if (!(Test-Path -Path $csvpath)) {

 

    Write-Log “No application catalog update file. Exiting…”

    Exit

 

}

 

#Establish a connection to the Thirft server, exposed via Named Pipes

Write-Log “Opening connection to AS2 Thrift server…”

$transport = New-Object -TypeName Thrift.Transport.TNamedPipeClientTransport(‘D56C0258-2173-48D5-B0E6-1EC85AC67893’)

$protocol = New-Object -TypeName Thrift.Protocol.TBinaryProtocol($transport)

$client = New-Object -TypeName AppStream.ApplicationCatalogService.Model.ApplicationCatalogService+Client($protocol)

$transport.open()

Write-Log “Connected…”

 

#Get the current user’s SID

$usersid = (New-Object System.Security.Principal.NTAccount(($currentuser))).Translate([System.Security.Principal.SecurityIdentifier]).value

 

Write-Log “Getting applist for $currentuser, SID: $usersid…”

 

#Get the content of the CSV and add each application to dynamic application catalog

foreach ($app in (Import-Csv -path $csvpath)) {

 

    $appId = $app.Id

    $appdname = $app.DisplayName

    $apppath = $app.LaunchPath

    $appicon = $app.IconData

 

    Write-Log “Adding $appdname to the dynamic application catalog…”

 

    $applist = New-Object -TypeName AppStream.ApplicationCatalogService.Model.Application(“$appId”, “$appdname”, “$apppath”, “$appicon”)

    $getappreq = New-Object -TypeName Appstream.ApplicationCatalogService.Model.AddApplicationsRequest($usersid, $applist)

    $client.AddApplications($getappreq)

}

 

#Close the connection to the Thrift server

Write-Log “Closing connection…”

$transport.close()

 

Exit

 

Thrift 서버에 성공적으로 연결하려면 이 클라이언트 스크립트를 SYSTEM 컨텍스트에서 실행 해야 합니다. Windows 예약 작업 또는 AppStream 2.0 세션 스크립트 기능을 사용합니다.

방법에 상관없이 스크립트는 사용자의 로그인 (또는 세션 시작)에서 트리거 되어야 합니다. 이를 통해 사용자는 AppStream 2.0 인스턴스에 로그인한 후 동적으로 제공되는 모든 앱을 볼 수 있습니다.

클라이언트가 읽는 CSV 파일에는 각 애플리케이션에 대한 다음 정보가 포함됩니다.

  • ID 번호
  • 애플리케이션 이름
  • 실행 가능 파일의 전체 경로 (온 또는 오프 인스턴스일 수 있음).
  • 아이콘 이미지 (base64) .NET 메서드 ToBase64String을 사용하여 PowerShell에서 이미지를 base64로 변환 할 수 있습니다 .

 

$icondata = [convert]::ToBase64String((get-content “Path\to\image.png” -Encoding byte))

 

동적 애플리케이션 프레임 워크 클라이언트의 프로덕션 배포에서는 CSV 파일을 동적으로 생성합니다. 비즈니스 로직에 따라 결정된 사용자의 애플리케이션 권한을 기반으로 합니다. 그러나 클라이언트 스크립트를 테스트하는 동안 애플리케이션 메타 데이터와 함께 정적 CSV를 사용하여 스크립트가 예상대로 작동하는지 확인하십시오.

 

스크립트가 CSV에서 애플리케이션을 성공적으로 추가하였는지 확인한 후에는 AppStream 2.0 카탈로그에 추가할 애플리케이션 자격 및 메타 데이터를 생성하기 위한 비즈니스 논리를 추가하거나 만들어야 합니다.

 

결론

이상입니다! 이제 동적 애플리케이션 프레임 워크 클라이언트 PowerShell 스크립트에 필요한 .NET DLL이 있습니다. 또한 클라이언트 스크립트를 개발하는 데 사용할 수 있는 동적 애플리케이션 프레임 워크 클라이언트 PowerShell 스크립트 예제도 있습니다.

 

원문 URL: https://aws.amazon.com/ko/blogs/desktop-and-application-streaming/create-a-powershell-based-dynamic-app-provider-in-amazon-appstream-2-0/

 

** 메가존 클라우드 TechBlog는 AWS BLOG 영문 게재 글 중에서 한국 사용자들에게 유용한 정보 및 콘텐츠를 우선적으로 번역하여 내부 엔지니어 검수를 받아서, 정기적으로 게재하고 있습니다. 추가로 번역 및 게재를 희망하는 글에 대해서 관리자에게 메일 또는 SNS 페이지에 댓글을 남겨주시면, 우선적으로 번역해서 전달해드리도록 하겠습니다.