Slide 1

Slide 1 text

バージョニング有効な S3バケットのオブジェクト削除 2021/10/7(木) JAWS-UG CLI専門支部 #230R AWS CLI環境入門(Cloud9)

Slide 2

Slide 2 text

事の発端 ~AWS SAMのチュートリアル~ 「AWS SAM触ってみた奮闘記」資料の後半をご参照ください https://speakerdeck.com/emiki/aws-samhong-tutemitafen-dou-ji

Slide 3

Slide 3 text

S3バケットを含むCFnスタックが消せない • SAMチュートリアルで作られるS3バケットはデフォルトでバージョニング有効 aws s3 rb s3://{バケット名} --force ⇒バケットを削除する(空でなくても削除される) コマンドでも消せない --forceオプションをつければどんなバケットも消えると思っていた…

Slide 4

Slide 4 text

バージョニング有効なS3の オブジェクトを CLIで削除したい

Slide 5

Slide 5 text

バージョニング有効なS3バケットのオブジェクトを 完全に削除するには ①aws s3api list-object-versions https://docs.aws.amazon.com/cli/latest/reference/s3api/list-object-versions.html • aws s3api list-object-versionsを実行し、削除対象となるオブジェ クトのバージョン ID を取得する ②aws s3api delete-object https://docs.aws.amazon.com/cli/latest/reference/s3api/delete-object.html • ①で得たバージョン ID に基づいて aws s3api delete-object を実行 し、オブジェクトを削除する

Slide 6

Slide 6 text

バージョニング有効 S3バケット test1.txt test2.txt cli_text.txt cli_test - コピー.txt cli_testxx.txt cli_testyy.txt cli_testzz.txt cli_test98.txt cli_test99.txt folder1/ folder2/ folder3/ 削除マーカー 削除マーカー 削除マーカー 削除マーカー (「folder」じゃなくて意味的には 「prefix」とかにした方がよかったかも) バージョニング有効なS3を用意しておきます

Slide 7

Slide 7 text

バージョニング有効 S3バケット test1.txt の残骸。見えない test2.txt 削除マーカー (補足)削除マーカー • バージョニングが有効なS3バケットでオブジェクトを削除すると「削除 マーカー」が作られる • 削除マーカーを削除するとオブジェクトが復活する オブジェクトを 削除

Slide 8

Slide 8 text

バージョニング有効 S3バケット test1.txt 復活する test2.txt 削除マーカー 削除マーカーを 削除 「削除した」という操作をなかったことにする (補足)削除マーカー • バージョニングが有効なS3バケットでオブジェクトを削除すると「削除 マーカー」が作られる • 削除マーカーを削除するとオブジェクトが復活する

Slide 9

Slide 9 text

オブジェクトの バージョンIDを取得

Slide 10

Slide 10 text

オブジェクトのバージョンIDを取得 • オブジェクトのバージョンIDを取得します • ① aws s3api list-object-versions バケット名を変数に格納 バケット名を指定し バージョンIDのリストを取得 Enter

Slide 11

Slide 11 text

