GlacierおよびGlacier Deep Archiveに対するAthenaの実行結果
いわさです。
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のクエリから除外する方法を検討してください。