Aws::S3::Client.copy_object の copy_source は、URL encode されていなければならない
例えば、バケットからバケットへオブジェクトをコピーするときに、
`The specified key does not exist.` とエラーが出る場合がありました。
client = Aws::S3::Client.new client.copy_object( bucket: out_bucket_name, copy_source: src_bucket_name + '/' + object_key, key: object_key, acl: 'public-read', cache_control: "max-age=#{OBJECT_MAX_AGE}", content_type: src_object.content_type, metadata_directive: 'REPLACE', )
https://docs.aws.amazon.com/sdk-for-ruby/v3/api/Aws/S3/Client.html#copy_object-instance_method
ドキュメントを見ると、The value must be URL encoded.とあったので、
これは、 copy_source に渡している、object_key に、hogehoge%2B.pngなど、エスケープされていない文字が含まれていると、パスが見つからず、エラーになってしまうようです。
URI.encode_www_form_component(src_bucket_name + '/' + object_key) などで、エンコードしましょう。