[ec2-user@ip-10-0-0-31%]$ aws s3api list-object-versions ¥ > --bucket ${S3BUCKET_NAME} { "Versions": [ { "ETag": "¥"d41d8cd98f00b204e9800998ecf8427e¥"", "Size": 0, "StorageClass": "STANDARD", "Key": "folder1/", "VersionId": "OOVJiE5lBNPQ_AuNrlcGu8T0pBj8sNjp", "IsLatest": true, "LastModified": "2021-09-23T20:05:14.000Z", "Owner": { "DisplayName": "emixxxxxxxx", "ID": "" } }, { "ETag": "¥"d41d8cd98f00b204e9800998ecf8427e¥"", "Size": 0, "StorageClass": "STANDARD", "Key": "folder1/cli_test - コピー.txt", "VersionId": "NfCRi2U7m5DyZWQu0D3DnaGbmkzQaOrX", "IsLatest": true, "LastModified": "2021-09-23T20:06:15.000Z", "Owner": { "DisplayName": "emixxxxxxxx", "ID": "2772a153121e9cbe9581864de8f1361efbf95ad8dd8b78260" } }, { "ETag": "¥"d41d8cd98f00b204e9800998ecf8427e¥"", "Size": 0, "StorageClass": "STANDARD", "Key": "folder1/cli_test.txt", "VersionId": "cheFC4vtWokDYqTgkPtltszkZmg8HvVM", "IsLatest": true, "LastModified": "2021-09-23T20:06:15.000Z", "Owner": { "DisplayName": "emixxxxxxxx", "ID": "2772a153121e9cbe9581864de8f1361efbf95ad8dd8b7826009" } }, { "ETag": "¥"d41d8cd98f00b204e9800998ecf8427e¥"", "Size": 0, "StorageClass": "STANDARD", "Key": "folder2/", "VersionId": "O6U87cFpFSOiDuERWtfPF6hPnzvh9.Fw", "IsLatest": true, "LastModified": "2021-09-23T20:05:30.000Z", "Owner": { "DisplayName": "emixxxxxxxx", "ID": "2772a153121e9cbe9581864de8f1361efbf95ad8dd8b7826" } }, { "ETag": "¥"d41d8cd98f00b204e9800998ecf8427e¥"", "Size": 0, "StorageClass": "STANDARD", "Key": "folder2/cli_testxx.txt", "VersionId": "jIf_B6NsidsQQPiJ_lNRZHrkrulm6Ske", "IsLatest": false, "LastModified": "2021-09-23T20:06:30.000Z", "Owner": { "DisplayName": "emixxxxxxxx", "ID": "2772a153121e9cbe9581864de8f1361efbf95ad8dd8b7826" } }, { "ETag": "¥"d41d8cd98f00b204e9800998ecf8427e¥"", "Size": 0, "StorageClass": "STANDARD", "Key": "folder2/cli_testyy.txt", "VersionId": "wmYIzc8DqMObcus.EyH5WkVX1LxepO2l", "IsLatest": true, "LastModified": "2021-09-23T20:06:30.000Z", "Owner": { "DisplayName": "emixxxxxxxx", "ID": "2772a153121e9cbe9581864de8f1361efbf95ad8d" } }, { "ETag": "¥"d41d8cd98f00b204e9800998ecf8427e¥"", "Size": 0, "StorageClass": "STANDARD", "Key": "folder2/cli_testzz.txt", "VersionId": "ehTMB_gngE44z6Ygyo3MiATXKknndNbX", "IsLatest": true, "LastModified": "2021-09-23T20:06:30.000Z", "Owner": { "DisplayName": "emixxxxxxxx", "ID": "2772a153121e9cbe9581864de8f1361efbf95ad8dd8b782600" } }, { "ETag": "¥"d41d8cd98f00b204e9800998ecf8427e¥"", "Size": 0, "StorageClass": "STANDARD", "Key": "folder3/", "VersionId": "kqExb_gVDHJdxAK6WgU7P70uk2Jh_DlY", "IsLatest": false, "LastModified": "2021-09-23T20:05:36.000Z", "Owner": { "DisplayName": "emixxxxxxxx", "ID": "2772a153121e9cbe9581864de8f1361efbf95ad8dd8b782" } }, { "ETag": "¥"d41d8cd98f00b204e9800998ecf8427e¥"", "Size": 0, "StorageClass": "STANDARD", "Key": "folder3/cli_test98.txt", "VersionId": "AGVIuRnjfTPQbxI0Px77tQbE5niHhWyZ", "IsLatest": false, "LastModified": "2021-09-23T20:06:44.000Z", "Owner": { "DisplayName": "emixxxxxxxx", "ID": "2772a153121e9cbe9581864de8f1361efbf95ad8dd8b78260" } }, { "ETag": "¥"d41d8cd98f00b204e9800998ecf8427e¥"", "Size": 0, "StorageClass": "STANDARD", "Key": "folder3/cli_test99.txt", "VersionId": "NWmHhxn2VJAeTFocapox5_a_qEYbgsvt", "IsLatest": false, "LastModified": "2021-09-23T20:06:44.000Z", "Owner": { "DisplayName": "emixxxxxxxx", "ID": "2772a153121e9cbe9581864de8f1361efbf95ad8dd8b78260" } }, { "ETag": "¥"d41d8cd98f00b204e9800998ecf8427e¥"", "Size": 0, "StorageClass": "STANDARD", "Key": "test1.txt", "VersionId": "yjatJyJdz1WtMrqwv7GVEiukkxG8MHB9", "IsLatest": false, "LastModified": "2021-09-23T20:05:59.000Z", "Owner": { "DisplayName": "emixxxxxxxx", "ID": "2772a153121e9cbe9581864de8f1361efbf95ad8dd8b78" } }, { "ETag": "¥"d41d8cd98f00b204e9800998ecf8427e¥"", "Size": 0, "StorageClass": "STANDARD", "Key": "test2.txt", "VersionId": "o4oWEwvo_2P_c9_WCBrS.wSE5jguevMV", "IsLatest": true, "LastModified": "2021-09-23T20:05:59.000Z", "Owner": { "DisplayName": "emixxxxxxxx", "ID": "2772a153121e9cbe9581864de8f1361efbf95ad8d" } } ], "DeleteMarkers": [ { "Owner": { "DisplayName": "emixxxxxxxx", "ID": "2772a153121e9cbe9581864de8f1361efbf95" }, "Key": "folder2/cli_testxx.txt", "VersionId": "DuYgTonHE9aaHL2t0NJlI0WMB3aSau09", "IsLatest": true, "LastModified": "2021-09-23T20:07:23.000Z" }, { "Owner": { "DisplayName": "emixxxxxxxx", "ID": "2772a153121e9cbe9581864de8f1361efbf95ad8dd8b78260096d9a55e36c3f3" }, "Key": "folder3/cli_test98.txt", "VersionId": "IKhFzixbzCVFyOocNf58bboDBBESbnuK", "IsLatest": true, "LastModified": "2021-09-23T20:07:40.000Z" }, { "Owner": { "DisplayName": "emixxxxxxxx", "ID": "2772a153121e9cbe9581864de8f1361efbf95ad8dd8b78260096d9a55e36c3f3" }, "Key": "folder3/cli_test99.txt", "VersionId": "hpQ0ox92OeI7xSLOPL5gtvD5WM_ko45S", "IsLatest": true, "LastModified": "2021-09-23T20:07:40.000Z" }, { "Owner": { "DisplayName": "emixxxxxxxx", 8b78260096d9a55e36c3f3 "ID": "2772a153121e9cbe9581864de8f1361efbf95ad8dd" }, "Key": "test1.txt", "VersionId": "vM7BCcSGEZIDnhiT9h13OBECX.zE0tPZ", "IsLatest": true, "LastModified": "2021-09-23T20:06:59.000Z" } ] } [ec2-user@ip-10-0-0-31%]$ • うわーーーーーーー オブジェクトのバージョンIDを取得

