Amazon s3 区域 - coldfusion
Amazon s3 Region - 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>
S3 存储桶名称在整个 AWS 中是唯一的。当您使用内置 CFML 支持调用 S3 时,您无需指定区域。 AWS 自动将来自您的 CFML 应用程序的请求路由到正确的区域。
在 ColdFusion 2018 更新 2 之前,ColdFusion S3 集成仅适用于支持向 AWS 发出请求的旧 v2 签名样式的区域。 ColdFusion 2018,更新 2 引入了对 v4 签名的支持,所有区域都支持该签名。如果您使用的是旧版本的 ColdFusion,您只能向支持 v2 签名的区域发出 S3 请求——这意味着这些区域在 2016 年之前上线。大多数美国地区在 2016 年之前上线,而大多数欧盟地区没有。
如果您使用的是 CF 2018 Update 2 之前的 ColdFusion 版本,则需要使用 AWS Java SDK 向需要 v4 签名的区域发出 S3 请求,或者签署 S3使用 v4 方法手动请求。我不推荐那条路线。使用 AWS Java SDK 非常简单。我有很多关于如何在 my blog.
上使用它的示例
S3 存储桶名称在所有 AWS 存储桶中是唯一的。
只有在创建存储桶时,您才需要提供区域,并且所有对象都将从同一区域创建和访问(在创建或访问对象时,您只需提供存储桶而不是区域)。
在 ColdFusion 中,您可以使用 属性 "s3.defaultLocation" 在应用程序级别定义默认位置,或者在使用属性 storeLocation 创建存储桶时定义默认位置。
例如
- 应用程序级别的默认区域
this.se.defaultLocation = "eu-west-1"
- 创建桶时指定区域
<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 旧版本兼容。
我已尝试使用 ColdFusion 2016 和 2018 以及 AWS 的新区域。
我的 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>
S3 存储桶名称在整个 AWS 中是唯一的。当您使用内置 CFML 支持调用 S3 时,您无需指定区域。 AWS 自动将来自您的 CFML 应用程序的请求路由到正确的区域。
在 ColdFusion 2018 更新 2 之前,ColdFusion S3 集成仅适用于支持向 AWS 发出请求的旧 v2 签名样式的区域。 ColdFusion 2018,更新 2 引入了对 v4 签名的支持,所有区域都支持该签名。如果您使用的是旧版本的 ColdFusion,您只能向支持 v2 签名的区域发出 S3 请求——这意味着这些区域在 2016 年之前上线。大多数美国地区在 2016 年之前上线,而大多数欧盟地区没有。
如果您使用的是 CF 2018 Update 2 之前的 ColdFusion 版本,则需要使用 AWS Java SDK 向需要 v4 签名的区域发出 S3 请求,或者签署 S3使用 v4 方法手动请求。我不推荐那条路线。使用 AWS Java SDK 非常简单。我有很多关于如何在 my blog.
上使用它的示例S3 存储桶名称在所有 AWS 存储桶中是唯一的。 只有在创建存储桶时,您才需要提供区域,并且所有对象都将从同一区域创建和访问(在创建或访问对象时,您只需提供存储桶而不是区域)。
在 ColdFusion 中,您可以使用 属性 "s3.defaultLocation" 在应用程序级别定义默认位置,或者在使用属性 storeLocation 创建存储桶时定义默认位置。 例如
- 应用程序级别的默认区域
this.se.defaultLocation = "eu-west-1"
- 创建桶时指定区域
<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 旧版本兼容。 我已尝试使用 ColdFusion 2016 和 2018 以及 AWS 的新区域。