[JAWS-UG CLI]Amazon AppStream 2.0 入門 (6) 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. Fleetの停止

Fleetを削除するにあたり、Fleetを停止させる必要があります。

### 変数の確認

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

    FLEET_NAME: ${FLEET_NAME}

ETX
```

```text:結果

    FLEET_NAME: FLEET_JAWSUG_CLI

```


### Fleetの停止

```bash:コマンド
aws appstream stop-fleet \
    --name ${FLEET_NAME}
```

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

停止するまでしばらく待ちます。（5分くらいかかります）

### Fleetの状態の確認

StateがSTOPPEDになってることを確認します。（STOPPEDにならないと削除できません。）

```bash:コマンド
aws appstream describe-fleets \
    --names ${FLEET_NAME}
```

```json:結果
{
    "Fleets": [
        {
            "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": "STOPPING",
            "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"
        }
    ]
}
```


## 1.2. StackとFleetの関連づけを解除

### 変数の確認

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

    FLEET_NAME: ${FLEET_NAME}
    STACK_NAME: ${STACK_NAME}

ETX
```

```text:結果

    FLEET_NAME: FLEET_JAWSUG_CLI
    STACK_NAME: STACK_JAWSUG_CLI

```


### StackとFleetの関連づけを解除

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

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


### Fleetに関連づけられたStackの確認

```bash:コマンド
aws appstream list-associated-stacks \
    --fleet-name ${FLEET_NAME}
```

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


### Stackに関連づけられたFleetの確認

```bash:コマンド
aws appstream list-associated-fleets \
    --stack-name ${STACK_NAME}
```

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

## 1.3. Fleetの削除

### 変数の確認

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

    FLEET_NAME: ${FLEET_NAME}

ETX
```

```text:結果

    FLEET_NAME: FLEET_JAWSUG_CLI

```


### Fleetの削除

```bash:コマンド
aws appstream delete-fleet \
    --name ${FLEET_NAME}
```

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

### Fleetが削除されたことを確認

```bash:コマンド
aws appstream describe-fleets \
    --query Fleets[?Name==\`${FLEET_NAME}\`]
```

```json:結果
[]
```


# 2. Stackの削除

### 変数の確認

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

    STACK_NAME: ${STACK_NAME}

ETX
```

```text:結果

    STACK_NAME: STACK_JAWSUG_CLI

```


### Stackの削除

```bash:コマンド
aws appstream delete-stack \
    --name ${STACK_NAME}
```

```
（返値無し）
```


### Stackが削除されたことを確認

```bash:コマンド
aws appstream describe-stacks \
    --query Stacks[?Name==\`${STACK_NAME}\`]
```

```json:結果
[]
```


以上