Slide 12

Slide 12 text

[ec2-user@ip-10-0-0-31%]$ aws s3api list-object-versions ¥ > --bucket ${S3BUCKET_NAME} { "Versions": [ { "ETag": "¥"d41d8cd98f00b204e9800998ecf8427e¥"", "Size": 0, "StorageClass": "STANDARD", "Key": "folder1/", "VersionId": "OOVJiE5lBNPQ_AuNrlcGu8T0pBj8sNjp", "IsLatest": true, "LastModified": "2021-09-23T20:05:14.000Z", "Owner": { "DisplayName": "emixxxxxxxx", "ID": "" } }, { "ETag": "¥"d41d8cd98f00b204e9800998ecf8427e¥"", "Size": 0, "StorageClass": "STANDARD", "Key": "folder1/cli_test - コピー.txt", "VersionId": "NfCRi2U7m5DyZWQu0D3DnaGbmkzQaOrX", "IsLatest": true, "LastModified": "2021-09-23T20:06:15.000Z", "Owner": { "DisplayName": "emixxxxxxxx", "ID": "2772a153121e9cbe9581864de8f1361efbf95ad8dd8b78260" } }, { "ETag": "¥"d41d8cd98f00b204e9800998ecf8427e¥"", "Size": 0, "StorageClass": "STANDARD", "Key": "folder1/cli_test.txt", "VersionId": "cheFC4vtWokDYqTgkPtltszkZmg8HvVM", "IsLatest": true, "LastModified": "2021-09-23T20:06:15.000Z", "Owner": { "DisplayName": "emixxxxxxxx", "ID": "2772a153121e9cbe9581864de8f1361efbf95ad8dd8b7826009" } }, { "ETag": "¥"d41d8cd98f00b204e9800998ecf8427e¥"", "Size": 0, "StorageClass": "STANDARD", "Key": "folder2/", "VersionId": "O6U87cFpFSOiDuERWtfPF6hPnzvh9.Fw", "IsLatest": true, "LastModified": "2021-09-23T20:05:30.000Z", "Owner": { "DisplayName": "emixxxxxxxx", "ID": "2772a153121e9cbe9581864de8f1361efbf95ad8dd8b7826" } }, { "ETag": "¥"d41d8cd98f00b204e9800998ecf8427e¥"", "Size": 0, "StorageClass": "STANDARD", "Key": "folder2/cli_testxx.txt", "VersionId": "jIf_B6NsidsQQPiJ_lNRZHrkrulm6Ske", "IsLatest": false, "LastModified": "2021-09-23T20:06:30.000Z", "Owner": { "DisplayName": "emixxxxxxxx", "ID": "2772a153121e9cbe9581864de8f1361efbf95ad8dd8b7826" } }, { "ETag": "¥"d41d8cd98f00b204e9800998ecf8427e¥"", "Size": 0, "StorageClass": "STANDARD", "Key": "folder2/cli_testyy.txt", "VersionId": "wmYIzc8DqMObcus.EyH5WkVX1LxepO2l", "IsLatest": true, "LastModified": "2021-09-23T20:06:30.000Z", "Owner": { "DisplayName": "emixxxxxxxx", "ID": "2772a153121e9cbe9581864de8f1361efbf95ad8d" } }, { "ETag": "¥"d41d8cd98f00b204e9800998ecf8427e¥"", "Size": 0, "StorageClass": "STANDARD", "Key": "folder2/cli_testzz.txt", "VersionId": "ehTMB_gngE44z6Ygyo3MiATXKknndNbX", "IsLatest": true, "LastModified": "2021-09-23T20:06:30.000Z", "Owner": { "DisplayName": "emixxxxxxxx", "ID": "2772a153121e9cbe9581864de8f1361efbf95ad8dd8b782600" } }, { "ETag": "¥"d41d8cd98f00b204e9800998ecf8427e¥"", "Size": 0, "StorageClass": "STANDARD", "Key": "folder3/", "VersionId": "kqExb_gVDHJdxAK6WgU7P70uk2Jh_DlY", "IsLatest": false, "LastModified": "2021-09-23T20:05:36.000Z", "Owner": { "DisplayName": "emixxxxxxxx", "ID": "2772a153121e9cbe9581864de8f1361efbf95ad8dd8b782" } }, { "ETag": "¥"d41d8cd98f00b204e9800998ecf8427e¥"", "Size": 0, "StorageClass": "STANDARD", "Key": "folder3/cli_test98.txt", "VersionId": "AGVIuRnjfTPQbxI0Px77tQbE5niHhWyZ", "IsLatest": false, "LastModified": "2021-09-23T20:06:44.000Z", "Owner": { "DisplayName": "emixxxxxxxx", "ID": "2772a153121e9cbe9581864de8f1361efbf95ad8dd8b78260" } }, { "ETag": "¥"d41d8cd98f00b204e9800998ecf8427e¥"", "Size": 0, "StorageClass": "STANDARD", "Key": "folder3/cli_test99.txt", "VersionId": "NWmHhxn2VJAeTFocapox5_a_qEYbgsvt", "IsLatest": false, "LastModified": "2021-09-23T20:06:44.000Z", "Owner": { "DisplayName": "emixxxxxxxx", "ID": "2772a153121e9cbe9581864de8f1361efbf95ad8dd8b78260" } }, { "ETag": "¥"d41d8cd98f00b204e9800998ecf8427e¥"", "Size": 0, "StorageClass": "STANDARD", "Key": "test1.txt", "VersionId": "yjatJyJdz1WtMrqwv7GVEiukkxG8MHB9", "IsLatest": false, "LastModified": "2021-09-23T20:05:59.000Z", "Owner": { "DisplayName": "emixxxxxxxx", "ID": "2772a153121e9cbe9581864de8f1361efbf95ad8dd8b78" } }, { "ETag": "¥"d41d8cd98f00b204e9800998ecf8427e¥"", "Size": 0, "StorageClass": "STANDARD", "Key": "test2.txt", "VersionId": "o4oWEwvo_2P_c9_WCBrS.wSE5jguevMV", "IsLatest": true, "LastModified": "2021-09-23T20:05:59.000Z", "Owner": { "DisplayName": "emixxxxxxxx", "ID": "2772a153121e9cbe9581864de8f1361efbf95ad8d" } } ], "DeleteMarkers": [ { "Owner": { "DisplayName": "emixxxxxxxx", "ID": "2772a153121e9cbe9581864de8f1361efbf95" }, "Key": "folder2/cli_testxx.txt", "VersionId": "DuYgTonHE9aaHL2t0NJlI0WMB3aSau09", "IsLatest": true, "LastModified": "2021-09-23T20:07:23.000Z" }, { "Owner": { "DisplayName": "emixxxxxxxx", "ID": "2772a153121e9cbe9581864de8f1361efbf95ad8dd8b78260096d9a55e36c3f3" }, "Key": "folder3/cli_test98.txt", "VersionId": "IKhFzixbzCVFyOocNf58bboDBBESbnuK", "IsLatest": true, "LastModified": "2021-09-23T20:07:40.000Z" }, { "Owner": { "DisplayName": "emixxxxxxxx", "ID": "2772a153121e9cbe9581864de8f1361efbf95ad8dd8b78260096d9a55e36c3f3" }, "Key": "folder3/cli_test99.txt", "VersionId": "hpQ0ox92OeI7xSLOPL5gtvD5WM_ko45S", "IsLatest": true, "LastModified": "2021-09-23T20:07:40.000Z" }, { "Owner": { "DisplayName": "emixxxxxxxx", 8b78260096d9a55e36c3f3 "ID": "2772a153121e9cbe9581864de8f1361efbf95ad8dd" }, "Key": "test1.txt", "VersionId": "vM7BCcSGEZIDnhiT9h13OBECX.zE0tPZ", "IsLatest": true, "LastModified": "2021-09-23T20:06:59.000Z" } ] } [ec2-user@ip-10-0-0-31%]$ オブジェクトのバージョンIDを取得 • 要素を見ていくと Versionsセクション DeleteMarkers セクション

