[JAWS-UG CLI] Amazon Kinesis Firehose 入門 (6) リソースの削除

# この記事について

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


# 前提条件

## 必要な権限

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

- Kinesis Firehoseのフルコントロール権限
- S3のフルコントロール権限
- STSの関するフルコントロール権限
- IAMの関するフルコントロール権限
- CloudWatchの関するフルコントロール権限
- CloudWatch Logsの関するフルコントロール権限

# 0. 準備

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

オレゴンリージョンで実施します。（東京マダー？）

```bash:コマンド
export AWS_DEFAULT_REGION="us-west-2"
```

## 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.24 Python/2.7.12 Linux/4.4.30-32.54.amzn1.x86_64 botocore/1.4.81
```

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

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


# 1. EC2インスタンスの削除

## 変数の確認

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

   INSTANCE_ID: ${INSTANCE_ID}

ETX
```

```text:結果

   INSTANCE_ID: i-0****************

```

## 削除

```bash:コマンド
aws ec2 terminate-instances \
    --instance-ids ${INSTANCE_ID}
```

```json:結果
{
    "TerminatingInstances": [
        {
            "InstanceId": "i-0758452c3f6cdb188",
            "CurrentState": {
                "Code": 32,
                "Name": "shutting-down"
            },
            "PreviousState": {
                "Code": 16,
                "Name": "running"
            }
        }
    ]
}
```

## 確認

```bash:コマンド
aws ec2 describe-instances \
    --instance-ids ${INSTANCE_ID}
```

```text:結果
（長いので省略）
```

（ (4)で作成した他のリソースは別途削除をお願いします>< ）


# 2. デリバリーストリームの削除

## 変数の確認

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

   DELIVERY_STREAM_NAME: ${DELIVERY_STREAM_NAME}

ETX
```

```text:結果

   DELIVERY_STREAM_NAME: jawsug-cli-stream

```

## 削除

```bash:コマンド
aws firehose delete-delivery-stream \
    --delivery-stream-name ${DELIVERY_STREAM_NAME}
```

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

## 確認

```bash:コマンド
aws firehose describe-delivery-stream \
    --delivery-stream-name ${DELIVERY_STREAM_NAME}
```

```text:結果
An error occurred (ResourceNotFoundException) when calling the DescribeDeliveryStream operation: Firehose jawsug-cli-stream under account ************ not found.
```

# 3. IAMロールの削除

## 削除対象のロール名を指定

```bash:コマンド
ROLE_NAME='service-role-firehose'
```

## 変数の確認

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

   ROLE_NAME: ${ROLE_NAME}

ETX
```

```text:結果

   ROLE_NAME: service-role-firehose

```

## デタッチするポリシーの確認

```bash:コマンド
POLICY_ARN=$(aws iam list-attached-role-policies \
    --role-name ${ROLE_NAME} \
    --query "AttachedPolicies[0].PolicyArn" \
    --output text) \
    && echo ${POLICY_ARN}
```

```text:結果
arn:aws:iam::************:policy/ServicePolicyFirehose
```

## ポリシーのデタッチ

```bash:コマンド
aws iam detach-role-policy \
    --role-name ${ROLE_NAME} \
    --policy-arn ${POLICY_ARN}
```

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

## ポリシーがデタッチされたことを確認

```bash:コマンド
aws iam list-attached-role-policies \
    --role-name ${ROLE_NAME}
```

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

## 削除

```bash:コマンド
aws iam delete-role \
    --role-name ${ROLE_NAME}
```

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

## 確認

```bash:コマンド
aws iam get-role \
    --role-name ${ROLE_NAME}
```

```text:結果
An error occurred (NoSuchEntity) when calling the GetRole operation: Unknown
```


# 4. IAMポリシーの削除

## 変数の確認

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

   POLICY_ARN: ${POLICY_ARN}

ETX
```

```text:結果

   POLICY_ARN: arn:aws:iam::************:policy/ServicePolicyFirehose

```

## 削除

```bash:コマンド
aws iam delete-policy \
    --policy-arn ${POLICY_ARN}
```

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


## 確認

```bash:コマンド
aws iam get-policy \
    --policy-arn ${POLICY_ARN}
```

```text:結果
An error occurred (NoSuchEntity) when calling the GetPolicy operation: Policy arn:aws:iam::************:policy/ServicePolicyFirehose does not exist or is not attachable.
```


# 5. ロググループの削除

## 変数の確認

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

   LOG_GROUP_NAME: ${LOG_GROUP_NAME}

ETX
```

```text:結果

   LOG_GROUP_NAME: jawsug-cli-firehose

```

## 削除

```bash:コマンド
aws logs delete-log-group \
    --log-group-name ${LOG_GROUP_NAME}
```

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

## 確認

```bash:コマンド
aws logs describe-log-groups \
    --log-group-name-prefix ${LOG_GROUP_NAME}
```

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


# 6. S3バケットの削除

（Athenaの動作確認をしたい場合は残しておいてください）

## 変数の確認

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

   BUCKET_NAME: ${BUCKET_NAME}

ETX
```

```text:結果

   BUCKET_NAME: jawsug-cli-firehose-************

```

## 削除

```bash:コマンド
aws s3 rb s3://${BUCKET_NAME} --force
```

```text:結果
remove_bucket: jawsug-cli-firehose-************
```

## 確認

```bash:コマンド
aws s3 ls ${BUCKET_NAME}
```

```text:結果
An error occurred (NoSuchBucket) when calling the ListObjects operation: The specified bucket does not exist
```

以上