[re:Invent 2019] [小ネタ]「S3 Access Points」検証後のゴミ掃除 #reinvent

2019.12.12

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

はじめに

こんにちは。大阪オフィスの林です。

2019年12月02日〜2019年12月07日で、アメリカのラスベガスにてAWS re:Invent 2019が開催されていました!新機能としてリリースされた「Amazon S3 Access Points」を触っていたのですが、検証後のゴミ掃除がGUIからだとちょいと面倒くさかったのでコマンドでちょちょいとやる方法をまとめておきました

何がメンドウだったか?

「S3 Access Points」の検証で使ったバケットを消そうとすると、、、

 

先に「access point」をすべて消せと。。。はいはい。

 

ん??ラジオボタンになっていて、1個ずつしか消せない。。。非常に手間だ。。。。

 

しかも、消すときにAccess Pointsの名前も入れないといけない。。。

 

1個や2個のaccess pointであればいいのですが、もっとたくさん作っていてこれをいちいち消していくのがめんどうだな。と思いました。

どうやったらラクか?

で、CLI使ってみました。公式のCLIリファレンスはこちら

Access Point含めバケットごとまるっと消す場合

単純に「--force」オプションをつけて消してあげると、S3 Access Points含めて削除してくれます。バケットの中のデータも含めてすべて削除されてしまうので実行の際はお気を付けください!

「いやいや、バケットの中身は残したくて、S3 Access Pointsだけ消したいんだよ!」という方は下記をご参考にしてください

Access Pointだけ消す場合(バケットは残す)

※「xxxxxxxxxxxx」はAWSアカウントのIDです。
※「yyyyyyyyyyyy」はS3のバケット名です。
※今回はプロファイル「test001」を使っています。

 

コマンドの中身を簡単に説明します。

aws s3control list-access-points --account-id xxxxxxxxxxxx --profile test001 アカウントに紐づいているS3 Access Pointsのリストを抽出します。
jq '.AccessPointList[] | select(.Bucket == "yyyyyyyyyyyy")' S3のバケット名(yyyyyyyyyyyy)で絞り込みをします。
jq -r .Name バケット名で絞り込んでS3 Access Pointsのリストを抽出します。
xargs -L 1 aws s3control delete-access-point --account-id xxxxxxxxxxxx --profile test001 --name 結果を、xargsで引数として渡してS3 Access Pointsを削除します。

上記をパイプ(|)でつないで実行します。これを実行するとバケットに紐づくS3 Access Pointsをすべて消してくれます。

バケット名に紐づくS3 Access Pointsを出せるコマンドがあれば良いのですが、現状そのようなコマンドは用意されていないので組み合わせる必要があります。

まとめ

AWSマネージメントコンソールで操作をすると直感的に操作が出来るのがメリットである反面、効率が落ちてしまうという側面もあります。CLIでのやり方を覚えておけば検証にとられる時間も短縮できてハッピーになるのではないでしょうか!

以上、大阪オフィスの林がお送りしました!