Slide 13

Slide 13 text

オブジェクトのバージョンIDを取得 • 要素を見ていくと : : 1セット “Versions”セクション

Slide 14

Slide 14 text

オブジェクトのバージョンIDを取得 • 要素を見ていくと : 1セット “DeleteMarkers”セクション(削除マーカーのこと) :

Slide 15

Slide 15 text

オブジェクトを削除してみる

Slide 16

Slide 16 text

オブジェクトの削除 • S3バケット名と取得したキーとバージョンIDを指定して実行す ればオブジェクトを削除できる • ②aws s3api delete-object ¥ • --bucket ${S3BUCKET_NAME} ¥ • --key ${KEY} ¥ • --version-id ${VER}

Slide 17

Slide 17 text

オブジェクトを削除してみる • 削除マーカーがついていないオブジェクトを削除してみる ( folder2/cli_testyy.txt ) 削除マーカーとか 何もついていないオブジェクト

Slide 18

Slide 18 text

1⃣うわーーーと抽出した Versionsセクションから folder2のcli_testyy.txtを 探してきます 2⃣キーとバージョンIDを 変数に格納 3⃣aws s3api delete-objectコマンドの オプションにバケット名、キー、バージョンIDを 指定し削除実行 オブジェクトを削除してみる • 削除マーカーがついていないオブジェクトを削除してみる ( folder2/cli_testyy.txt ) 抽出結果 実行コマンド

