簡體   English   中英

如何使用Coldfusion在Amazon S3上創建歐盟存儲桶?

[英]how to create a EU bucket on Amazon S3 using Coldfusion?

我正在運行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,但這也不起作用。

知道要在歐盟創建水桶需要做什么嗎?

編輯
我已經確定了區域價值。 仍然無法奏效,因為如果我傳遞了除""以外的區域值,則此行:

 <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錯誤

您需要為存儲位置使用適當的值 從API文檔中,我相信這些值是:

鏟斗的首選地理位置。 [允許的值:AmazonS3 :: REGION_US_E1,AmazonS3 :: REGION_US_W1,AmazonS3 :: REGION_EU_W1,AmazonS3 :: REGION_APAC_SE1,AmazonS3 :: REGION_APAC_NE1]

如果您在Linux上運行此程序,則可以選擇使用S3CMD工具

sudo apt-get install s3cmd

然后,您將需要運行配置過程或什至更好,在源代碼管理中構建和維護配置並部署到執行S3命令的服務器上

s3cmd --configure

通常,配置包括有關您的S3帳戶的信息(特別是密鑰)。 確保您使用的文件正確設置了該文件的權限,因此不必以超級用戶身份執行s3cmd

然后在你的應用程序中

<cfexecute name="s3cmd" arguments="mb s3://my-new-bucket-name">

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM