メニュー
Amazon Simple Storage Service
開発者ガイド (API Version 2006-03-01)

Amazon S3 インベントリ

Amazon S3 インベントリは、ストレージ管理用に Amazon S3 が提供するツールの 1 つです。これは、ビジネス、コンプライアンス、および規制上のニーズに対応して、オブジェクトのレプリケーションと暗号化のステータスを監査し、レポートするために使用できます。また、Amazon S3 インベントリを使用して、ビジネスワークフローとビッグデータジョブを簡素化、高速化できます。Amazon S3 インベントリは、Amazon S3 同期 List API オペレーションの代替スケジュールを提供します。

Amazon S3 インベントリは、S3 バケットまたは共有プレフィックス (つまり、名前の先頭が共通文字列のオブジェクト) に関して、オブジェクトと対応するメタデータをリストしたカンマ区切り値 (CSV) または Apache 最適化行列 (ORC) 出力ファイルを毎日または毎週生成します。Amazon S3 インベントリの料金については、「Amazon S3 料金表」を参照してください。

1 つのバケットに対して複数のインベントリリストを設定できます。インベントリに含めるオブジェクトメタデータ、すべてのオブジェクトバージョンと現在のバージョンだけのどちらをリストするか、インベントリリストのファイル出力を保存する場所、インベントリを毎日または毎週のどちらで生成するか、を設定できます。インベントリリストファイルを暗号化するように指定することもできます。

Amazon Athena、Amazon Redshift Spectrum、および PrestoApache Hive、および Apache Spark などのツールを使用して、標準 SQL で Amazon S3 インベントリにクエリを実行することができます。Athena を使用して、インベントリファイルに対してクエリを実行するのは簡単です。Athena が使用可能なすべてのリージョンで、S3 インベントリへのクエリに Athena を使用できます。

Amazon S3 インベントリをセットアップする方法

このセクションでは、インベントリのソースバケットと保存先バケットに関する詳細を含め、インベントリを設定する方法について説明します。

Amazon S3 インベントリのソースバケットと保存先バケット

インベントリによってオブジェクトがリストされるバケットは、ソースバケットと呼ばれます。インベントリリストのファイルが保存されるバケットは、保存先バケットと呼ばれます。

ソースバケット

インベントリは、ソースバケットに格納されているオブジェクトをリストします。バケット全体のインベントリリストを取得することも、(オブジェクトキー名の) プレフィックスによってフィルタされたリストを取得することもできます。

ソースバケット:

  • インベントリにリストされているオブジェクトが含まれます。

  • インベントリの設定が含まれます。

保存先バケット

Amazon S3 インベントリリストのファイルは、保存先バケットに書き込まれます。すべてのインベントリリストファイルを保存先バケットの共通の場所にグループ化するには、インベントリの設定で保存先の (オブジェクトキー名) プレフィックスを指定します。

保存先バケット:

  • インベントリのファイルリストが含まれます。

  • 保存先バケットに保存されているすべてのファイルインベントリリストをリストしたマニフェストファイルが含まれます。詳細については、「インベントリマニフェストとは」を参照してください。

  • バケットの所有権を検証するためのアクセス許可と、バケットにファイルを書き込むためのアクセス許可を Amazon S3 に付与する、バケットポリシーが必要です。

  • ソースバケットと同じ AWS リージョンに存在する必要があります。

  • ソースバケットと同じでもかまいません。

  • ソースバケットを所有するアカウントとは別の AWS アカウントによって所有されていてもかまいません。

Amazon S3 インベントリのセットアップ

Amazon S3 インベントリは、定義したスケジュールで S3 バケット内のオブジェクトのリストを作成し、ストレージの管理に役立ちます。1 つのバケットに対して複数のインベントリリストを設定できます。インベントリリストは、保存先バケットの CSV または ORC ファイルに発行されます。

インベントリを設定する最も簡単な方法は、AWS マネジメントコンソール を使用することですが、REST API、AWS CLI、または AWS SDK を使用することもできます。コンソールは、次の手順の最初のステップを実行します。保存先バケットへのバケットポリシーの追加。

