このトピックでは、Object Storage Service (OSS) SDK for Python を使用して、バケットのインベントリを作成する方法、およびバケットのインベントリをクエリ、リスト化、削除する方法について説明します。
注意事項
このトピックのサンプルコードでは、中国 (杭州) リージョンのリージョン ID
cn-hangzhouを例として使用します。デフォルトでは、パブリックエンドポイントが使用されます。同じリージョン内の他の Alibaba Cloud プロダクトから OSS にアクセスする場合は、内部エンドポイントを使用します。OSS リージョンとエンドポイント間のマッピングの詳細については、「リージョンとエンドポイント」をご参照ください。バケットインベントリを作成、クエリ、リスト、および削除するための権限を持っていることを確認してください。デフォルトでは、バケットの所有者は上記の操作を実行するための権限を持っています。上記の操作を実行するための権限がない場合は、バケットの所有者に連絡して権限を付与してもらってください。
1 つのバケットに対して最大 1,000 個のインベントリを構成できます。
インベントリを構成するソースバケットは、インベントリリストを保存する宛先バケットと同じリージョンに配置する必要があります。
例
チェックリスト構成の追加
次のサンプルコードは、バケットのインベントリを作成する方法の例を示しています。
import argparse
import alibabacloud_oss_v2 as oss
# コマンドラインパラメータパーサーを作成し、スクリプトの目的を記述します。この例では、バケットのインベントリを作成する方法について説明します。
parser = argparse.ArgumentParser(description="put bucket inventory sample")
# 必須のリージョン、バケット名、エンドポイント、ユーザー ID、RAM ロールの Alibaba Cloud Resource Name (ARN)、およびインベントリ名を含む、コマンドラインパラメータを指定します。
parser.add_argument('--region', help='バケットが配置されているリージョン。', required=True)
parser.add_argument('--bucket', help='バケットの名前。', required=True)
parser.add_argument('--endpoint', help='他のサービスが OSS にアクセスするために使用できるドメイン名')
parser.add_argument('--user_id', help='ユーザーアカウント ID。', required=True)
parser.add_argument('--arn', help='ソースバケットからすべてのオブジェクトを読み取り、宛先バケットにオブジェクトを書き込む権限を持つロールの Alibaba Cloud Resource Name (ARN)。形式: `acs:ram::uid:role/rolename`。', required=True)
parser.add_argument('--inventory_id', help='インベントリの名前。', required=True)
def main():
# コマンドラインパラメータを解析して、ユーザーが指定した値を取得します。
args = parser.parse_args()
# 認証のために環境変数からアクセス認証情報を取得します。
credentials_provider = oss.credentials.EnvironmentVariableCredentialsProvider()
# SDK のデフォルト構成を使用して構成オブジェクトを作成し、認証情報プロバイダーを指定します。
cfg = oss.config.load_default()
cfg.credentials_provider = credentials_provider
# ユーザーが指定したコマンドラインパラメータに基づいて、構成オブジェクトのリージョン属性を指定します。
cfg.region = args.region
# カスタムエンドポイントが提供されている場合は、構成オブジェクトの endpoint パラメータを変更します。
if args.endpoint is not None:
cfg.endpoint = args.endpoint
# 上記の構成を使用して OSSClient インスタンスを初期化し、インスタンスが OSS と対話できるようにします。
client = oss.Client(cfg)
# バケットのインベントリを作成するリクエストを送信します。
result = client.put_bucket_inventory(oss.PutBucketInventoryRequest(
bucket=args.bucket, # バケットの名前。
inventory_id=args.inventory_id, # インベントリの ID。
inventory_configuration=oss.InventoryConfiguration(
included_object_versions='All', # インベントリリストにすべてのバージョンのオブジェクトを含めるように指定します。
optional_fields=oss.OptionalFields(
fields=[ # オブジェクトのサイズや最終更新日時などのオプションフィールド。
oss.InventoryOptionalFieldType.SIZE,
oss.InventoryOptionalFieldType.LAST_MODIFIED_DATE,
],
),
id=args.inventory_id, # インベントリの ID。
is_enabled=True, # バケットのインベントリ機能を有効にするかどうかを指定します。この例では、インベントリ機能は有効になっています。
destination=oss.InventoryDestination(
oss_bucket_destination=oss.InventoryOSSBucketDestination(
format=oss. InventoryFormatType.CSV, # インベントリリストの出力形式を CSV に指定します。
account_id=args.user_id, # ユーザーのアカウント ID。
role_arn=args.arn, # ソースバケット内のオブジェクトを読み取り、宛先バケットにオブジェクトを書き込む権限を持つ RAM ロールの ARN。
bucket=f'acs:oss:::{args.bucket}', # 宛先バケットの名前。
prefix='aaa', # インベントリリストに含めるオブジェクトの名前に含まれるプレフィックスを指定します。
),
),
schedule=oss.InventorySchedule(
frequency=oss. InventoryFrequencyType.DAILY, # インベントリリストを毎日または毎週生成するかどうかを指定します。この例では、インベントリリストは毎日生成されます。
),
filter=oss.InventoryFilter(
lower_size_bound=1024, # インベントリリストに含めるオブジェクトの最小サイズを指定します。単位: バイト。
upper_size_bound=1048576, # インベントリリストに含めるオブジェクトの最大サイズを指定します。単位: バイト。
storage_class='ColdArchive', # インベントリリストに含めるオブジェクトのストレージタイプを指定します。
prefix='aaa', # インベントリをフィルタリングするために使用されるプレフィックスを指定します。
last_modify_begin_time_stamp=1637883649, # オブジェクトが最後に変更された時間範囲の開始を指定します。
last_modify_end_time_stamp=1638347592, # オブジェクトが最後に変更された時間範囲の終了を指定します。
),
),
))
# 操作の HTTP ステータスコードとリクエスト ID を表示して、リクエストステータスを確認します。
print(f'status code: {result.status_code},'
f' request id: {result.request_id},'
)
# スクリプトが直接実行されたときに処理ロジックを開始するために、main 関数を呼び出します。
if __name__ == "__main__":
main() # スクリプトの関数のエントリポイントを指定します。制御プログラムフローはここから開始されます。バケットのインベントリをクエリする
次のサンプルコードは、バケットのインベントリをクエリする方法の例を示しています。
import argparse
import alibabacloud_oss_v2 as oss
# コマンドラインパラメータパーサーを作成し、スクリプトの目的を記述します。この例では、バケットのインベントリをクエリする方法について説明します。
parser = argparse.ArgumentParser(description="get bucket inventory sample")
# 必須のリージョン、バケット名、エンドポイント、およびインベントリ ID を含む、コマンドラインパラメータを指定します。
parser.add_argument('--region', help='バケットが配置されているリージョン。', required=True)
parser.add_argument('--bucket', help='バケットの名前。', required=True)
parser.add_argument('--endpoint', help='他のサービスが OSS にアクセスするために使用できるドメイン名')
parser.add_argument('--inventory_id', help='インベントリの名前。', required=True)
def main():
# コマンドラインパラメータを解析して、ユーザーが指定した値を取得します。
args = parser.parse_args()
# 認証のために環境変数からアクセス認証情報を取得します。
credentials_provider = oss.credentials.EnvironmentVariableCredentialsProvider()
# SDK のデフォルト構成を使用して構成オブジェクトを作成し、認証情報プロバイダーを指定します。
cfg = oss.config.load_default()
cfg.credentials_provider = credentials_provider
# ユーザーが指定したコマンドラインパラメータに基づいて、構成オブジェクトのリージョン属性を指定します。
cfg.region = args.region
# カスタムエンドポイントが提供されている場合は、構成オブジェクトの endpoint パラメータを変更します。
if args.endpoint is not None:
cfg.endpoint = args.endpoint
# 上記の構成を使用して OSSClient インスタンスを初期化し、インスタンスが OSS と対話できるようにします。
client = oss.Client(cfg)
# バケットのインベントリをクエリするリクエストを送信します。
result = client.get_bucket_inventory(oss.GetBucketInventoryRequest(
bucket=args.bucket, # バケットの名前。
inventory_id=args.inventory_id, # インベントリの ID。
))
# 操作の HTTP ステータスコードとリクエスト ID を表示して、リクエストステータスを確認します。
print(f'status code: {result.status_code},'
f' request id: {result.request_id},'
f' included object versions: {result.inventory_configuration.included_object_versions},'
f' id: {result.inventory_configuration.id},'
f' is enabled: {result.inventory_configuration.is_enabled},'
f' account id: {result.inventory_configuration.destination.oss_bucket_destination.account_id},'
f' role arn: {result.inventory_configuration.destination.oss_bucket_destination.role_arn},'
f' bucket: {result.inventory_configuration.destination.oss_bucket_destination.bucket},'
f' prefix: {result.inventory_configuration.destination.oss_bucket_destination.prefix},'
# 次の 2 行のコマンドラインは、暗号化構成に関する情報を記述しています。必要ない場合は削除できます。
# f' key id: {result.inventory_configuration.destination.oss_bucket_destination.encryption.sse_kms.key_id},'
# f' sse oss: {result.inventory_configuration.destination.oss_bucket_destination.encryption.sse_oss},'
f' lower size bound: {result.inventory_configuration.filter.lower_size_bound},'
f' upper size bound: {result.inventory_configuration.filter.upper_size_bound},'
f' storage class: {result.inventory_configuration.filter.storage_class},'
f' prefix: {result.inventory_configuration.filter.prefix},'
f' last modify begin time stamp: {result.inventory_configuration.filter.last_modify_begin_time_stamp},'
f' last modify end time stamp: {result.inventory_configuration.filter.last_modify_end_time_stamp},'
)
# スクリプトが直接実行されたときに処理ロジックを開始するために、main 関数を呼び出します。
if __name__ == "__main__":
main() # スクリプトの関数のエントリポイントを指定します。制御プログラムフローはここから開始されます。バケットのインベントリをリストする
1 回のリクエストで最大 100 個のインベントリをクエリできます。100 個を超えるインベントリをクエリする場合は、複数のリクエストを送信し、各リクエストで返されたトークンを次のリクエストのパラメータとして使用します。
次のサンプルコードは、バケットのインベントリをリストする方法の例を示しています。
import argparse
import alibabacloud_oss_v2 as oss
# コマンドラインパラメータパーサーを作成し、スクリプトの目的を記述します。この例では、バケットのインベントリをリストする方法について説明します。
parser = argparse.ArgumentParser(description="list bucket inventory sample")
# オプション。必須のリージョン、バケット名、エンドポイント、およびインベントリ ID を含む、コマンドラインパラメータを指定します。
parser.add_argument('--region', help='バケットが配置されているリージョン。', required=True)
parser.add_argument('--bucket', help='バケットの名前。', required=True)
parser.add_argument('--endpoint', help='他のサービスが OSS にアクセスするために使用できるドメイン名')
parser.add_argument('--inventory_id', help='インベントリの名前。', required=False) # このシナリオでは、インベントリ ID はオプションです。
def main():
# コマンドラインパラメータを解析して、ユーザーが指定した値を取得します。
args = parser.parse_args()
# 認証のために環境変数からアクセス認証情報を取得します。
credentials_provider = oss.credentials.EnvironmentVariableCredentialsProvider()
# SDK のデフォルト構成を使用して構成オブジェクトを作成し、認証情報プロバイダーを指定します。
cfg = oss.config.load_default()
cfg.credentials_provider = credentials_provider
# ユーザーが指定したコマンドラインパラメータに基づいて、構成オブジェクトのリージョン属性を指定します。
cfg.region = args.region
# カスタムエンドポイントが提供されている場合は、構成オブジェクトの endpoint パラメータを変更します。
if args.endpoint is not None:
cfg.endpoint = args.endpoint
# 上記の構成を使用して OSSClient インスタンスを初期化し、インスタンスが OSS と対話できるようにします。
client = oss.Client(cfg)
# バケットのインベントリをリストするリクエストを送信します。
result = client.list_bucket_inventory(oss.ListBucketInventoryRequest(
bucket=args.bucket, # バケットの名前。
))
# 操作の HTTP ステータスコードとリクエスト ID を表示して、リクエストステータスを確認します。
print(f'status code: {result.status_code},'
f' request id: {result.request_id},'
f' list inventory configurations result: {result.list_inventory_configurations_result},'
f' is truncated: {result.list_inventory_configurations_result.is_truncated},'
f' next continuation token: {result.list_inventory_configurations_result.next_continuation_token},'
)
# インベントリが存在する場合は、各インベントリの詳細を走査して表示します。
if result.list_inventory_configurations_result.inventory_configurations:
for r in result.list_inventory_configurations_result.inventory_configurations:
print(f'result: '
f'included object versions: {r.included_object_versions}, '
f'optional fields: {r.optional_fields}, '
f'id: {r.id}, '
f'is enabled: {r.is_enabled}, '
f'destination: {r.destination}, '
f'schedule: {r.schedule}, '
f'filter: {r.filter}'
)
# スクリプトが直接実行されたときに処理ロジックを開始するために、main 関数を呼び出します。
if __name__ == "__main__":
main() # スクリプトの関数のエントリポイントを指定します。制御プログラムフローはここから開始されます。バケットのインベントリを削除する
次のサンプルコードは、バケットのインベントリを削除する方法の例を示しています。
import argparse
import alibabacloud_oss_v2 as oss
# コマンドラインパラメータパーサーを作成し、スクリプトの目的を記述します。この例では、バケットのインベントリを削除する方法について説明します。
parser = argparse.ArgumentParser(description="delete bucket inventory sample")
# 必須のリージョン、バケット名、エンドポイント、およびインベントリ ID を含む、コマンドラインパラメータを指定します。
parser.add_argument('--region', help='バケットが配置されているリージョン。', required=True)
parser.add_argument('--bucket', help='バケットの名前。', required=True)
parser.add_argument('--endpoint', help='他のサービスが OSS にアクセスするために使用できるドメイン名')
parser.add_argument('--inventory_id', help='インベントリの名前。', required=True)
def main():
# コマンドラインパラメータを解析して、ユーザーが指定した値を取得します。
args = parser.parse_args()
# 認証のために環境変数からアクセス認証情報を取得します。
credentials_provider = oss.credentials.EnvironmentVariableCredentialsProvider()
# SDK のデフォルト構成を使用して構成オブジェクトを作成し、認証情報プロバイダーを指定します。
cfg = oss.config.load_default()
cfg.credentials_provider = credentials_provider
# ユーザーが指定したコマンドラインパラメータに基づいて、構成オブジェクトのリージョン属性を指定します。
cfg.region = args.region
# カスタムエンドポイントが提供されている場合は、構成オブジェクトの endpoint パラメータを変更します。
if args.endpoint is not None:
cfg.endpoint = args.endpoint
# 上記の構成を使用して OSSClient インスタンスを初期化し、インスタンスが OSS と対話できるようにします。
client = oss.Client(cfg)
# バケットのインベントリを削除するリクエストを送信します。
result = client.delete_bucket_inventory(oss.DeleteBucketInventoryRequest(
bucket=args.bucket, # バケットの名前。
inventory_id=args.inventory_id, # インベントリの ID。
))
# 操作の HTTP ステータスコードとリクエスト ID を表示して、リクエストステータスを確認します。
print(f'status code: {result.status_code},'
f' request id: {result.request_id},'
)
# スクリプトが直接実行されたときに処理ロジックを開始するために、main 関数を呼び出します。
if __name__ == "__main__":
main() # スクリプトの関数のエントリポイントを指定します。制御プログラムフローはここから開始されます。