Slide 19

Slide 19 text

オブジェクトを削除してみる • 実行結果↓ バージョンIDが表示され エラーなく終了すればOK

Slide 20

Slide 20 text

オブジェクトを削除してみる • バージョン表示ONでも消えている • 削除マーカーは残らない folder2/cli_testyy.txtが 消えており削除マーカーもない

Slide 21

Slide 21 text

オブジェクトを削除してみる バージョニング有効 S3バケット test1.txt test2.txt cli_text.txt cli_test - コピー.txt cli_testxx.txt cli_testyy.txt cli_testzz.txt cli_test98.txt cli_test99.txt folder1/ folder2/ folder3/ 削除マーカー 削除マーカー 削除マーカー 削除マーカー

Slide 22

Slide 22 text

オブジェクトを削除してみる バージョニング有効 S3バケット test1.txt test2.txt cli_text.txt cli_test - コピー.txt cli_testxx.txt cli_testzz.txt cli_test98.txt cli_test99.txt folder1/ folder2/ folder3/ 削除マーカー 削除マーカー 削除マーカー 削除マーカー folder2/cli_testyy.txtが 消えており削除マーカーもない

Slide 23

Slide 23 text

削除マーカーを削除する

Slide 24

Slide 24 text

削除マーカーを削除する • 削除マーカーを削除してみる( folder2/cli_testxx.txt)

