亚马逊S3地区-Coldfusion

时间:2019-03-11 12:20:47

标签: amazon-web-services amazon-s3 coldfusion

我的s3帐户具有不同的存储桶,其中有些属于欧盟区域,有些属于美国区域。通过Coldfusion连接到s3时如何指定区域。因为现在我只能访问美国地区的存储桶(我仅使用秘密和访问密钥连接到s3)。 我的s3组件初始化函数如下;

<cffunction name="init" access="public" returnType="s3" output="false">
    <cfargument name="accessKeyId" type="string" required="true">
    <cfargument name="secretAccessKey" type="string" required="true">
    <cfset variables.accessKeyId = arguments.accessKeyId>
    <cfset variables.secretAccessKey = arguments.secretAccessKey>
    <cfreturn this>
</cffunction>

2 个答案:

答案 0 :(得分:2)

S3存储桶名称在所有AWS中都是唯一的。使用内置CFML支持调用S3时,未指定区域。 AWS会自动将请求从您的CFML应用路由到正确的区域。

在ColdFusion 2018 Update 2之前,ColdFusion S3集成仅与支持较旧的v2签名样式的区域一起使用,以向AWS发出请求。 ColdFusion 2018 Update 2引入了对v4签名的支持,所有区域都支持该签名。如果您使用的是较旧版本的ColdFusion,则只能向支持v2签名的区域发出S3请求-这意味着区域在2016年之前上线。大多数美国区域在2016年之前上线,而大多数欧盟区域则未上线。 / p>

如果您使用的是CF 2018 Update 2之前的ColdFusion版本,则需要使用AWS Java SDK向需要v4签名的区域发出S3请求,或者使用v4方法手动签署S3请求。我不建议该路线。使用AWS Java SDK非常简单。我有许多关于如何在my blog上使用它的示例。

答案 1 :(得分:0)

S3存储桶名称在所有aws存储桶中都是唯一的。 仅在创建存储区时,您需要提供区域,并且所有对象都将从同一区域中创建和访问(在创建或访问对象时,您只需要提供存储区而不是区域)。

在冷融合中,您可以使用属性“ s3.defaultLocation”在应用程序级别定义默认位置,或者在使用属性storeLocation创建存储桶时定义默认位置。 例如  1.应用程序级别this.se.defaultLocation = "eu-west-1"上的默认区域  2.在创建存储区<cfdirectory action="create" directory="s3://bucketName" storeLocation="eu-west-1" storeacl="#perms#">

时指定区域

在创建的存储桶中创建文件(无需指定区域): <cffile action="write" file="s3://bucketName/somefile.txt" output="sdgkjfcskbkcjsa" />

列出存储桶中的文件(无需指定区域): <cfdirectory action="list" directory="s3://bucketName" name="tmp"> <cfdump var="#tmp#"/>

即使AWS的新区域也可以与旧版本的ColdFusion一起很好地工作。 我曾尝试使用colfusin 2016和2018以及AWS的新区域。