

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# セッションスクリプトを使用してユーザーのストリーミングエクスペリエンスを管理する
<a name="pools-images-session-scripts"></a>

WorkSpaces Pools には、インスタンスセッションスクリプトが用意されています。ユーザーのストリーミングセッションで特定のイベントが発生したときに、これらのスクリプトを使用して独自のカスタムスクリプトを実行できます。例えば、ユーザーのストリーミングセッションが開始される前に、カスタムスクリプトを使用して WorkSpaces Pools 環境を準備できます。ユーザーがストリーミングセッションを完了した後に、カスタムスクリプトを使用してストリーミングインスタンスをクリーンアップすることもできます。

セッションスクリプトは WorkSpace イメージ内で指定します。これらのスクリプトはユーザーコンテキストまたはシステムコンテキスト内で実行されます。セッションスクリプトが情報、エラー、またはデバッグメッセージの書き込みに標準出力を使用する場合は、オプションで、それらを Amazon Web Services アカウント内の Amazon S3 バケットに保存することができます。

**Topics**
+ [ストリーミングセッションの開始前にスクリプトを実行する](#run-scripts-before-streaming-sessions-begin)
+ [ストリーミングセッションの終了後にスクリプトを実行する](#run-scripts-after-streaming-sessions-end)
+ [セッションスクリプトを作成および指定する](#create-specify-session-scripts)
+ [セッションスクリプト設定ファイル](#session-script-configuration-file)
+ [Windows PowerShell ファイルの使用](#using-powershell-files-with-session-scripts)
+ [セッションスクリプト出力のログ記録](#logging-session-output)
+ [セッションスクリプトで永続的ストレージを使用する](#use-storage-connectors-with-session-scripts)
+ [セッションスクリプトログに対して Amazon S3 バケットストレージを有効にする](#enable-S3-bucket-storage-session-script-logs)

## ストリーミングセッションの開始前にスクリプトを実行する
<a name="run-scripts-before-streaming-sessions-begin"></a>

ユーザーのアプリケーションが起動されてストリーミングセッションが開始されるまでに最大 60 秒間実行されるようにスクリプトを設定できます。それにより、ユーザーがアプリケーションのストリーミングを開始する前に WorkSpaces Pools 環境をカスタマイズできます。セッションスクリプトが実行されると、読み込みスピナーがユーザーに表示されます。スクリプトが正常に完了するか、最大待機時間が経過すると、ユーザーのストリーミングセッションが開始されます。スクリプトが正常に完了しなかった場合は、エラーメッセージがユーザーに表示されます。ただし、ユーザーはストリーミングセッションの使用を禁止されません。

Windows インスタンスでファイル名を指定するときは、ダブルバックスラッシュを使用する必要があります。例えば、次のようになります。

```
C:\\Scripts\\Myscript.bat
```

二重のバックスラッシュを使用しないと、`.json` ファイル形式が正しくないことを示すエラーが表示されます。

**注記**  
スクリプトは正常に完了したら、値 0 を返します。スクリプトが 0 以外の値を返した場合、WorkSpaces はユーザーにエラーメッセージを表示します。

ストリーミングセッションの開始前にスクリプトを実行すると、以下のプロセスが発生します。

1. ユーザーが、ドメインに参加していない WorkSpaces Pool の WorkSpace に接続されます。接続には SAML 2.0 を使用します。

1. 以下のいずれかのプロセスが発生します。
   + ユーザーに対してアプリケーション設定の永続化が有効になっている場合は、ユーザーのカスタマイズ内容と Windows の設定内容を保存しているアプリケーション設定の Virtual Hard Disk (VHD) ファイルがダウンロードされてマウントされます。この場合は、Windows ユーザーのログインが必要です。

     アプリケーション設定の永続化については、[WorkSpaces Pools ユーザーのアプリケーション設定の永続化を有効にする](app-settings-persistence.md) を参照してください。
   + アプリケーション設定の永続化が有効になっていない場合、Windows ユーザーはすでにログインしています。

1. セッションスクリプトが起動されます。ユーザーに対して永続的ストレージが有効になっている場合は、ストレージコネクタのマウントも開始されます。永続的ストレージについては、[WorkSpaces Pools で永続的ストレージを有効にして管理する](persistent-storage.md) を参照してください。
**注記**  
ストリーミングセッションを開始するためにストレージコネクタのマウントを完了する必要はありません。セッションスクリプトが完了したとき、まだストレージコネクタのマウントが完了していなくても、ストリーミングセッションは開始されます。  
ストレージコネクタのマウント状況のモニタリングについては、[セッションスクリプトで永続的ストレージを使用する](#use-storage-connectors-with-session-scripts) を参照してください。

1. セッションスクリプトは完了するかタイムアウトします。

1. ユーザーのストリーミングセッションが開始されます。

## ストリーミングセッションの終了後にスクリプトを実行する
<a name="run-scripts-after-streaming-sessions-end"></a>

ユーザーのストリーミングセッションの終了後にスクリプトを実行するように設定することもできます。例えば、ユーザーが WorkSpaces クライアントのツールバーから **[セッションの終了]** を選択したとき、またはユーザーが許容される最大セッション時間に達したときに、スクリプトを実行できます。これらのセッションスクリプトを使用して、ストリーミングインスタンスが終了する前に WorkSpaces 環境をクリーンアップすることもできます。たとえば、スクリプトを使用してファイルロックを解除したり、ログファイルをアップロードしたりできます。ストリーミングセッションの終了後にスクリプトを実行すると、以下のプロセスが発生します。

1. ユーザーの WorkSpaces ストリーミングセッションが終了します。

1. セッション終了スクリプトが起動されます。

1. セッション終了スクリプトが完了またはタイムアウトします。

1. Windows ユーザーのログアウトが発生します。

1. 以下のうち該当する一方が実行されるか、両方が同時に実行されます。
   + ユーザーに対してアプリケーション設定の永続化が有効になっている場合、ユーザーのカスタマイズ内容と Windows 設定内容を保存しているアプリケーション設定の VHD ファイルがマウント解除され、アカウントの Amazon S3 バケットにアップロードされます。
   + ユーザーに対して永続的ストレージが有効になっている場合、ストレージコネクタは最後の同期を完了し、マウント解除されます。

1. WorkSpace が終了します。

## セッションスクリプトを作成および指定する
<a name="create-specify-session-scripts"></a>

WorkSpaces Pools の WorkSpaces のセッションスクリプトを作成して指定するには、次の手順を実行します。

1. カスタムイメージの作成元となる Windows WorkSpaces に接続します。

1. ディレクトリ `/AWSEUC/SessionScripts` を作成します (まだない場合)。

1. [セッションスクリプト設定テンプレート](https://docs.aws.amazon.com/workspaces/latest/adminguide/pools-images-session-scripts.html#session-script-configuration-file)を使用して、設定ファイル `/AWSEUC/SessionScripts/config.json` がまだ存在しない場合は作成します。

1. `C:\AWSEUC\SessionScripts` に移動し、`config.json` 設定ファイルを開きます。

   セッションスクリプトパラメータについては、[セッションスクリプト設定ファイル](#session-script-configuration-file) を参照してください。

1. 変更が終了したら、`config.json` ファイルを保存して閉じます。

1. WorkSpace からイメージを作成する手順を完了します。詳細については、「[WorkSpaces Pools のカスタムイメージとカスタムバンドルを作成する](pools-images-custom-image.md)」を参照してください。

## セッションスクリプト設定ファイル
<a name="session-script-configuration-file"></a>

Windows インスタンス上のセッションスクリプト設定ファイルを見つけるには、`C:\AWSEUC\SessionScripts\config.json` に移動します。ファイル形式は次のとおりです。

**注記**  
設定ファイルは JSON 形式です。このファイルに入力したテキストが有効な JSON 形式であることを確認します。

```
{
  "SessionStart": {
    "executables": [
      {
        "context": "system",
        "filename": "",
        "arguments": "",
        "s3LogEnabled": true
      },
      {
        "context": "user",
        "filename": "",
        "arguments": "",
        "s3LogEnabled": true
      }
    ],
    "waitingTime": 30
  },
  "SessionTermination": {
    "executables": [
      {
        "context": "system",
        "filename": "",
        "arguments": "",
        "s3LogEnabled": true
      },
      {
        "context": "user",
        "filename": "",
        "arguments": "",
        "s3LogEnabled": true
      }
    ],
    "waitingTime": 30
  }
}
```

セッションスクリプト設定ファイルでは、以下のパラメータを使用できます。

**`SessionStart/SessionTermination `**  
オブジェクトの名前に基づいて該当するセッションイベントで実行するセッションスクリプト。  
**型**: 文字列  
**必須:** いいえ  
**使用できる値:** **SessionStart**、**SessionTermination**

**`WaitingTime`**  
セッションスクリプトの最大期間 (秒単位)。  
**タイプ:** 整数  
**必須:** いいえ  
**制約**: 最大期間は 60 秒です。セッションスクリプトは、この期間内に完了しない場合、停止されます。スクリプトを引き続き実行する必要がある場合は、別のプロセスとして起動してください。

**`Executables`**  
実行するセッションスクリプトの詳細。  
**型**: 文字列  
**必須**: はい  
**制約**: セッションイベントごとに実行できるスクリプトの最大数は 2 です (1 つはユーザーコンテキスト用、もう 1 つはシステムコンテキスト用)。

**`Context`**  
セッションスクリプトを実行するコンテキスト。  
**型**: 文字列  
**必須**: はい  
**使用できる値:** **user**、**system**

**`Filename`**  
実行するセッションスクリプトへの完全パス。このパラメータを指定しない場合、セッションスクリプトは実行されません。  
**型**: 文字列  
**必須:** いいえ  
**制約**: ファイル名と完全パスの最大長は 1,000 文字です。  
**使用できる値:** **.bat**、**.exe**、**.sh**  
Windows PowerShell ファイルを使用することもできます。詳細については、「[Windows PowerShell ファイルの使用](#using-powershell-files-with-session-scripts)」を参照してください。

**`Arguments`**  
セッションスクリプトまたは実行可能ファイルの引数。  
**型**: 文字列  
**必須:** いいえ  
**長さの制限**: 最大長は 1,000 文字です。

**`S3LogEnabled`**  
このパラメータの値が **True** に設定されていると、セッションスクリプトによって作成されたログを保存するための S3 バケットが Amazon Web Services アカウント内に作成されます。デフォルトではこの値は **True** に設定されます。詳細については、このトピックの後半の「*セッションスクリプト出力のログ記録*」セクションを参照してください。  
型: ブール  
**必須:** いいえ  
**使用できる値:** **True**、**False**

## Windows PowerShell ファイルの使用
<a name="using-powershell-files-with-session-scripts"></a>

Windows PowerShell ファイルを使用するには、`filename` パラメータに PowerShell ファイルへの絶対パスを指定します。

```
"filename": 
"C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe",
```

次に、**arguments** パラメータにセッションスクリプトを指定します。

```
"arguments": "-File \"C:\\path\\to\\session\\script.ps1\"",
```

最後に、PowerShell 実行ポリシーで PowerShell ファイルの実行が許可されていることを確認します。

## セッションスクリプト出力のログ記録
<a name="logging-session-output"></a>

設定ファイルでこのオプションが有効になっていると、セッションスクリプトから標準出力に書き込まれた出力が WorkSpaces Pools によって自動的に収集されます。この出力はアカウントの Amazon S3 バケットにアップロードされます。トラブルシューティングやデバッグの目的でログファイルを確認できます。

**注記**  
ログファイルは、セッションスクリプトが値を返したときか、**WaitingTime** に設定された時間を経過したときの、どちらか早いほうでアップロードされます。

## セッションスクリプトで永続的ストレージを使用する
<a name="use-storage-connectors-with-session-scripts"></a>

WorkSpaces の永続的ストレージを有効にすると、セッション開始スクリプトの実行時にストレージのマウントが開始されます。マウントされている永続的ストレージにスクリプトが依存している場合は、コネクタが使用可能になるまで待つことができます。WorkSpaces は、以下のキーで、Windows WorkSpaces の Windows レジストリにあるストレージコネクタのマウントステータスを維持します。

```
HKEY_LOCAL_MACHINE\SOFTWARE\Amazon\AWSEUC\Storage\<provided user
                name>\<Storage connector>
```

レジストリキーの値は以下のとおりです。
+ 提供されたユーザー名 — アクセスモードで提供されたユーザー ID。アクセスモードと各モードの値は以下のとおりです。
  + ユーザープール — ユーザーの E メールアドレス。
  + ストリーミング URL — ユーザー ID。
  + SAML — NameID。ユーザー名にスラッシュが含まれる場合 (ドメインユーザーの SAMAccountName が含まれる場合など)、スラッシュは「-」文字に置き換えられます。
+ ストレージコネクタ — ユーザーに対して有効になっている永続的ストレージオプションに対応するコネクタ。ストレージコネクタの値は以下のとおりです。
  + HomeFolder

ストレージコネクタの各レジストリキーには **MountStatus** DWORD 値が含まれています。次の表は、**MountStatus** に指定できる値の一覧です。

**注記**  
これらのレジストリキーを表示するには、イメージに Microsoft .NET Framework バージョン 4.7.2 以降がインストールされている必要があります。


| 値 | 説明 | 
| --- | --- | 
| 0 |  ストレージコネクタはこのユーザーに対して有効になっていない  | 
| 1 |  ストレージコネクタのマウントが進行中  | 
| 2 |  ストレージコネクタのマウントに成功した  | 
| 3 |  ストレージコネクタのマウントに失敗した  | 
| 4 |  ストレージコネクタのマウントは有効ですが、まだマウントされていません  | 

## セッションスクリプトログに対して Amazon S3 バケットストレージを有効にする
<a name="enable-S3-bucket-storage-session-script-logs"></a>

セッションスクリプト設定で Amazon S3 のログ記録を有効にすると、WorkSpaces Pools によってセッションスクリプトから標準出力に書き込まれた出力が収集されます。出力は、Amazon Web Services アカウント内の S3 バケットに定期的にアップロードされます。WorkSpaces Pool は、すべての AWS リージョンについて、アカウントとリージョンに固有のバケットをアカウントに作成します。

これらの S3 バケットを管理するための設定タスクを実行する必要はありません。それらのタスクは WorkSpaces サービスによって完全に管理されています。各バケットに保存されているログファイルは、転送時には Amazon S3 の SSL エンドポイントを使用して暗号化され、保管時には Amazon S3 管理の暗号化キーを使用して暗号化されます。バケットは、以下にあるような特定の形式で命名されます。

```
wspool-logs-<region-code>-<account-id-without-hyphens>-random-identifier
```

**`<region-code>`**  
これは、セッションスクリプトログに対して Amazon S3 バケットストレージを有効にして WorkSpaces Pool を作成する AWS リージョンコードです。

**`<account-id-without-hyphens>`**  
ご自身の Amazon Web Services アカウント ID ランダムな ID は、そのリージョン内のその他バケットとの競合が発生しないことを確実にします。バケット名の最初の部分 `wspool-logs` は、複数のアカウントやリージョンにまたがる場合でも変更されません。

例えば、アカウント番号 `123456789012` の米国西部 (オレゴン) リージョン (`us-west-2`) のイメージでセッションスクリプトを指定した場合、WorkSpaces Pools では、そのリージョンのアカウント内に以下の名前で Amazon S3 バケットが作成されます。適切なアクセス許可を持つ管理者のみが、このバケットを削除できます。

```
wspool-logs-us-west-2-1234567890123-abcdefg
```

セッションスクリプトを無効にしても、S3 バケットに保存されているログファイルは削除されません。ログファイルを完全に削除するには、Amazon S3 コンソールまたは API を使用して、ユーザーまたは適切なアクセス許可を持つ別の管理者が削除する必要があります。WorkSpaces Pools には、バケットの誤った削除を防止するバケットポリシーが追加されます。

セッションスクリプトを有効にすると、開始されるストリーミングセッションごとに固有のフォルダが作成されます。

 アカウントの S3 バケットでログファイルが保存されているフォルダへのパスは、以下の構造になります。

```
<bucket-name>/<stack-name>/<fleet-name>/<access-mode>/<user-id-SHA-256-hash>/<session-id>/SessionScriptsLogs/<session-event>
```

***<bucket-name>***  
セッションスクリプトが保存されている S3 バケットの名前。名前の形式については、このセクションで先ほど説明しました。

***<stack-name>***  
セッションが発生したスタックの名前。

***<fleet-name>***  
セッションスクリプトが実行されている WorkSpaces Pools の名前。

***<access-mode>***  
ユーザーの ID メソッド: WorkSpaces API または CLI の場合は `custom`、SAML の場合は `federated`、ユーザープールのユーザーの場合は `userpool`。

***<user-id-SHA-256-hash>***  
ユーザー固有のフォルダ名。この名前は、ユーザー識別子から生成された小文字の SHA-256 ハッシュ 16 進数文字列を使用して作成されます。

***<session-id>***  
ユーザーのストリーミングセッションの識別子。ユーザーの各ストリーミングセッションでは一意の ID が生成されます。

***<session-event>***  
セッションスクリプトログを生成したイベント。イベント値は `SessionStart` と `SessionTermination` です。

以下のフォルダ構造の例は、test-stack と test-fleet から始まるストリーミングセッションに当てはまります。セッションでは`testuser@mydomain.com`、 の ID からユーザー AWS アカウント ID の API と`123456789012`、米国西部 (オレゴン) リージョン () `test-stack` の設定グループを使用します`us-west-2`。

```
wspool-logs-us-west-2-1234567890123-abcdefg/test-stack/test-fleet/custom/a0bcb1da11f480d9b5b3e90f91243143eac04cfccfbdc777e740fab628a1cd13/05yd1391-4805-3da6-f498-76f5x6746016/SessionScriptsLogs/SessionStart/
```

このフォルダ構造の例には、ユーザーコンテキストセッション開始スクリプト用の 1 つのログファイルと、必要に応じてシステムコンテキストセッション開始スクリプト用の 1 つのログファイルが含まれています。