Slide 25

Slide 25 text

1⃣うわーーーと抽出した DeleteMarkersセクションから folder2のcli_testxx.txtを 探してきます 2⃣キーとバージョンIDを 変数に格納 3⃣aws s3api delete-objectコマンドの オプションにバケット名、キー、バージョンIDを 指定し削除実行 削除マーカーを削除する • 削除マーカーを削除してみる( folder2/cli_testxx.txt) 抽出結果 実行コマンド

Slide 26

Slide 26 text

削除マーカーを削除する • 実行結果↓ エラーなく終了すればOK

Slide 27

Slide 27 text

削除マーカーを削除する • バージョン表示オフしてもcli_testxx.txtが見える • 削除マーカーを消すとcli_testxx.txtが復活するのが確認できた folder2/cli_testxx.txt 復活

Slide 28

Slide 28 text

バージョニング有効 S3バケット test1.txt test2.txt cli_text.txt cli_test - コピー.txt cli_testxx.txt cli_testzz.txt cli_test98.txt cli_test99.txt folder1/ folder2/ folder3/ 削除マーカー 削除マーカー 削除マーカー 削除マーカー 削除マーカーを削除する

Slide 29

Slide 29 text

バージョニング有効 S3バケット test1.txt test2.txt cli_text.txt cli_test - コピー.txt cli_testxx.txt cli_testzz.txt cli_test98.txt cli_test99.txt folder1/ folder2/ folder3/ 削除マーカー 削除マーカー 削除マーカー 削除マーカーが消え folder2/cli_testxx.txt復活 削除マーカーを削除する

