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

Object Storage Service:オブジェクトのコピー (Ruby SDK)

最終更新日:Nov 30, 2025

このトピックでは、同じリージョン内のソースバケットから、同じまたは異なる宛先バケットにオブジェクトをコピーする方法について説明します。

注意事項

  • このトピックでは、中国 (杭州) リージョンのパブリックエンドポイントを使用します。 同じリージョン内の他の Alibaba Cloud サービスから OSS にアクセスするには、内部エンドポイントを使用します。 サポートされているリージョンとエンドポイントの詳細については、「リージョンとエンドポイント」をご参照ください。

  • このトピックでは、環境変数からアクセス認証情報を取得します。 アクセス認証情報の設定方法の詳細については、「アクセス認証情報の設定」をご参照ください。

  • このトピックでは、OSS エンドポイントを使用して OSSClient インスタンスを作成します。 カスタムドメイン名またはセキュリティトークンサービス (STS) を使用して OSSClient インスタンスを作成する場合は、「一般的なシナリオの設定例」をご参照ください。

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

  • ソースバケットと宛先バケットに保存ポリシーが設定されていないことを確認してください。 設定されている場合、エラーメッセージ The object you specified is immutable. が返されます。

  • ソースバケットと宛先バケットは、同じリージョンにある必要があります。 たとえば、中国 (杭州) リージョンにあるバケットから中国 (青島) リージョンにある別のバケットにオブジェクトをコピーすることはできません。

権限

デフォルトでは、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

サンプルコード

bucket.copy_object を使用してオブジェクトをコピーし、:meta_directive パラメーターを使用してオブジェクトのメタデータを指定できます。 コピー操作中に、次のいずれかの方法でオブジェクトのメタデータを処理できます。

  • meta パラメーターを指定しない場合、宛先オブジェクトのメタデータはソースオブジェクトのメタデータと同じになります。

  • meta パラメーターを指定した場合、ソースオブジェクトのメタデータは新しいメタデータで上書きされます。

次のコードは、オブジェクトをコピーする方法を示しています。

require 'aliyun/oss'
client = Aliyun::OSS::Client.new(
  # バケットが配置されているリージョンのエンドポイントを指定します。 たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。
  endpoint: 'https://oss-cn-hangzhou.aliyuncs.com',
  # 環境変数からアクセス認証情報を取得します。 サンプルコードを実行する前に、環境変数 OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET が設定されていることを確認してください。
  access_key_id: ENV['OSS_ACCESS_KEY_ID'],
  access_key_secret: ENV['OSS_ACCESS_KEY_SECRET']
)

# バケット名を指定します。 例: examplebucket。
bucket = client.get_bucket('examplebucket')

# オブジェクトとそのメタデータをコピーします。
bucket.copy_object(
  # この例では、srcobject.txt が destobject.txt としてコピーされます。
  'destobject.txt', 'srcobject.txt',
  :meta_directive => Aliyun::OSS::MetaDirective::COPY)

# オブジェクトをコピーし、そのメタデータを上書きします。
bucket.copy_object(
  'destobject.txt', 'srcobject.txt',
  :metas => {'year' => '2017'},
  :meta_directive => Aliyun::OSS::MetaDirective::REPLACE)            

関連ドキュメント

CopyObject API 操作の詳細については、「CopyObject」をご参照ください。