タケユー・ウェブ日報

Ruby on Rails や Flutter といったWeb・モバイルアプリ技術を武器にお客様のビジネス立ち上げを支援する、タケユー・ウェブ株式会社の技術ブログです。

Aws::S3::Clientでリージョンをまたぐコピーをするときは、コピー先のリージョンを明示してやる。

たとえばダウンロード販売のコンテンツを置く場合など

  • 長期間ホストするファイルの容量が大きい
  • 頻繁なリージョン間転送(EC2など)は発生せず、インターネットへの転送がメイン
  • そこまでダウンロード速度を要求しない

こんなとき、S3バケットを価格の安いリージョンに作るのがよいです。

今回、東京リージョンのS3にアップロードされたオブジェクトの一部をシンガポールリージョンにコピーする必要があったのでそのメモです。

サンプルコード

確認環境

リージョンをまたがないとき

s3 = Aws::S3::Client.new
resp = s3.copy_object(
    copy_source: ['src-bucket', 'path/to/src'].join('/'),
    bucket: 'dst-bucket',
    key: 'path/to/dest')

リージョンをまたぐとき

Aws::S3::Client.newのコンストラクタで、コピー先のリージョンを明示してやらないとAWS::S3::Errors::PermanentRedirectが発生します。

コピー元のリージョンではだめです。

s3 = Aws::S3::Client.new('ap-southeast-1') # シンガポールリージョン
resp = s3.copy_object(
    copy_source: ['src-bucket', 'path/to/src'].join('/'),
    bucket: 'dst-bucket',
    key: 'path/to/dest')