[JAWS-UG CLI]Amazon AppStream 2.0 入門 (5) FleetおよびStackの更新

# この記事について

[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. Fleetの更新

## 1.1. 新しいCompute Capacityの指定

### Compute Capacityの指定

```bash:コマンド
COMPUTE_CAPACITY_2="2"
COMPUTE_CAPACITY_FILE_NAME_2="compute_capacity_2.json"
```

```bash:コマンド
cat << EOF > ${COMPUTE_CAPACITY_FILE_NAME_2}
{
    "DesiredInstances": ${COMPUTE_CAPACITY_2}
}
EOF

cat ${COMPUTE_CAPACITY_FILE_NAME_2}
```

```json:結果
{
    "DesiredInstances": 2
}
```

```bash:コマンド
jsonlint -q ${COMPUTE_CAPACITY_FILE_NAME_2}
```

### 変数の確認

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

    FLEET_NAME: ${FLEET_NAME}
    COMPUTE_CAPACITY_FILE_NAME_2: ${COMPUTE_CAPACITY_FILE_NAME_2}

ETX
```

```text:結果

    FLEET_NAME: FLEET_JAWSUG_CLI
    COMPUTE_CAPACITY_FILE_NAME_2: compute_capacity_2.json

```


### Fleetの更新

一旦Availableが0になり、Fleetが追加されるようです。（時間かかるため、Fleetが完全に利用できるようになる前に削除の手順に進みます。）

```bash:コマンド
aws appstream update-fleet \
    --name ${FLEET_NAME} \
    --compute-capacity file://${COMPUTE_CAPACITY_FILE_NAME_2}
```

```json:結果
{
    "Fleet": {
        "ComputeCapacityStatus": {
            "Available": 1,
            "Desired": 2,
            "Running": 1,
            "InUse": 0
        },
        "DisplayName": "JAWSUG_CLI",
        "Name": "JAWSUG_CLI",
        "VpcConfig": {
            "SubnetIds": [
                "subnet-6bfc381d",
                "subnet-d0071089"
            ]
        },
        "FleetErrors": [],
        "DisconnectTimeoutInSeconds": 900,
        "State": "RUNNING",
        "ImageName": "Amazon-AppStream2-Sample-Image-12-15-2016",
        "CreatedTime": 1483117639.89,
        "MaxUserDurationInSeconds": 3600,
        "InstanceType": "stream.standard.medium",
        "Arn": "arn:aws:appstream:ap-northeast-1:788063364413:fleet/JAWSUG_CLI",
        "Description": "A fleet for test at jaws-ug"
    }
}
```


# 2. Stackの更新

## 2.1. 新しいStack表示名および詳細の指定

### Stack表示名および詳細の指定

```bash:コマンド
STACK_DESCRIPTION_2="A stack for test at jaws-ug cli"
STACK_DISPLAY_NAME_2="JAWSUG_CLI_2"
```

### 変数の確認

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

    STACK_DISPLAY_NAME_2: ${STACK_DISPLAY_NAME_2}
    STACK_DESCRIPTION_2: ${STACK_DESCRIPTION_2}
    STACK_NAME: ${STACK_NAME}

ETX
```

```text:結果

    STACK_DISPLAY_NAME_2: JAWSUG_CLI_2
    STACK_DESCRIPTION_2: A stack for test at jaws-ug cli
    STACK_NAME: STACK_JAWSUG_CLI

```


### Stackの更新

```bash:コマンド
aws appstream update-stack \
    --display-name ${STACK_DISPLAY_NAME_2} \
    --description "${STACK_DESCRIPTION_2}" \
    --name ${STACK_NAME}
```

```json:結果
{
    "Stack": {
        "CreatedTime": 1483115244.642,
        "DisplayName": "JAWSUG_CLI_2",
        "Name": "JAWSUG_CLI",
        "Arn": "arn:aws:appstream:ap-northeast-1:788063364413:stack/JAWSUG_CLI",
        "Description": "A stack for test at jaws-ug cli"
    }
}
```


以上