GlacierおよびGlacier Deep Archiveに対するAthenaの実行結果

2021.04.27

いわさです。

AthenaからS3バケットに対してをクエリを実行している場合、バケットライフサイクルによってGlacierやDeepArchiveクラスのオブジェクトが混在するとどうなるでしょうか。
Athenaではストレージクラスに気をつける必要があります。
Glacierはクエリに対して無視されます。Glacier Deep Archiveがクエリ対象に含まれているとエラーになります。

今回は他のストレージクラスも含めて実際に確認してみました。

検証方法

以下のCSVデータをストレージクラス毎のファイルに分けます。

1,standard1
2,standard2
3,standard3
4,intelligent1
5,intelligent2
6,intelligent3
7,standard-ia1
8,standard-ia2
9,standard-ia3
10,glacier1
11,glacier2
12,glacier3
13,glacierdeep1
14,glacierdeep2
15,glacierdeep3
16,rrs1
17,rrs2
18,rrs3

一旦スタンダードでS3へアップロードします。

AthenaからS3をクエリ実行するのはとても簡単です。
テーブル作成からS3を選択しウィザードにしたがってS3バケット情報やファイル形式を入力するだけで良いです。

S3バケットに対してクエリを実行し結果を取得することが出来ました。
次から、ファイルのストレージクラスを変更し挙動を確認していきます。

Glacier Deep Archiveが含まれているとエラーになる

HIVE_CURSOR_ERROR: com.amazonaws.services.s3.model.AmazonS3Exception: The operation is not valid for the object's storage class (Service: Amazon S3; Status Code: 403; Error Code: InvalidObjectState; Request ID: W0MN7VJA0Z4Q3FWX; S3 Extended Request ID: NYHMyevdP+wNSYlI5FUPkWujatGaRGgIsgFkXOe/4VXVmT4NuF4ayPQTSNxSI6pkaUvTljtkkDU=; Proxy: null), S3 Extended Request ID: NYHMyevdP+wNSYlI5FUPkWujatGaRGgIsgFkXOe/4VXVmT4NuF4ayPQTSNxSI6pkaUvTljtkkDU= (Path: s3://iwasa0427storageclassathena/glacierdeep.csv)

このクエリは、クエリで認定されていない限り、"iwasahogehoge" に対して実行します。エラーメッセージをフォーラムに投稿するか、クエリ ID: と共にカスタマーサポートにお問い合わせc43e6331-90d8-4996-afe8-d7157f8c4477ください。

エラーが発生しました。
Glacier Deep Archiveオブジェクトが含まれている場合、クエリは失敗します。

Glacier Deep Archiveをバケットから削除して実行します。

Glacierは無視される。クエリの対象にならない。

エラーメッセージは表示されなくなります。
しかし、Glacierのファイル、データが抽出されていません。

Glacierストレージクラスのオブジェクトは無視されます。
無視されるというのは、結果として抽出されません。

復元したらクエリ対象になるか

Glacierでは取り出し操作を行ってオブジェクトを復元し、アクセスすることが出来ます。
しかし、Athenaでは復元したGlacierオブジェクトも無視されます。

ストレージクラスの変更が必要

復元されたオブジェクトをコピーしてストレージクラスを変更する必要があります。

[cloudshell-user@ip-1-2-3-4 ~]$ aws s3 cp s3://iwasa0427storageclassathena/glacier.csv s3://iwasa0427storageclassathena/glacier.csv --storage-class STANDARD
copy: s3://iwasa0427storageclassathena/glacier.csv to s3://iwasa0427storageclassathena/glacier.csv

なお、復元せずにコピーしようとするとエラーとなります。

[cloudshell-user@ip-1-2-3-4 ~]$ aws s3 cp s3://iwasa0427storageclassathena/glacier.csv s3://iwasa0427storageclassathena/glacier.csv --storage-class STANDARD
warning: Skipping file s3://iwasa0427storageclassathena/glacier.csv. Object is of storage class GLACIER. Unable to perform copy operations on GLACIER objects. You must restore the object to be able to perform the operation. See aws s3 copy help for additional parameter options to ignore or force these transfers.

まとめ

Glacierがエラーにならずに無視されるのはとても良いですね。
Glacier Deep Archiveを使用する場合は対象ではない場所へ移動する、ライフサイクルルールに準じたパーティションを活用するなど、Athenaのクエリから除外する方法を検討してください。