Slide 30

Slide 30 text

削除マーカーがついている 古いバージョンの オブジェクトを削除する 挙動が気になるのでやってみた

Slide 31

Slide 31 text

削除マーカーがついている古いバージョンの オブジェクトを削除する • バケット直下のtest1.txt を削除する 削除マーカーは残したまま こっちの古いオブジェクトの方を 削除してみる

Slide 32

Slide 32 text

1⃣うわーーーと抽出した Versionsセクションから バケット直下のtest1.txtを 探してきます 2⃣キーとバージョンIDを 変数に格納 3⃣aws s3api delete-objectコマンドの オプションにバケット名、キー、バージョンIDを 指定し削除実行 • バケット直下のtest1.txt を削除する 抽出結果 実行コマンド 削除マーカーがついている古いバージョンの オブジェクトを削除する

Slide 33

Slide 33 text

• 実行結果↓ バージョンIDが表示され エラーなく終了すればOK 削除マーカーがついている古いバージョンの オブジェクトを削除する

Slide 34

Slide 34 text

• 古いオブジェクトが消えて、削除マーカーだけが残っている 削除マーカーだけ残っている 削除マーカーがついている古いバージョンの オブジェクトを削除する

Slide 35

Slide 35 text

バージョニング有効 S3バケット test1.txt の残骸 test2.txt cli_text.txt cli_test - コピー.txt cli_testxx.txt cli_testzz.txt cli_test98.txt cli_test99.txt folder1/ folder2/ folder3/ 削除マーカー 削除マーカー 削除マーカー 削除マーカーは残したまま 削除マーカーがついている古いバージョンの オブジェクトを削除する

Slide 36

Slide 36 text

バージョニング有効 S3バケット test2.txt cli_text.txt cli_test - コピー.txt cli_testxx.txt cli_testzz.txt cli_test98.txt cli_test99.txt folder1/ folder2/ folder3/ 削除マーカー 削除マーカー 削除マーカー 削除マーカーだけ残っている • 古いオブジェクトが消えて、削除マーカーだけが残っている オブジェクトの残骸は消えている 削除マーカーがついている古いバージョンの オブジェクトを削除する

Slide 37

Slide 37 text

古いバージョンのオブジェクトがなく、 削除マーカーだけ残された状態の 削除マーカーを削除する 日本語で表現しづらい

Slide 38

Slide 38 text

残された削除マーカーを 削除してみる 古いバージョンのオブジェクトがなく 削除マーカーだけ残された状態の 削除マーカーを削除する

Slide 39

Slide 39 text

1⃣うわーーーと抽出した DeleteMarkersセクションから フォルダ直下のtest1.txtを 探してきます 2⃣キーとバージョンIDを 変数に格納 3⃣aws s3api delete-objectコマンドの オプションにバケット名、キー、バージョンIDを 指定し削除実行 古いバージョンのオブジェクトがなく 削除マーカーだけ残された状態の 削除マーカーを削除する 抽出結果 実行コマンド

Slide 40

Slide 40 text

エラーなく終了すればOK 古いバージョンのオブジェクトがなく 削除マーカーだけ残された状態の 削除マーカーを削除する

Slide 41

Slide 41 text

古いバージョンのオブジェクトがなく 削除マーカーだけ残された状態の 削除マーカーを削除する • 復活することもなく、完全に削除されている

Slide 42

Slide 42 text

古いバージョンのオブジェクトがなく 削除マーカーだけ残された状態の 削除マーカーを削除する バージョニング有効 S3バケット test2.txt cli_text.txt cli_test - コピー.txt cli_testxx.txt cli_testzz.txt cli_test98.txt cli_test99.txt folder1/ folder2/ folder3/ 削除マーカー 削除マーカー 削除マーカー 残された削除マーカーを削除する