S3 バケットの Amazon S3 インベントリをセットアップするには

  1. 保存先バケットのバケットポリシーを追加します。

    定義された場所のバケットにオブジェクトを書き込むアクセス許可を Amazon S3 に付与するバケットポリシーを保存先バケットに作成する必要があります。ポリシーの例については、「Amazon S3 インベントリおよび Amazon S3 分析に対するアクセス権限の付与」を参照してください。

  2. ソースバケットのオブジェクトをリストして保存先バケットにリストを発行するようにインベントリを設定します。

    ソースバケットのインベントリリストを設定するときは、リストを保存する保存先バケットと、リストを毎日または毎週のどちらで生成したいかを、指定します。また、含めるオブジェクトメタデータ、およびすべてのオブジェクトバージョンと現在のバージョンだけのどちらをリストするかも、設定できます。

    Amazon S3 で管理されたキー (SSE-S3) または AWS KMS で管理されたキー (SSE-KMS) を使用してインベントリリストファイルを暗号化するように指定できます。SSE-S3 および SSE-KMS に関する詳細は、「サーバー側の暗号化を使用したデータの保護」を参照してください。SSE-KMS 暗号化を使用する場合は、ステップ 3 を参照してください。

    • コンソールを使用してインベントリリストを設定する方法については、「Amazon S3 インベントリを設定する方法」(Amazon Simple Storage Service コンソールユーザーガイド) を参照してください。

    • Amazon S3 API を使用してインベントリリストを設定するには、PUT バケットインベントリ設定 REST API を使用するか、AWS CLI または AWS SDK のそれに相当する機能を使用します。

  3. SSE-KMS を使用してインベントリリストファイルを暗号化するには、AWS KMS キーを使用するための Amazon S3 アクセス権限を付与します。

    AWS マネジメントコンソール、REST API、AWS CLI、または AWS SDK を使用してインベントリリストファイルの暗号化を設定することができます。どちらの方法を選択しても、AWS KMS カスタマーマスターキー (CMK) を使用してインベントリファイルを暗号化するための Amazon S3 アクセス権限を付与する必要があります。Amazon S3 アクセス権限を付与するには、インベントリファイルの暗号化に使用されている AWS KMS CMK のキーポリシーを変更します。詳細については、次のセクション「AWS KMS キーを使用した暗号化のための Amazon S3 アクセス権限の付与」をご覧ください。

AWS KMS キーを使用した暗号化のための Amazon S3 アクセス権限の付与

AWS KMS キーを使用して暗号化するには、キーポリシーを使用して Amazon S3 アクセス権限を付与する必要があります。次の手順では、インベントリファイルを暗号化するときに使用する AWS KMS CMK キーポリシーを変更するために、AWS Identity and Access Management (IAM) コンソールを使用する方法について説明します。

AWS KMS キーを使用した暗号化のためのアクセス権限を付与するには

  1. AWS KMS CMK を所有する AWS アカウントを使用して AWS マネジメントコンソール にサインインし、https://console.aws.amazon.com/iam/ から IAM コンソールを開きます。

  2. 左のナビゲーションペインで、[Encryption keys] を選択します。

  3. [Region] で、該当する AWS リージョンを選択します。ナビゲーションバー (右上すみ) にあるリージョンセレクタを使用しないでください。

  4. インベントリを暗号化する CMK のエイリアスを選択します。

  5. ページの [Key Policy] セクションで、[Switch to policy view] を選択します。

  6. [Key Policy] エディタを使用して以下のキーポリシーを既存のポリシーに追加し、[Save Changes] を選択します。ポリシーを既存のポリシーの最後にコピーすることができます。

    { "Sid": "Allow Amazon S3 use of the key", "Effect": "Allow", "Principal": { "Service": "s3.amazonaws.com" }, "Action": [ "kms:GenerateDataKey*" ], "Resource": "*" }

AWS KMS PUT キーポリシー API PutKeyPolicy を使用して、インベントリファイルの暗号化に使用されている CMK にキーポリシーをコピーすることができます。AWS KMS CMK の作成と編集の詳細については、AWS Key Management Service Developer Guide の「ご利用開始にあたって」を参照してください。

Amazon S3 インベントリに含まれるもの

インベントリリストファイルには、ソースバケット内のオブジェクトのリストと、各オブジェクトのメタデータが含まれます。このインベントリリストは、保存先バケットに保存されている GZIP で圧縮された CSV ファイル、または Apache 最適化行列 (ORC) ファイルです。

