How can I use Cloud Storage which is Amazon(S3) Compatible but not Amazon?

We are using Dreamhost for cloud storage (which I believe uses S3/Eucalyptus or compatible technology) and would like to hook up Razuna to use that storage option. I have “slid in” the Dreamhost server address and credentials in other places that are supposed to be “Amazon S3” and it has worked flawlessly.

To this end, I have modified the dsp_pref_global_storage.cfm file to present the option,

    <!--- added 12/3/14.... --->
<option value="dreamhost"<cfif application.razuna.awslocation EQ "dreamhost"> selected="selected"</cfif>>DreamHost Cloud</option>

and the amazon.cfc file to slide in the address and try the connection,

<cfset var x = "">
		<!--- Define endpoint --->
		<cfif arguments.location EQ "us-east">
			<cfset x = "s3">
		<cfelseif arguments.location EQ "us-west-2">
			<cfset x = "s3-us-west-2">
		<cfelseif arguments.location EQ "us-west-1">
			<cfset x = "s3-us-west-1">
		<cfelseif arguments.location EQ "eu">
			<cfset x = "s3-eu-west-1">
		<cfelseif arguments.location EQ "ap-southeast-1">
			<cfset x = "s3-ap-southeast-1">
		<cfelseif arguments.location EQ "ap-northeast-1">
			<cfset x = "s3-ap-northeast-1">
		<cfelseif arguments.location EQ "sa-east-1">
			<cfset x = "s3-sa-east-1">
		</cfif> 
		<!--- Append amazon.com --->
		<cfset x = x & ".amazon.com">

		<!--- added 12/3/14....Kind of crude, but should work for a minute --->	
		<cfif arguments.location EQ "dreamhost">
			<cfset x = "objects.dreamhost.com">
		</cfif>
				
		<!--- Return --->
		<cfreturn x />

but I"m not able to verify (make) the connection. As I understand it, and have some experience, the inner working of this cloud storage are the same/compatible with S3 (might be running on Eucalyptus, have to confirm that still).

Has anyone done this or can anyone suggest what I have to do next? I know that’s a pretty vague question, but I’m not much of a CF coder and everything looks like it should work to me…

Thanks!

Which version of Razuna are you using? If you are using 1.7 the endpoints are defined in the S3.cfc file in the getS3Host method. We use the endpoints to make requests to the AWS API. Not sure if objects.dreamhost.com can replace the AWS endpoints as the requests will fail it appears to me unless there is some defined way of forwarding the requests to the AWS servers via that URL.

Please also see http://wiki.razuna.com/display/ecp/Amazon+Web+Services for all the setup that is needed to integrate Razuna with AWS. We have not tested with Dreamhost so can’t guarantee your modifications will work.

Additionally to what Harkirat said, if Dreamhost has an 100% compatible API to S3 than it should just work with the existing code. As pointed out you might have to add the host in the code. Let us know if it works and please provide access to the changes so we can merge it back to the product for everyone to enjoy.

Thank you for your contribution.

Thanks for the prompt replies!

More research tells me that the service I’m trying to connect to is built on Ceph but also “provides Amazon S3 and OpenStack Swift compatible interfaces to the RADOS object store. - See more at:
http://ceph.com/ceph-storage/object-storage/#sthash.mKQlAO6n.dpuf” …so it looks like it can be done, but just not as easily as I had originally thought.

Do you guys think it would be enough to roughly replace “amazonaws.com” with “dreamhosts.com”?..although that probably isn’t exactly right, it looks kind of promising…

No deal.

I swapped out the dreamhost URL for the amazon one and gave it a try. I get the following message when attempting to validate:

We could not validate your credentials!
AmazonS3: dreamhost

So it looks like it isn’t even making a connection to anything on the other end?

As mentioned, we never implemented Dreamhost. Can’t really help you there. However, I’m sure if you dig into it and than let us know what is needed we can be of some more help.

I have 1.7 installed from here and I see its still using the OpenBD S3 integration. According to the docs, when using an Amazon clone, put in the full domain for the region parameter.

So the only change required is the one to dsp_pref_global_storage.cfm and in there put the full base URL to the S3 compatible endpoint. In this case, that would be:

    <!--- added 12/3/14.... --->
<option value="https://objects.dreamhost.com/"<cfif application.razuna.awslocation EQ "https://objects.dreamhost.com/"> selected="selected"</cfif>>DreamHost Cloud</option>

This worked on my Amazon clone

Thanks for the reply!

I’d given up on this and gone in a different, equally unsuccessful
direction since then. I’ll try this later today and report back.

Are there any new insights related on this?

There is no “new insight” on this, as we have several customers using Amazon S3 successfully every day.

In our Company we are using a self hostet S3 storage 100% compatible to S3 standard. If there is no way to connect to s3.xyz.de instead of s3.amazonaws.com I can’t use this software. I’ve tried to replace all amazon strings with xyz and it still tries to connect amazon…