読者です 読者をやめる 読者になる 読者になる

元フリーエンジニアライフ

Ruby on Rails とか MovableType とかAWSやってるフリーランスウェブエンジニアの記録でした。現在は法人成りしてIT社長。

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')