インベントリリストには、S3 バケット内のオブジェクトのリストと、リストされている各オブジェクトの次のメタデータが含まれます。

  • バケット名 – インベントリ対象のバケットの名前。

  • キー名 – バケット内のオブジェクトを一意に識別するオブジェクトのキー名 (またはキー)。

  • バージョン ID – オブジェクトのバージョン ID。バケットのバージョニングを有効にすると、Amazon S3 はバケットに追加されたオブジェクトにバージョン番号を割り当てます。詳細については、「オブジェクトのバージョニング」を参照してください。このフィールドは、リストが現在のバージョンのオブジェクトだけである場合は含まれません。

  • IsLatest – オブジェクトが現在のバージョンのオブジェクトである場合は、True に設定されますこのフィールドは、リストが現在のバージョンのオブジェクトだけである場合は含まれません。

  • サイズ – オブジェクトのサイズ (バイト単位)。

  • 最終更新日 – オブジェクトの作成日または最終更新日のどちらか新しい方。

  • ETag – エンティティタグは、オブジェクトのハッシュです。ETag は、オブジェクトのコンテンツに加えた変更のみを反映し、メタデータに加えた変更は反映しません。ETag は、オブジェクトデータの MD5 ダイジェストである場合と、そうでない場合があります。どちらであるかは、オブジェクトの作成方法と暗号化方法によって決まります。

  • ストレージクラス – オブジェクトの保存に使用されるストレージクラス。詳細については、「ストレージクラス」を参照してください。

  • マルチパートアップロードフラグ – オブジェクトがマルチパートアップロードとしてアップロードされた場合は、True に設定されます。詳細については、「マルチパートアップロードの概要」を参照してください。

  • 削除マーカー – オブジェクトが削除マーカーである場合は、True に設定されます。詳細については、「オブジェクトのバージョニング」を参照してください。このフィールドは、リストが現在のバージョンのオブジェクトだけである場合は含まれません。

  • レプリケーションステータスPENDINGCOMPLETEDFAILED、または REPLICA. に設定されます。詳細については、「クロスリージョンレプリケーションのステータスの検索 」を参照してください。

  • 暗号化ステータスSSE-S3SSE-CSSE-KMS、または NOT-SSE に設定します。SSE-S3、SSE-KMS、および顧客提供キー付き SSE (SSE-C) のサーバー側暗号化ステータス。ステータスが NOT-SSE の場合、オブジェクトはサーバー側の暗号化を使用して暗号化されません。詳細については、「暗号化を使用したデータの保護」を参照してください。

スプレッドシートアプリケーションで開いた CSV インベントリリストの例を次に示します。見出し行は例をわかりやすくするためだけに表示されており、実際のリストには含まれません。

スプレッドシートアプリケーションで開いたインベントリリストの例のスクリーンショット。

古いインベントリリストを削除するライフサイクルポリシーを作成することをお勧めします。詳細については、「オブジェクトのライフサイクル管理」を参照してください。

インベントリ整合性

すべてのオブジェクトが各インベントリリストに表示されない場合があります。インベントリリストは、新しいオブジェクトと上書きの両方に対する PUT および DELETE の結果整合性を提供します。インベントリリストはバケット項目のローリングスナップショットであり、結果的に整合します (つまり、最近追加されたオブジェクトまたは削除されたオブジェクトはリストに含まれない可能性があります)。

オブジェクトに対してアクションを実行する前に、オブジェクトの状態を検証するため、HEAD Object REST API リクエストを実行してオブジェクトのメタデータを取得するか、Amazon S3 コンソールでオブジェクトのプロパティを確認することをお勧めします。AWS CLI または AWS SDK でオブジェクトのメタデータを確認することもできます。詳細については、Amazon Simple Storage Service API Referenceの「HEAD Object」を参照してください。

インベントリリストの場所

インベントリリストが発行されると、マニフェストファイルは保存先バケットの次の場所に発行されます。

