BLOG

AppStream 2.0 이미지 빌더에서 프로그래밍 작업을 위한 SSM Run 사용법
작성일: 2020년 2월 6일

Amazon AppStream 2.0은 데스크톱 애플리케이션을 중앙 집중식으로 관리하고 모든 컴퓨터에 전송할 수 있는 완전 관리형 앱 스트리밍 서비스입니다. AppStream 2.0 스트리밍 인스턴스는 데스크탑 어플리케이션을 설치 및 구성하여 구축한 AppStream 2.0 이미지를 기반으로 합니다. AppStream 2.0은 최근 사용자가 실행할 수 있는 애플리케이션, 애플리케이션을 가속화하도록 최적화해야 할 파일 및 이미지에 필요한 기타 세부 정보를 프로그래밍 방식으로 지정할 수 있는 Image Assistant command line interface (CLI) operations을 출시했습니다. 이 CLI 작업은 이미지 빌더에서 실행 가능합니다.

 

이전 블로그 글에서 Microsoft Window EC2 관리 서버에서 실행된 PowerShell로 원격 명령을 사

용하여 App Stream 2.0 Image Assistant CLI operation을 통해 이미지를 생성하는 방

에 대해 다룬 적 있습니다. 오늘은  AWS Systems Managers Run Command를 사용하여

Microsoft Windows EC2 관리 서버를 통해 AppStream 2.0 이미지 빌더에서 원격 명령을 실행

하는 방법에 대해 설명 드리겠습니다. 이를 통해 AWS API/SDK로 이미지 빌더에서

원격 명령을 실행할 수 있습니다.

 

전제 조건

전제조건을 모두 설정 완료했을 때, SSM 실행 명령으로 EC2 관리서버의 대상 AppStream 2.0 이미지 빌더에 대하여 원격으로 PowerShell 명령을 실행할 수 있습니다. AppStream 2.0 이미지 빌더에 대해 좀더 높은 수준의 명령을 실행하기 위한 워크 플로우입니다.

그림1. AppStream 2.0 이미지 빌더에 대한 명령실행 워크플로우

 

  1. 권한이 있는 EC2 관리 서버가 실행할 스크립트와 함께 AWS-RunPowerShellScript SSM document를 이용하여 SSM Run을 호출합니다.
  2. EC2 관리 서버는 실행될 때 PowerShell 원격 명령을 포함하여 스크립트를 실행합니다.
  3. AppStream 2.0 이미지 빌더가 실행될 때 EC2 관리서버가 보낸 PowerShell Script를 실행합니다.
  4. SSM Run은 EC2 관리서버(및 이미지 빌더가 구성된 경우)에서 콘솔 output 로그를 캡쳐하여 특정 S3 Bucket에 저장합니다.

다음 예시로는, SSM Run 명령어를 통하여 Image Assistant List-Applications CLI operation을 실행 하고 이미지 빌더에 저장된 어플리케이션을 찾는 방법을 설명합니다.

 

SSM 관리 콘솔을 사용한 이미지 빌더에 대한 명령 실행법

SSM’s Management Console은 관리서버가 이미지 빌더에서 실행할 명령을 작성하고 실행하기 위한 간단한 그래픽 유저 인터페이스 기반의 접근 방식을 제공합니다.

 

SSM Management 콘솔을 사용하여 EC2 관리 서버 에서 명령을 실행하는 방법:

  1. 관리 서버와 동일한 AWS Region에서 SSM 관리 콘솔로 이동하십시오
  2. 왼쪽에 있는 navigation 메뉴에서 Run Command 버튼을 찾으십시오
  3. Run Command를 실행하십시오
  4. AWS-RunPowerShellScript command document를 찾으십시오
  5. 아래의 PowerShell 스크립트를 수정한 뒤에 명령 텍스트 박스에 입력하십시오. AppStream 2.0 DescribeImageBuilders API action과 EC2 DescribeNetworkInterfacesAPI action 또는 이미지 빌더를 사용하여 이미지 빌더의 IP 주소를 찾을 수 있습니다.

<PowerShell>

$strAccountPassword = ConvertTo-SecureString “<Password for the image builder administrator account>” -AsPlainText -Force

 

$objAccountCredentials = New-Object System.Management.Automation.PSCredential (“<Username for the image builder administrator account>”,$strAccountPassword)

 

Invoke-Command -ComputerName <IP address of the target image builder> -ScriptBlock { image-assistant.exe list-applications } -credential $objAccountCredentials

참고: EC2 관리 서버를 사용하여 이미지 빌더의 IP주소 찾기와 AWS API 작업을 수행할 수 있습니다. EC2 관리 서버의 IAM Role 이 AWS API 작업을 실행할 수 있는지 확인하십시오.

 

  1. 타겟 섹션에서 인스턴스를 직접 선택하신 뒤에 EC2 관리 서버를 선택하십시오.
  2. (옵션) Output 옵션 섹션에서 명령을 Amazon S3 버킷에 쓰게끔 선택합니다. SS은 마지막 2500자만 출력이 가능하지만 S3버킷은 완전한 출력이 가능합니다.
  3. Run command를 실행하십시오.
  4. 잠시 후에 새로고침 아이콘을 누르십시오. 모든 상태가 완료될 때까지 반복하십시오.
  5. 모든 상태가 정상적으로 실행되었을 때, Target and output 섹션에서 EC2 관리 서버를 선택한 뒤 View output를 선택하십시오.
  6. Image Assistant-Applications CLI 작업을 통하여 JSON 출력물을 확인할 수 있습니다.

 

