すべてのプロダクト
Search
ドキュメントセンター

Object Storage Service:Python 2.0 版 OSS SDK を使用してオブジェクトをコピーする

最終更新日:Aug 05, 2025

このトピックでは、Python バージョン 2.0 の OSS SDK の CopyObject メソッドを使用して、サイズが 5 GiB 未満のオブジェクトを、同じリージョン内のソースバケットからデスティネーションバケットにコピーする方法について説明します。 デスティネーションバケットは、ソースバケットと同じバケットでも、別のバケットでもかまいません。

注意事項

  • このトピックのサンプルコードでは、中国 (杭州) リージョンのリージョン ID cn-hangzhou を使用しています。 デフォルトでは、パブリックエンドポイントを使用してバケット内のリソースにアクセスします。 バケットが配置されているのと同じリージョン内の他の Alibaba Cloud サービスを使用してバケット内のリソースにアクセスする場合は、内部エンドポイントを使用します。 OSS のリージョンとエンドポイントの詳細については、「リージョンとエンドポイント」をご参照ください。

  • オブジェクトをコピーするには、ソースオブジェクトに対する読み取り権限と、デスティネーションバケットに対する読み取りおよび書き込み権限が必要です。

  • ソースバケットとデスティネーションバケットは、同じリージョンに配置されている必要があります。 たとえば、中国 (杭州) リージョンにあるバケット内のオブジェクトを、中国 (青島) リージョンにある別のバケットにコピーすることはできません。

  • ソースバケットとデスティネーションバケットに保持ポリシーが構成されていないことを確認してください。 構成されている場合は、次のエラーメッセージが返されます: 指定したオブジェクトは変更不可です。

権限

デフォルトでは、Alibaba Cloud アカウントにはすべての権限があります。 Alibaba Cloud アカウントの RAM ユーザーまたは RAM ロールには、デフォルトでは権限がありません。 Alibaba Cloud アカウントまたはアカウント管理者は、RAM ポリシーまたは バケットポリシーを通じて操作権限を付与する必要があります。

API

アクション

定義

CopyObject

oss:GetObject

同じリージョン内のバケット内またはバケット間でオブジェクトをコピーします。

oss:PutObject

oss:GetObjectVersion

versionId を使用してソースオブジェクトのバージョンを指定する場合は、この権限も必要です。

oss:GetObjectTagging

x-oss-tagging を使用してオブジェクトタグをコピーする場合は、これらの権限が必要です。

oss:PutObjectTagging

oss:GetObjectVersionTagging

versionId を使用してソースオブジェクトの特定のバージョンのタグを指定する場合は、この権限も必要です。

kms:GenerateDataKey

オブジェクトのコピー時に、デスティネーションオブジェクトのメタデータに X-Oss-Server-Side-Encryption: KMS が含まれている場合は、これら 2 つの権限が必要です。

kms:Decrypt

メソッド

copy_object(request: CopyObjectRequest, **kwargs) → CopyObjectResult

リクエストパラメーター

パラメーター

タイプ

説明

request

CopyObjectRequest

リクエストパラメーター。 詳細については、「CopyObjectRequest」をご参照ください。

CopyObjectRequest の共通パラメーター

パラメーター

タイプ

説明

bucket

str

デスティネーションバケットの名前。

key

str

デスティネーションオブジェクトの名前。

source_bucket

str

ソースバケットの名前。

source_key

str

ソースオブジェクトの名前。

forbid_overwrite

str

CopyObject 操作で、同じ名前の既存のオブジェクトを上書きするかどうかを指定します。

tagging

str

デスティネーションオブジェクトのタグ。 デスティネーションオブジェクトには複数のタグを構成できます。 例: TagA=A&TagB=B。

tagging_directive

str

デスティネーションオブジェクトのタグを構成するために使用されるメソッド。 有効な値:

  • コピー (デフォルト): ソースオブジェクトのタグがデスティネーションオブジェクトにコピーされます。

  • 置換: リクエストで指定されたタグがデスティネーションオブジェクトに構成されます。

レスポンスパラメーター

タイプ

説明

CopyObjectResult

戻り値。 詳細については、「CopyObjectResult」をご参照ください。

オブジェクトコピーメソッドの完全な定義については、「copy_object」をご参照ください。

サンプルコード

次のサンプルコードは、サイズが 5 GiB 未満のオブジェクトをソースバケットからデスティネーションバケットにコピーする方法の例を示しています。

import argparse
import alibabacloud_oss_v2 as oss

# コマンドラインパラメーターパーサーを作成します。
parser = argparse.ArgumentParser(description="copy object sample")

# --region パラメーターを指定して、バケットが配置されているリージョンを示します。 このパラメーターは必須です。
parser.add_argument('--region', help='バケットが配置されているリージョン。', required=True)
# --bucket パラメーターを指定します。これは、デスティネーションバケットの名前を指定します。 このパラメーターは必須です。
parser.add_argument('--bucket', help='デスティネーションバケットの名前。', required=True)
# --endpoint パラメーターを指定して、バケットが配置されているリージョンのエンドポイントを示します。 このパラメーターはオプションです。
parser.add_argument('--endpoint', help='他のサービスが OSS にアクセスするために使用できるドメイン名')
# --key パラメーターを指定します。これは、デスティネーションオブジェクトの名前を指定します。 このパラメーターは必須です。
parser.add_argument('--key', help='デスティネーションオブジェクトの名前。', required=True)
# --source_key パラメーターを指定します。これは、ソースオブジェクトの名前を指定します。 このパラメーターは必須です。
parser.add_argument('--source_key', help='ソースオブジェクトの名前。', required=True)
# --source_bucket パラメーターを指定します。これは、ソースバケットの名前を指定します。 このパラメーターは必須です。
parser.add_argument('--source_bucket', 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 インスタンスを作成します。
    client = oss.Client(cfg)

    # オブジェクトをコピーします。
    result = client.copy_object(oss.CopyObjectRequest(
        bucket=args.bucket,  # デスティネーションバケットの名前。
        key=args.key,  # デスティネーションオブジェクトのキー名。
        source_key=args.source_key,  # ソースオブジェクトのキー名。
        source_bucket=args.source_bucket,  # ソースバケットの名前。
    ))

    # コピー操作の結果情報を出力します。
    print(f'status code: {result.status_code},'
          f' request id: {result.request_id},'
          f' version id: {result.version_id},'
          f' hash crc64: {result.hash_crc64},'
          f' source version id: {result.source_version_id},'
          f' server side encryption: {result.server_side_encryption},'
          f' server side data encryption: {result.server_side_data_encryption},'
          f' last modified: {result.last_modified},'
          f' etag: {result.etag},'
    )

# スクリプトが直接実行されたときに main 関数を呼び出します。
if __name__ == "__main__":
    main()  # スクリプトが直接実行されたときに、スクリプトの main 関数にエントリポイントを指定します。

関連情報

  • オブジェクトをコピーするための完全なサンプルコードについては、「copy_object.py」をご参照ください。