destination-prefix/source-bucket/config-ID/YYYY-MM-DDTHH-MMZ/manifest.json destination-prefix/source-bucket/config-ID/YYYY-MM-DDTHH-MMZ/manifest.checksum destination-prefix/source-bucket/config-ID/hive/dt=YYYY-MM-DD-HH-MM/symlink.txt
  • destination-prefix は、インベントリの構成で設定されている (オブジェクトキー名の) プレフィックスであり、保存先バケットの共通の場所にすべてのインベントリリストファイルをグループ化するために使用できます。

  • source-bucket は、インベントリリストの対象であるソースバケットです。異なるソースバケットから複数のインベントリレポートが同じ保存先バケットに送られるときの競合を避けるために追加されます。

  • config-ID は、同じソースバケットから同じ保存先バケットに複数のインベントリレポートが送られるときの競合を避けるために追加されます。

  • YYYY-MM-DDTHH-MMZ は、インベントリリストが生成された日付です。たとえば、2016-11-06T21-32Z と指定します。

  • manifest.json がマニフェストファイルです。

  • manifest.checksum は、manifest.json ファイルのコンテンツの MD5 です。

  • symlink.txt は、Apache Hive と互換性のあるマニフェストファイルです。

インベントリリストは、保存先バケットの次の場所に、毎日または毎週発行されます。

destination-prefix/source-bucket/data/example-file-name.csv.gz ... destination-prefix/source-bucket/data/example-file-name-1.csv.gz
  • destination-prefix は、インベントリ設定で設定した (オブジェクトキー名) プレフィックスです。これは、保存先バケットの共通の場所にあるすべてのインベントリリストファイルをグループ化するために使用できます。

  • source-bucket は、インベントリリストの対象であるソースバケットです。異なるソースバケットから複数のインベントリレポートが同じ保存先バケットに送られるときの競合を避けるために追加されます。

  • example-file-name.csv.gz は、CSV インベントリファイルの 1 つです。ORC インベントリ名はファイル名拡張子 .orc で終わります。

インベントリマニフェストとは

マニフェストファイルの manifest.jsonsymlink.txt は、インベントリファイルの場所を記述します。新しいインベントリリストが配信されるたびに、新しいセットのマニフェストファイルが作成されます。

manifest.json ファイルに含まれる各マニフェストには、メタデータおよびその他のインベントリに関する基本的な情報が記載されています。この情報には、ソースバケット名、保存先バケット名、インベントリのバージョン、インベントリファイルのフォーマットとスキーマ、保存先バケットにある実際のインベントリファイルのリストが含まれます。manifest.json ファイルが書き込まれるときは常に、manifest.json ファイルのコンテントの MD5 である manifest.checksum ファイルが付属します。

CSV フォーマットのインベントリ用の manifest.json ファイルに含まれるマニフェストの例を次に示します。

{ "sourceBucket": "example-source-bucket", "destinationBucket": "example-inventory-destination-bucket", "version": "2016-11-30", "fileFormat": "CSV", "fileSchema": "Bucket, Key, VersionId, IsLatest, IsDeleteMarker, Size, LastModifiedDate, ETag, StorageClass, MultipartUploaded, ReplicationStatus", "files": [ { "key": "Inventory/example-source-bucket/2016-11-06T21-32Z/files/939c6d46-85a9-4ba8-87bd-9db705a579ce.csv.gz", "size": 2147483647, "MD5checksum": "f11166069f1990abeb9c97ace9cdfabc", "inventoriedRecord": 58050695 } ] }

ORC フォーマットのインベントリ用の manifest.json ファイルに含まれるマニフェストの例を次に示します。

{ "sourceBucket": "example-source-bucket", "destinationBucket": "arn:aws:s3:::example-destination-bucket", "version": "2016-11-30", "fileFormat": "ORC", "fileSchema": "struct<bucket:string,key:string,version_id:string,is_latest:boolean,is_delete_marker:boolean,size:bigint,last_modified_date:timestamp,e_tag:string,storage_class:string,is_multipart_uploaded:boolean,replication_status:string,encryption_status:string>", "files": [ { "key": "inventory/example-source-bucket/data/d794c570-95bb-4271-9128-26023c8b4900.orc", "size": 56291, "MD5checksum": "5925f4e78e1695c2d020b9f6eexample" } ] }

symlink.txt ファイルは、Apache Hive 互換のマニフェストファイルで、それにより Hive はインベントリファイルとそれに関連付けられたデータファイルを自動的に検出します。Hive 互換のマニフェストは、Athena、AWS Glue、Amazon Redshift Spectrum など Hive と互換性のあるサービスで動作します。また、PrestoApache HiveApache Spark などさまざまな種類の Hive と互換性のあるアプリケーションで動きます。

