概要
AWS QuickSight を触っていた時に、リソースの削除順序を間違えて VPC 接続が削除できなくなり、少し焦った話。
簡単な説明
「AWS Hands-on for Beginners 手を動かしなら学ぶ Analytics サービス入門」という公式のハンズオンをやっていた。
マネジメントコンソールが少し変わっていたから、めちゃくちゃスムーズだったわけではないが、ハンズオン自体は大きな問題なく完了した。
ただ、ハンズオンで作成したリソースを削除しているところで問題が発生した。その問題というのは、QuickSight の設定の中の VPC 接続というのが削除できなくなったことである。
状況としては、QuickSight の IAM ロールを先に削除してしまったために、VPC 接続の削除ができなくなった、という状況だった。
解決方法?というか詳細を書いていく。
内容
気付いたとき
ハンズオンが終わってリソース削除の手順に入った。
IAM ロールを削除して、QuickSight の VPC 接続を削除した後 QuickSight のアカウントを削除した。
最後にセキュリティグループを削除しようとしたところ、まだ割り当て済みになっていて削除ができず、確認すると QuickSight の VPC 接続で使用した ENI がまだ残っていた。
状況
VPC のコンソールから ENI を削除しようともしたが、できないようだった。
どうやら QuickSight のコンソールから削除しないといけないらしい。
さっき QuickSight で VPC 接続の削除操作をしたときには、削除が完了した旨のメッセージが出ていたので、てっきり削除したつもりになっていた。
QuickSight はアカウントの削除までやってしまっていたが、再度同じユーザー名・メールアドレスでアカウントを作り直して VPC 接続を見に行った。まだあった。
削除しようとしたが、やっぱり削除完了のメッセージだけが出て削除ができない。
新しい VPC 接続の作成を試してみると、ステータスが「UNAVAILABLE」から変わらなかった。
どうやら権限がないらしく、IAM ロールを先に削除してしまっている影響で、QuickSight 側で VPC 接続を削除することができないっぽい。
さらに、「編集」をクリックしても詳細画面に移動できない。だから IAM ロールの設定を変えることもできなかった。
解決方法
これまでの経験から、再度同じ名前で IAM ロールを作成することで、権限を与えることができると思った。
先程作っていた IAM ロールの名前は憶えていたので、同じ名前でロールを作り直した。
(※ IAM ロール名が分からない場合は、CloudTrail でイベント履歴確認かな……。)
EC2FullAccess ポリシーと QuickSight 系のマネージドポリシーをいくつか割り当ててやってみていたが、最終的には、EC2FullAccess ポリシーと下記のようなインラインポリシーを持たせて削除することにした。
(※ IAM 系の権限はたぶんいらなかった。)
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "Statement1",
"Effect": "Allow",
"Action": [
"iam:*",
"quicksight:*"
],
"Resource": [
"*"
]
}
]
}
権限の変更はすぐには反映されなかったが、VPC 接続のステータスが「AVAILABLE」から「UNAVAILABLE」に代わり、ENI を削除できた。
めでたしめでたし。
蛇足(悪あがきの記録)
ここからは悪あがきの記録を紹介しようと思う。
QuickSight はアカウントの削除までやってしまっていたので、VPC 接続は AWS CLI から削除しようと思った。ひとまず list-vpc-connections
で残っている VPC 接続を確認する。
だが、コマンドを実行するとエラーが発生した。
どうやら VPC 接続に関するコマンドだけがないらしい。
$ aws quicksight list-vpc-conncetions --aws-account-id ACCOUNT_ID
usage: aws [options] <command> <subcommand> [<subcommand> ...] [parameters]
To see help text, you can run:
aws help
aws <command> help
aws <command> <subcommand> help
aws: error: argument operation: Invalid choice, valid choices are:
---------- 省略 ----------
get-dashboard-embed-url | get-session-embed-url
list-analyses | list-dashboard-versions
list-dashboards | list-data-sets
list-data-sources | list-folder-members
list-folders | list-group-memberships
list-groups | list-iam-policy-assignments
list-iam-policy-assignments-for-user | list-ingestions
list-namespaces | list-tags-for-resource
list-template-aliases | list-template-versions
list-templates | list-theme-aliases
list-theme-versions | list-themes
list-user-groups | list-users
register-user | restore-analysis
---------- 省略 ----------
一応、AWS CLI はバージョン2使ってるんだけどなあ。
$ aws --version
aws-cli/2.7.26 Python/3.9.11 Linux/5.15.90.1-microsoft-standard-WSL2 exe/x86_64.ubuntu.22 prompt/off
と思ったが、ドキュメントをよく見るとバージョン 2.7 ではなく 2.13 だった。
アップデートしまーす。
$ curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
$ unzip awscliv2.zip
$ sudo ./aws/install
Found preexisting AWS CLI installation: /usr/local/aws-cli/v2/current. Please rerun install script with --update flag.
$ which aws
/usr/local/bin/aws
$ sudo ./aws/install --bin-dir /usr/local/bin --install-dir /usr/local/aws-cli --update
You can now run: /usr/local/bin/aws --version
$ aws --version
aws-cli/2.13.5 Python/3.11.4 Linux/5.15.90.1-microsoft-standard-WSL2 exe/x86_64.ubuntu.22 prompt/off
AWS CLI を更新してから改めて実行したところ確認できた。
まあ、既に VPC 接続は消しちゃってたんだけどね。
$ aws quicksight list-vpc-connections --aws-account-id ACCOUNT_ID
An error occurred (ResourceNotFoundException) when calling the ListVPCConnections operation: Directory information for account ACCOUNT_ID is not found.
アップデートは定期的にやっておくべきですね。
ドキュメントをよく確認しましょう。
まとめ
Amazon QuickSight から VPC 接続を削除できなくなったが、IAM ロールを作成して権限を与えることで削除できた。
ツールやライブラリは定期的にアップデートしましょう。
感想
今回の件は少し焦った。全然触り慣れてないリソースだったし。
でもそういえば、リソースを消す順番には注意するように、とハンズオンの中でもアナウンスがあったような気がする。
今回のミスは、ツールやライブラリを定期的にアップデートしましょう、という当たり前のことを再認識するきっかけになった。
そういえば最近 AWS CDK 触ってた時にも、ドキュメントと引数が違うと思ったらバージョンの差異だったことがあったなあ。