Workspaces を SSM のRun Command で操作

# 概要

Workspaces　の管理操作をRun Commandで行う
オンプレのWindowsサーバーにSSM-agentをインストールする手順とほぼ同じです。

# 流れ

* SSM でアクティベーション作成
* Workspaces に ssm-agent をインストール
* Run Command 実行

# SSM でアクティベーション作成

AWS マネージメントコンソールを開き、"Systems Manager"のサービスをクリックし、左側メニューの"アクティベーション"をクリックし、画面右上の"アクティベーションの作成"をクリックする

![スクリーンショット 0030-09-05 20.12.45.png](https://qiita-image-store.s3.amazonaws.com/0/27932/2443dcb0-38cb-dada-da0d-6378c9208650.png)

設定内容を入れ、画面右下の"アクティベーションの作成"をクリックする
アクティベーション名：test-ws1(任意)
インスタンス数制限：5(任意)
アクティベーションの有効期限: 2018-09-08 T00:00+09:00 (任意)

![スクリーンショット 0030-09-05 20.14.33.png](https://qiita-image-store.s3.amazonaws.com/0/27932/2d1ff4dd-3ea4-3a69-fe5a-78ac8216ca4c.png)

アクティベーションが作成される。Activation CodeとActivation IDをエディタなどにコピーしておく
※特にActivation Codeは注意書きされてる通りもう表示されない

![スクリーンショット 0030-09-05 20.15.35.png](https://qiita-image-store.s3.amazonaws.com/0/27932/46c43751-ab24-05ba-4de8-c176f681f183.png)

#### CLI

CLIでももちろん実施可能。以下はサンプルです。

```
aws ssm create-activation --default-instance-name MyWebServers --iam-role RunCommandServiceRole --registration-limit 10 --region us-east-2
```

#### 参考資料

https://docs.aws.amazon.com/ja_jp/systems-manager/latest/userguide/sysman-managed-instance-activation.html

# Workspaces に ssm-agent インストール

ssm-agentのインストールとアクティベーションを行う
以下の値を置換し、全体をコピーしてpowershellのターミナルに貼り付ける
アクティベーション作成時に取得したactivateion codeとactivation id、利用しているリージョンの値を入れる
activation-code に xxxxxxxxxxx
activation-id に yyyyyyyyyy
region に ap-northeast-1

```
$code = "activation-code"
$id = "activation-id"
$region = "region"
$dir = $env:TEMP + "\ssm"
New-Item -ItemType directory -Path $dir -Force
cd $dir
(New-Object System.Net.WebClient).DownloadFile("https://amazon-ssm-$region.s3.amazonaws.com/latest/windows_amd64/AmazonSSMAgentSetup.exe", $dir + "\AmazonSSMAgentSetup.exe")
Start-Process .\AmazonSSMAgentSetup.exe -ArgumentList @("/q", "/log", "install.log", "CODE=$code", "ID=$id", "REGION=$region") -Wait
Get-Content ($env:ProgramData + "\Amazon\SSM\InstanceData\registration")
Get-Service -Name "AmazonSSMAgent"
```

一箇所権限の問題でエラーが出てますが、Workspacesのため許可されてない部分かもしれません。get系のコマンドなのでそのまま進めます。

![スクリーンショット 0030-09-05 22.07.48.png](https://qiita-image-store.s3.amazonaws.com/0/27932/0c45ad85-3c03-6bd4-5a68-15bc029e05cd.png)

AWS マネージメントコンソールの systems manager の画面で、アクティベーションされ workspaces のノードが登録されたことを確認する

![スクリーンショット 0030-09-05 20.28.45.png](https://qiita-image-store.s3.amazonaws.com/0/27932/df26c4cb-c5e7-4e60-239d-34b47ccdd0ac.png)

#### 参考資料

https://docs.aws.amazon.com/ja_jp/systems-manager/latest/userguide/sysman-install-managed-win.html

# Run Command 実行

AWS マネージメントコンソールの systems manager の画面で、左側のメニューから Run Commandをクリックし、画面右上の"コマンドを実行"をクリックする

![スクリーンショット 0030-09-05 20.29.07.png](https://qiita-image-store.s3.amazonaws.com/0/27932/06121878-18b8-b020-fc74-31ae752d9b26.png)

コマンドドキュメントの"AWS-RunPowerShellScript"にチェックを入れる

![スクリーンショット 0030-09-05 20.29.44.png](https://qiita-image-store.s3.amazonaws.com/0/27932/27ab126b-1a53-d0ca-5560-0cde5fa4ce24.png)

次に"AWS-RunPowerShellScript"のパラメータを入力していく

実行するPowershellコマンドに

```
New-Item d:\hogehoge -itemType Directory
```

![スクリーンショット 0030-09-05 22.19.16.png](https://qiita-image-store.s3.amazonaws.com/0/27932/943b9db3-621e-5647-9f60-b698ed349d45.png)

ターゲットに先程登録したWorkspacesのノードを選択する

![スクリーンショット 0030-09-05 20.35.42.png](https://qiita-image-store.s3.amazonaws.com/0/27932/0f86e26e-ebe5-27ad-2997-ead212f6e65f.png)

画面右下の"実行"をクリックする

![スクリーンショット 0030-09-05 20.35.53.png](https://qiita-image-store.s3.amazonaws.com/0/27932/940b7906-79cd-a990-0a8a-60b562a27831.png)

実行状況。今回だとすぐ終わるので"成功"と出ている

![スクリーンショット 0030-09-05 22.22.54.png](https://qiita-image-store.s3.amazonaws.com/0/27932/1437a8f4-bfda-1642-2256-b68e2127f0f0.png)

Workspaces上にもディレクトリができています。

![スクリーンショット 0030-09-05 22.25.39.png](https://qiita-image-store.s3.amazonaws.com/0/27932/0a043deb-5bbb-7627-f3cc-dd02128e5d13.png)

管理者がリモート操作で再起動させるなども出来ますね。

```
Restart-Computer -Force
```

ログオフはこれか

```
(Get-WmiObject -Class Win32_OperatingSystem -ComputerName .).Win32Shutdown(0)
```

Powershellのさまざまなコマンドが打てるのと、RunCommandで実行できるコマンドドキュメントも作成済のものが用意されていています。

#### CLI

CLIでももちろん実施可能。以下はサンプルです。

```
Send-SSMCommand -InstanceId 'Instance-ID' -DocumentName AWS-RunPowerShellScript -Comment 'listing services on the instance' -Parameter @{'commands'=@('Get-Service')}
```

```
aws ssm send-command --document-name "AWS-RunShellScript" --comment "listing services" --instance-ids "Instance-ID" --parameters commands="service --status-all" --region us-west-2 --output text
```

# 参考ドキュメント

https://docs.aws.amazon.com/ja_jp/systems-manager/latest/userguide/systems-manager-managedinstances.html