インベントリが完了したことを知る方法

マニフェストチェックサムファイルが作成されたら通知を受け取るように、Amazon S3 イベント通知をセットアップできます。これは、インベントリリストが保存先バケットに追加されたことを示します。マニフェストは、保存先の場所にあるすべてのインベントリリストの最新のリストです。

Amazon S3 は、Amazon Simple Notification Service (Amazon SNS) トピック、Amazon Simple Queue Service (Amazon SQS) キュー、または AWS Lambda 関数にイベントを発行できます。詳細については、「 Amazon S3 イベント通知の設定」を参照してください。

次の通知設定は、保存先バケットに新しく追加されるすべての manifest.checksum ファイルが AWS Lambda cloud-function-list-write によって処理されることを定義します。

<NotificationConfiguration> <QueueConfiguration> <Id>1</Id> <Filter> <S3Key> <FilterRule> <Name>prefix</Name> <Value>destination-prefix/source-bucket</Value> </FilterRule> <FilterRule> <Name>suffix</Name> <Value>checksum</Value> </FilterRule> </S3Key> </Filter> <Cloudcode>arn:aws:lambda:us-west-2:222233334444:cloud-function-list-write</Cloudcode> <Event>s3:ObjectCreated:*</Event> </QueueConfiguration> </NotificationConfiguration>

詳細については、AWS Lambda Developer Guideの「Amazon S3 で AWS Lambda を使用する」を参照してください。

Amazon Athena でインベントリをクエリする

Athena が使用可能なすべてのリージョンで、Amazon Athena で標準 SQL を使用して Amazon S3 インベントリのクエリを実行することができます。使用可能な AWS リージョンを確認するには、「製品およびサービス一覧 (リージョン別)」を参照してください。

Athena は ORC または CSV 形式の Amazon S3 のインベントリファイルをクエリできます。Athena を使用してインベントリをクエリする場合は、CSV 形式ではなく ORC 形式のインベントリファイルを使用することをお勧めします。ORC 形式は、より高速なクエリパフォーマンスと低いクエリコストを実現します。ORC は、Apache Hadoop 向けに設計された自己記述型でタイプ対応の列ファイル形式です。列形式の場合、リーダーは現在のクエリに必要な列だけを読み取り、圧縮解除し、処理することができます。Amazon S3 インベントリの ORC 形式は、すべての AWS リージョンで使用できます。

Athena を使用した Amazon S3 インベントリのクエリを開始するには

  1. Athena テーブルの作成テーブルの作成については、Amazon Athena ユーザーガイド の「ご利用開始にあたって」を参照してください。

    次のサンプルクエリには、インベントリレポートのすべてのオプションフィールドが含まれています。インベントリ用に選択しなかったオプションフィールドをドロップして、インベントリ用に選択したフィールドにクエリが対応するようにします。また、バケット名と場所を使用する必要があります。場所は、インベントリの保存先のパスを指します。たとえば、destination-prefix/source-bucket/config-ID/hive です。

    CREATE EXTERNAL TABLE your-table-name( `destination-bucket-name` string, key string, version_id string, is_latest boolean, is_delete_marker boolean, size bigint, last_modified_date timestamp, e_tag string, storage_class string, is_multipart_uploaded boolean, replication_status string, encryption_status string ) PARTITIONED BY (dt string) ROW FORMAT SERDE 'org.apache.hadoop.hive.ql.io.orc.OrcSerde' STORED AS INPUTFORMAT 'org.apache.hadoop.hive.ql.io.SymlinkTextInputFormat' OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.IgnoreKeyTextOutputFormat' LOCATION 's3://destination-prefix/source-bucket/config-ID/hive';
  2. テーブルに新しいインベントリリストを追加するには、次の MSCK REPAIR TABLE コマンドを使用します。

    MSCK REPAIR TABLE your-table-name;
  3. 最初の 2 つのステップを実行した後、次の例に示すように、インベントリに対してアドホッククエリを実行できます。

    SELECT encryption_status, count(*) FROM your-table-name GROUP BY encryption_status;

Athena の使用方法の詳細については、「Amazon Athena ユーザーガイド」を参照してください。

次に示すのは、Amazon S3 インベントリに使用される REST オペレーションです。