AWS S3 external storage

I am an Omeka newbie and am having some difficulty with S3 storage.

I have updated config.ini with my AWS credentials and the files are being uploaded to the bucket as expected.

Unfortunately, however, there seems to be an issue with the links as displayed in Omeka.

For example the url of one of the files uploaded is https://s3-ap-southeast-1.amazonaws.com/xxx/files/eed1e29d571e3b874ba803bba4551a62.jpg but the url from Omeka is http://s3.amazonaws.com/xxx%2Ffiles%2Feed1e29d571e3b874ba803bba4551a62.jpg . When clicking on this link I am directed to this message:

This XML file does not appear to have any style information associated with it. The document tree is shown below.
<Error>
PermanentRedirect
<Message>
The bucket you are attempting to access must be addressed using the specified endpoint. Please send all future requests to this endpoint.
</Message>
<RequestId>383BD84A58283631</RequestId>
<Bucket>xxx</Bucket>
<HostId>
G28fcAz0PPlHbPhvB8IJi1i5bDJ452s4mxOyNIzQfUfTRHgTqGVUT3cNLd+Cvae4
</HostId>
<Endpoint>xxx.s3.amazonaws.com</Endpoint>
</Error>

Any advice you can offer would be much appreciated.

Thanks.

So, the files are being correctly stored on S3? It's just the links Omeka's generating that are the problem?

Neither of the links you posted actually work (I assume your bucket's not actually called "xxx"?)

The one example link you gave uses a different S3 endpoint. Omeka doesn't allow you to configure that endpoint, I don't think. It seems the current S3 support only works for the US Standard region and the "s3.amazonaws.com" endpoint.

Thanks John.

Yes the files were being correctly stored on S3 and yes the issue is with configuring the endpoint.

For the time being I have gone ahead and used the US Standard region and all is good.

Perhaps you could add support for the additional regions in a future version of Omeka. I notice that 'application/libraries/Omeka/Storage/Adapter/ZendS3.php' appears to allow for a choice of regions.

Thanks again for your help and for Omeka.

We'll look into letting users configure other regions for S3.

At the very least, we should be able to make the endpoint configurable in the same way as the bucket name and access keys.

Thank you. Our audience are predominantly in South East and East Asia so it will be good to locate the content close to them.

I think my question is similar enough to include it here. Here's my hypothetical scenario:

Assets (hundreds of mp3s) are currently being stored in buckets on AWS S3. If our Omeka instance is installed on another webhost (like Dreamhost, etc.), is there a way to have Omeka item records display/play the audio files directly in Omeka (using the HTML5 Media plugin, for example) without having to move/duplicate the mp3 files on our webhost space?

Or, to put it another way, could this be avoided by installing our Omeka instance on AWS to begin with...?

You're storing the MP3s on S3 manually, not through Omeka?

Omeka's S3 support doesn't require you to run the Omeka site on AWS, it can use S3 for storage no matter where the site itself is running from.

(Addressing Sumer's earlier issue: Since Omeka 2.0, you can configure the S3 endpoint in config.ini as storage.adapterOptions.endpoint)

Yes, the organization I'm helping has been using S3 for MP3 storage for several years, but is not yet using Omeka. I'm just looking into how a potential Omeka instance would interface with their existing assets without having to undertake a major reshuffling/re-uploading of files.

The question I have that remains is this: After setting the S3 endpoint in config.ini (which would allow us to upload our files to S3 going forward), would it be possible use the CSVImport plugin to batch upload records that would link to S3 files that are already in place...? Or does the file upload need to be part of the workflow when adding new records...

Thanks, John!

I'm having issues with S3 configuration, some of which I just need to figure out (like how to get the permissions set properly), but Amazon S3 is requiring that I provide an endpoint to access the files. When I set storage.adapterOptions.endpoint I get an Omeka error (Scheme error if I just use the endpoint name "nwraphotolib" and an even lower-level if I include the fully qualified name.)

FYI, the files are being created when I add an item, I just can't view them yet (via the generated URLs)

I'm obviously doing something wrong, but can't figure it out (yet). Help appreciated.

Zend_Uri_Exception
Scheme "nwraphotolib" is not supported

#0 /home/refugeav/public_html/photolib/application/libraries/Zend/Service/Amazon/S3.php(79): Zend_Uri::factory('nwraphotolib')
#1 /home/refugeav/public_html/photolib/application/libraries/Omeka/Storage/Adapter/ZendS3.php(64): Zend_Service_Amazon_S3->setEndpoint('nwraphotolib')
#2 /home/refugeav/public_html/photolib/application/libraries/Omeka/Storage.php(122): Omeka_Storage_Adapter_ZendS3->__construct(Array)
#3 /home/refugeav/public_html/photolib/application/libraries/Omeka/Storage.php(94): Omeka_Storage->setAdapter('Omeka_Storage_A...', Array)
#4 /home/refugeav/public_html/photolib/application/libraries/Omeka/Storage.php(43): Omeka_Storage->setOptions(Array)
#5 /home/refugeav/public_html/photolib/application/libraries/Omeka/Application/Resource/Storage.php(34): Omeka_Storage->__construct(Array)
#6 /home/refugeav/public_html/photolib/application/libraries/Zend/Application/Bootstrap/BootstrapAbstract.php(695): Omeka_Application_Resource_Storage->init()
#7 /home/refugeav/public_html/photolib/application/libraries/Zend/Application/Bootstrap/BootstrapAbstract.php(638): Zend_Application_Bootstrap_BootstrapAbstract->_executeResource('storage')
#8 /home/refugeav/public_html/photolib/application/libraries/Zend/Application/Bootstrap/BootstrapAbstract.php(598): Zend_Application_Bootstrap_BootstrapAbstract->_bootstrap(NULL)
#9 /home/refugeav/public_html/photolib/application/libraries/Zend/Application.php(355): Zend_Application_Bootstrap_BootstrapAbstract->bootstrap(NULL)
#10 /home/refugeav/public_html/photolib/application/libraries/Omeka/Application.php(51): Zend_Application->bootstrap()
#11 /home/refugeav/public_html/photolib/admin/index.php(28): Omeka_Application->initialize()
#12 {main}

Your bucket name (I assume that's the "nwraphotolib" part) shouldn't be part of the endpoint, I think. The Zend S3 component automatically tacks the bucket name onto the URL, so you want just the "base" part of the domain name.

You do need to give a full URL with scheme there, though: http://s3.amazonaws.com (or whatever yours should be).

Well here's the interesting part - and perhaps I need to configure S3 differently (it certainly is not my forte)...

The URL Amazon wants is:

http://nwraphotolib.s3.amazonaws.com/square_thumbnails%2Fa4ce0e8686884f870aec26ba28568c92.jpg

The bucket name ends up on the left of the endpoint.

Unfortunately the adapter always includes the bucket name in the URL, so I'm stuck: if I don't include the bucket name in the endpoint, S3 says:

"The bucket you are attempting to access must be addressed using the specified endpoint. Please send all future requests to this endpoint."

and if I configure the endpoint with the bucket name, the URL has a redundant bucket folder in the URL.

So... very... close!

Got it!

While including the bucket name in the endpoint does work for S3 (but not Omeka), when I looked at the properties of the files I noticed a different URL was given, so I dropped that in as the endpoint "https://s3-us-west-2.amazonaws.com" and voila, I think it's working!!

Thank you!