この記事にはプロモーションが含まれていることがあります

AWS S3バケットから削除する時の「完全に削除」が面倒な時

IT
スポンサーリンク

ファイル削除時の「完全に削除」入力が面倒

S3バケット内のファイルを削除する時、みなさんどうしていますか?

普通は、AWSマネジメントコンソールS3の画面を使うと思います。

が、しかし、ここで画面上で削除すると、削除確認を求められます。

間違えて消してしまう危険があるので、確認があったほうがいいんでないかい?

はい。確認はあってもいいのですが、問題はその確認の仕方です。

マウスは「はい」「いいえ」をクリックするぐらいなら全然良いのですが、まさかの文字列入力です。

この通り、削除を実行するたびにこの「完全に削除」という文字を打ち込まないと削除処理が実行できないのです。最初みた時は、マジか、、と思いました。

これはクリックジャッキング対策なのでしょうか?

そうだとしても、システム本番環境とかならまだわかります。しかしながら開発環境のような頻繁にバケット内のファイルを削除するようなところで毎回これをやるのはしんどいですので、省略したいところ。

ちなみに、私の場合、

  • 最初の10回くらいは頑張って手入力
  • 次の20回くらいはメモ帳に入力した「完全に削除」を毎回コピペ
  • メモ帳を間違えて保存しないで終了してしまい、キレそうになる

その結果、「AWS CLI」のコマンドを使って消しちゃおう! となったわけです。

AWS CLIが必要ですので、インストールと設定が済んでいない方はこちらご覧ください。

aws s3 rmコマンド

このコマンドを使うと、指定したバケットの中身を確認なしで削除することができます。

また、サブフォルダ配下再帰的に消してくれますので、かなり便利です。

構文

構文

バケットの中身すべて削除
aws s3 rm s3://バケット名 --recursive

バケットの中の指定したフォルダ配下をすべて削除
aws s3 rm s3://バケット名/フォルダ名 --recursive

コマンドを実行すると確認なしでダイレクトに削除されますので、注意してください

以下、実際に動かしてみたものですが、これは便利です!

バケット内の指定したフォルダ配下すべて削除

ちょうど散らかったバケットがあったので、aws ls で中身を確認してみました。

dir2フォルダの中には、JPGファイルが3つ、サブフォルダ dir2.1があり、その中にJPGファイルがさらに2つあります。

ここで実験してみましょう。

Microsoft Windows [Version 10.0.19042.1110]
(c) Microsoft Corporation. All rights reserved.

c:\> aws s3 ls s3://battan-image-box/input/dir2 --recursive
2021-08-03 22:53:49          0 input/dir2/
2021-08-03 22:54:11    1883734 input/dir2/DSC_0161.JPG
2021-08-03 22:54:25    2104101 input/dir2/DSC_0162.JPG
2021-08-03 22:54:25    1869588 input/dir2/DSC_0166.JPG
2021-08-03 22:54:43          0 input/dir2/dir2.1/
2021-08-03 22:55:01    2123156 input/dir2/dir2.1/DSC_0188.JPG
2021-08-03 22:55:01    1967211 input/dir2/dir2.1/DSC_0190.JPG

dir2フォルダ配下をまるっと消してみます。ls rm に変えればそのまま実行できます。

c:\ aws s3 rm s3://battan-image-box/input/dir2 --recursive
delete: s3://battan-image-box/input/dir2/dir2.1/DSC_0188.JPG
delete: s3://battan-image-box/input/dir2/
delete: s3://battan-image-box/input/dir2/DSC_0166.JPG
delete: s3://battan-image-box/input/dir2/DSC_0161.JPG
delete: s3://battan-image-box/input/dir2/dir2.1/
delete: s3://battan-image-box/input/dir2/dir2.1/DSC_0190.JPG
delete: s3://battan-image-box/input/dir2/DSC_0162.JPG

削除確認無しでちゃんと消えましたね。

バケットの中身すべて削除

次はバケットの中身をすべて削除してみましょう。この場合はバケット名だけ指定すればOKです。

c:\ aws s3 rm s3://battan-image-box --recursive

確認なしですべて消えましたね。

こうして、私は「完全に削除」地獄から解放されたのでありました。

私は開発環境のような大したものが入っていないバケットの時に多用していますが、ステージングや本番環境のようなところでは次のようにしています。

  • 必ず同じ構成の環境で正しく動作することを確認したコマンドラインをコピペして使う
  • AWSマネジメントコンソールを使う

くれぐれも大事なファイルまで消しちゃった地獄には陥らないように気をつけてくださいね

おすすめ書籍の紹介コーナー

AWSは機能が多岐にわたり存在し、初心者が足を踏み入れるとほぼ100%迷います。まずはこの教科書で全体を広く浅く知ることが重要です。

AWSを使うメリットとして迅速なサービス運用環境の構築が求められます。失敗できない本番環境を構築する前に読んでおきたい一冊です。

そしていよいよAWS認定試験に挑戦したくなった場合は、こちらで徹底的に学習しましょう。これからはAWSです。

トラブルシューティング

このメッセージが表示される場合

fatal error: Unable to locate credentials

認証情報が未設定状態です。aws configure を実行してアクセスキーを登録してください。

fatal error: An error occurred (InvalidAccessKeyId) when calling the ListObjectsV2 operation: The AWS Access Key Id you provided does not exist in our records.

アクセスキーIDが間違っている可能性が高いです。アクセスキーIDが登録されているかAWSマネジメントコンソールのIAMで確認してください。

fatal error: An error occurred (SignatureDoesNotMatch) when calling the ListObjectsV2 operation: The request signature we calculated does not match the signature you provided. Check your key and signing method.

シークレットアクセスキーが間違っている可能性が高いですので確認してください。

コメント

タイトルとURLをコピーしました