Slide 43

Slide 43 text

古いバージョンのオブジェクトがなく 削除マーカーだけ残された状態の 削除マーカーを削除する バージョニング有効 S3バケット test2.txt cli_text.txt cli_test - コピー.txt cli_testxx.txt cli_testzz.txt cli_test98.txt cli_test99.txt folder1/ folder2/ folder3/ 削除マーカー 削除マーカー 削除マーカーもオブジェクトも消えた 実験おわり

Slide 44

Slide 44 text

(余談)過去にやってた 2020年10月8日 JAWS-UG CLI 専門支部 #169R S3基礎 バージョニング ちょうど1年前くらい

Slide 45

Slide 45 text

• すごいおしゃれにバージョンID取得されてます • 実行結果↓ (余談)過去にやってた あんなに大量の出力が こんなに鮮やかに1行で… 一番新しいバージョンIDは[0] 二番目に新しいバージョンIDは[1] 三番目のバージョンIDは[2] :

Slide 46

Slide 46 text

• 同様に削除マーカーも取得できる • 実行結果↓ (余談)過去にやってた

Slide 47

Slide 47 text

バージョニング有効な S3バケット内に 何千もオブジェクトがあったら?

Slide 48

Slide 48 text

バージョニング有効なS3バケット内に何千も オブジェクトがあったら? • 過去のJAWS-UG CLI専門支部ではオブジェクトを全部消すため for文を回すというとてもおしゃれなやり方をしてました • for i in $( • aws s3api list-object-versions --bucket ${S3_BUCKET_NAME} ¥ • --prefix ${S3_OBJECT_KEY} ¥ • --query "Versions[].VersionId" --output text ¥ • ); do • aws s3api delete-object --bucket ${S3_BUCKET_NAME} ¥ • --key ${S3_OBJECT_KEY} --version-id ${i} • done

Slide 49

Slide 49 text

バージョニング有効なS3バケット内に何千も オブジェクトがあったら? • JQコマンドが使える https://stedolan.github.io/jq/manual/ • JSONから値を抜き出したり、集計したり、整形して表示したり できるコマンド • 今回のようなS3バケットの削除がもう少しスマートにできる • CloudShellだとJQコマンドがデフォルトで導入されているが Cloud9環境には導入されていない

Slide 50

Slide 50 text

まとめ • バージョニング有効のS3バケット内オブジェクトの削除は ざっくり以下2ステップ ①バージョンIDの取得 aws s3api list-object-versions ②削除コマンド実行 aws s3api delete-object • 削除マーカーを削除するとオブジェクトは復活する • オブジェクトを完全に削除するには バージョンIDを指定して削除する • JAWS-UG CLI専門支部はすごい すごい

Slide 51

Slide 51 text

参考 • バージョニングが有効なバケットで削除された Amazon S3 オブジェクトを取得するにはどうすれば よいですか? https://aws.amazon.com/jp/premiumsupport/knowledge-center/s3-undelete-configuration/ • S3 オブジェクトの過去バージョンを一括削除する(AWS社員様のブログ) https://yohei-a.hatenablog.jp/entry/20191020/1571504826 • s3api https://docs.aws.amazon.com/cli/latest/reference/s3api/ • list-object-versions https://docs.aws.amazon.com/cli/latest/reference/s3api/list-object-versions.html • delete-object https://docs.aws.amazon.com/cli/latest/reference/s3api/delete-object.html • JQコマンド https://stedolan.github.io/jq/ • JQコマンドリファレンス https://stedolan.github.io/jq/manual/ • 2020年10月8日 JAWS-UG CLI専門支部 #169R S3基礎 バージョニング https://jawsug-cli.connpass.com/event/188822/