[JAWS-UG CLI]Amazon AppStream 2.0 入門 (4) Streaming URLの作成／動作確認

# この記事について

[JAWS-UG CLI専門支部 #76 AppStream 2.0入門](https://jawsug-cli.doorkeeper.jp/events/52024)で実施するハンズオン用の手順書です。


# 前提条件

## 必要な権限

作業にあたっては、以下の権限を有したIAMユーザもしくはIAMロールを利用してください。

- AppStream(2.0)のフルコントロール権限
- EC2のフルコントロール権限
- CloudFormationの関するフルコントロール権限
- IAMの関するフルコントロール権限


# 0. 準備

## 0.1. リージョンを指定

```bash:コマンド
export AWS_DEFAULT_REGION="ap-northeast-1"
```

## 0.2. 資格情報を確認

```bash:コマンド
aws configure list
```

インスタンスプロファイルを設定したEC2インスタンスでアクセスキーを設定せずに実行した場合、以下のようになります。

```text:結果
      Name                    Value             Type    Location
      ----                    -----             ----    --------
   profile                <not set>             None    None
access_key     ****************QSAA         iam-role
secret_key     ****************c1xY         iam-role
    region                us-west-2              env    AWS_DEFAULT_REGION
```

## 0.3. バージョン確認

```bash:コマンド
aws --version
```

```text:結果
aws-cli/1.11.35 Python/2.7.12 Linux/4.4.35-33.55.amzn1.x86_64 botocore/1.4.92
```

## 0.4. バージョンアップ（必要に応じて）

```bash:コマンド
sudo pip install -U awscli
```


# 1. Streaming URLの取得

ユーザはStreaming URLを利用してアプリケーションにアクセスします。生成されるStreaming URLには、認証情報が含まれます。

## 1.1. Streaming URLの取得

### パラメータの指定

USER_IDは、ユーザを識別するIDです。AppStream 2.0ではRDS SAL（Windows Serverにリモートアクセスする際に必要となるクライアント用のライセンスで、サービスプロバイダー経由でのみ提供）の費用が発生しますが、ユーザ数に応じてSALの費用が発生します。【当日、渡邉さんに確認】

VALIDITYは、Streaming URLの有効期限です。

現在のAppStream 2.0では、ユーザ認証機能（Directory Serviceとの連携など）は提供されていません。
（ユーザが何らかの方法で認証およびStreaming URLを発行する機能を実装する必要があります。）

```bash:コマンド
USER_ID="jawsug"
VALIDITY="3600"
```


### 変数の確認

```bash:コマンド
cat << ETX

    STACK_NAME: ${STACK_NAME}
    FLEET_NAME: ${FLEET_NAME}
    USER_ID: ${USER_ID}
    VALIDITY: ${VALIDITY}

ETX
```

```text:結果

    STACK_NAME: JAWSUG_CLI
    FLEET_NAME: JAWSUG_CLI
    USER_ID: jawsug
    VALIDITY: 3600

```


### Streaming URLの生成

```bash:コマンド
aws appstream create-streaming-url \
    --stack-name ${STACK_NAME} \
    --fleet-name ${FLEET_NAME} \
    --user-id ${USER_ID} \
    --validity ${VALIDITY} \
    --query StreamingURL \
    --output text
```

```json:結果
{
    "Expires": 1483123249.92,
    "StreamingURL": "https://stream.ap-northeast-1.amazonappstream.com/authenticate?parameters=****************&signature=********"
}
```


# 2. 動作確認

## 2.1. 動作確認

- FirefoxでWebブラウジングを行う
- 接続元のIPアドレスを確認する（NAT Gatewayに関連づけたEIPに名なっていることを確認）
- タイムアウトや有効時間などのパラメータ通りに動作していることを確認


## 2.2. セッション情報の表示

```bash:コマンド
aws appstream describe-sessions \
    --stack-name ${STACK_NAME} \
    --fleet-name ${FLEET_NAME}
```

```json:結果
{
    "Sessions": [
        {
            "StackName": "JAWSUG_CLI",
            "FleetName": "JAWSUG_CLI",
            "State": "ACTIVE",
            "UserId": "jawsug",
            "Id": "********-****-****-****-************"
        }
    ]
}
```

## 2.3. セッションの切断

### セッションIDの取得

```bash:コマンド
SESSION_ID=$(aws appstream describe-sessions \
    --stack-name ${STACK_NAME} \
    --fleet-name ${FLEET_NAME} \
    --query Sessions[0].Id \
    --output text) \
    && echo ${SESSION_ID}
```

```text:結果
********-****-****-****-************
```


### セッションの強制切断

```bash:コマンド
aws appstream expire-session \
    --session-id ${SESSION_ID}
```

```text:結果
（返値無し）
```


### セッション情報の表示（削除されたことを確認）

```bash:コマンド
aws appstream describe-sessions \
    --stack-name ${STACK_NAME} \
    --fleet-name ${FLEET_NAME}
```

```json:結果
{
    "Sessions": []
}
```

以上