Windows PowerShell의 AWS Tool을 사용한 이미지 빌더에 대한 명령어 실행법

다음 스크립트를 사용하여 Windows PowerShell의 AWS tool을 사용하여 EC2 관리 서버가 있는 이미지 빌더에서 Image Assistant List-Applications CLI 작업을 실행합니다. 작업 환경에서 잘 작동하도록 스크립트에서 매개 변수를 업데이트 하여야 합니다.

<PowerShell>

############

## Parameters to modify

############

$strEc2AdminServer = ‘<Instance ID of the EC2 administrative server>’

$strIbName = ‘<Name of the target image builder>’

$strIbUsername = ‘<Username of the Windows user with administrator rights on the image builder’

$strIbPassword = ‘<Password of the Windows user with administrator rights on the image builder’

$strAWSRegion = ‘<AWS Region the EC2 administrative server is in>’

$strS3BucketName = ‘<Name of the S3 Bucket to write the SSM Run output to>’

$strS3KeyPrefix = ‘<Folder structure for the S3 Bucket>’

 

$strIbIp = (Get-APSImageBuilderList -Name $strIbName).NetworkAccessConfiguration.EniPrivateIpAddress #Find the IP address of the target image builder using its name and the AppStream 2.0 API

 

############

## PowerShell commands to execute on EC2 administrative server that execute on target image builder

############

$strArrCommands = @() #Initialize the commands array

$strArrCommands += ‘$strAccountPassword = ConvertTo-SecureString “‘+$strIbPassword+'” -AsPlainText -Force’

$strArrCommands += ‘$objAccountCredentials = New-Object System.Management.Automation.PSCredential (“‘+$strIbUsername+'”,$strAccountPassword)’

$strArrCommands += ‘Invoke-Command -ComputerName “‘+$strIbIp+'” -ScriptBlock { image-assistant.exe list-applications } -credential $objAccountCredentials’

 

############

## Call SSM Run command, then wait for output.

############

$objRunPSCommand = Send-SSMCommand -InstanceId $strEc2AdminServer -DocumentName AWS-RunPowerShellScript -Parameter @{‘commands’=$strArrCommands} -OutputS3BucketName $strS3BucketName -OutputS3KeyPrefix $strS3KeyPrefix -Region $strAWSRegion

do {

    Start-Sleep -Seconds 5 #Waiting for command execution to complete.

    $objPSCommandDetails = Get-SSMCommandInvocation -CommandId $objRunPSCommand.CommandId -Details $true -InstanceId $strEc2AdminServer -Region $strAWSRegion

} while ($objPSCommandDetails.Status -eq “InProgress”)

 

$objPSCommandDetails | select -ExpandProperty CommandPlugins

 

Output 예시:

<PowerShell>

Name                   : aws:runPowerShellScript

Output                 : {

                           “status”: 0,

                           “message”: “Success”,

                           “applications”: [

                             {

                               “Name”: “firefox”,

                               “AbsoluteAppPath”: “C:\\Program Files (x86)\\Mozilla Firefox\\firefox.exe”,

                               “DisplayName”: “Mozilla FireFox”,

                               “AbsoluteIconPath”: “C:\\ProgramData\\Amazon\\Photon\\AppCatalogHelper\\AppIcons\\43eeb6c5-ede1-49c0-9dcc-1302e99bf4d4.png”

                             }

                           ]

                         }

                        

OutputS3BucketName     : <redacted S3 bucket name>

OutputS3KeyPrefix      : 79119fd7-c077-4755-9e98-bff16a607acc/<EC2 administrative server instance ID>/awsrunPowerShellScript

OutputS3Region         : us-east-1

ResponseCode           : 0

ResponseFinishDateTime : 10/13/2019 11:55:58 PM

ResponseStartDateTime  : 10/13/2019 11:55:54 PM

StandardErrorUrl       : https://s3.amazonaws.com/<Output S3 bucket name>/79119fd7-c077-4755-9e98-bff16a607acc/<EC2 administrative server instance ID>/awsrunPowerShellScript/0.awsrunPowerShellScript/stderr

StandardOutputUrl      : https://s3.amazonaws.com/<Output S3 bucket name>/79119fd7-c077-4755-9e98-bff16a607acc/<EC2 administrative server instance ID>/awsrunPowerShellScript/0.awsrunPowerShellScript/stdout

Status                 : Success

StatusDetails          : Success

 

 

 

 

 

이번 블로그 포스팅에서는 Windows EC2 인스턴스를 사용하여 실행중인 AppStream2.0 이미지 빌더에서 원격 명령을 하는법에 대해 다루어 보았습니다. 이 경우, SSM Run 명령의 output은 S3 버킷에 저장됩니다. Resources 사용이 완료되면 EC2 인스턴스와 해당 EBS volume를 종료하고 AppStream 2.0 이미지 빌더를 종료한 뒤에 S3 버킷의 객체를 삭제하여 추가적인 요금이 발생하지 않게 주의하십시오.

 

결론

SSM 실행 명령어와 API 작업을 사용하여 이미지 빌더에 소프트웨어를 설치하고 유저가 실행할 수 있도록 어플리케이션을 설정한 다음 그래픽 유저 인터페이스를 사용하지 않고 이미지를 생성할 수 있습니다. 또한 image builders assuming IAM Roles in your AWS account와 결합하면 더욱 더 많은 기능을 확장해 이용할 수도 있습니다!

 

 


 

원문 URL: https://aws.amazon.com/ko/blogs/desktop-and-application-streaming/how-to-use-ssm-run-to-perform-programmatic-actions-on-appstream-2-0-image-builders/

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