0

私は実行中Coldfusion8で、Amazon S3 Rest Wrapper CFCを使用して EU バケットでセットアップしようとしています。

米国では cfc を使用してバケットをセットアップできますが、EU の設定に変更するたびに機能しません。

使用されている関数は次のとおりです。

<cffunction name="putBucket" access="public" output="false" returntype="boolean" description="Creates a bucket.">
    <cfargument name="bucketName" type="string" required="true">
    <cfargument name="acl" type="string" required="false" default="public-read">
    <cfargument name="storageLocation" type="string" required="false" default="">

    <cfset var strXML = "">
    <cfset var dateTimeString = GetHTTPTimeString(Now())>
    <cfset var destination = "http://s3.amazonaws.com/">

    <!--- Create a canonical string to send based on operation requested ---> 
    <cfset var cs = "PUT\n\ntext/html\n#dateTimeString#\nx-amz-acl:#arguments.acl#\n/#arguments.bucketName#">

    <cfset var signature = createSignature(cs)>
    <!--- added switch to EU --->
    <cfif arguments.storageLocation EQ "EU">
        <cfset destination = "http://s3-eu-west-1.amazonaws.com/">
    </cfif>

    <!--- Create a proper signature --->
    <cfif compare(arguments.storageLocation,'')>
        <cfsavecontent variable="strXML">
            <CreateBucketConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/"><LocationConstraint>#arguments.storageLocation#</LocationConstraint></CreateBucketConfiguration>
        </cfsavecontent>
    <cfelse>
        <cfset strXML = "">
    </cfif>

    <!--- put the bucket via REST --->
    <cfhttp method="PUT" url="#destination##arguments.bucketName#" charset="utf-8">
        <cfhttpparam type="header" name="Content-Type" value="text/html">
        <cfhttpparam type="header" name="Date" value="#dateTimeString#">
        <cfhttpparam type="header" name="x-amz-acl" value="#arguments.acl#">
        <cfhttpparam type="header" name="Authorization" value="AWS #variables.accessKeyId#:#signature#">
        <cfhttpparam type="body" value="#trim(strXML)#">
    </cfhttp>

    <cfreturn true>
</cffunction>

EU 地域の URL にスイッチを追加しましたが、これも機能しません。

EU でバケットを作成するために何をする必要があるか考えていますか?

編集:
地域の値を修正しました。以外の地域の値を渡すと""、次の行になるため、まだうまくいきません。

 <cfif compare(arguments.storageLocation,'')>
    <cfsavecontent variable="strXML">
       <CreateBucketConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/"><LocationConstraint>#arguments.storageLocation#</LocationConstraint></CreateBucketConfiguration>
     </cfsavecontent>
 <cfelse>
     <cfset strXML = "">
 </cfif>

次のような strXML が生成されます。

 <CreateBucketConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/"><LocationConstraint>#arguments.storageLocation#</LocationConstraint></CreateBucketConfiguration> 

bad requestエラーが再び発生します

4

2 に答える 2

1

ストレージの場所には適切な値を使用する必要があります。API ドキュメントから、これらの値は次のようになると思います。

バケットの優先される地理的な場所。[許可された値: AmazonS3::REGION_US_E1、AmazonS3::REGION_US_W1、AmazonS3::REGION_EU_W1、AmazonS3::REGION_APAC_SE1、AmazonS3::REGION_APAC_NE1]

于 2012-08-10T15:07:58.710 に答える
0

これを Linux で実行している場合は、代わりに S3CMD ツールを使用できます。

sudo apt-get install s3cmd

次に、構成手順を実行するか、ソース管理で構成を構築して維持し、S3 コマンドを作成してサーバーにデプロイする必要があります。

s3cmd --configure

通常、構成には S3 アカウントに関する情報 (特にキー) が含まれます。ファイルを使用する場合は、ファイルに権限を正しく設定して、s3cmd を root として実行する必要がないことを確認してください。

そして、あなたのアプリケーションで

<cfexecute name="s3cmd" arguments="mb s3://my-new-bucket-name">
于 2012-08-10T12:50:06.557 に答える