是否可以将对象从一个云对象存储实例复制到另一个。桶在不同的区域

is it possible to copyObject from one cloud object storage instance to another. The buckets are in different regions

我想使用node sdk 在两个Cloud Object Storage 实例之间实现备份和恢复机制。我已将服务 ID 添加到实例并为服务 ID 添加权限以访问我要写入的实例中存在的存储桶。桶将在不同的区域。我已经尝试了各种传统和非传统私有端点和 public 来实现这一点,但我通常会被拒绝访问。

我想用 sdk 做的事情是否可行?如果可以,有人可以指出我正确的方向吗?

var config = {
 "apiKeyId": "xxxxxxxxxxxxxxxxxxxxxxx-xxxxxxxxxxxxxxxxxxx",
 "endpoint": "s3.eu-gb.objectstorage.softlayer.net",
 "iam_apikey_description": "Auto generated apikey during resource-key operation for Instance - crn:v1:bluemix:public:cloud-object-storage:global:a/xxxxxxxxxxx:xxxxxxxxxxx::",
 "iam_apikey_name": "auto-generated-apikey-xxxxxxxxxxxxxxxxxxxxxx",
 "iam_role_crn": "crn:v1:bluemix:public:iam::::serviceRole:Writer",
 "iam_serviceid_crn": "crn:v1:bluemix:public:iam-identity::a/0xxxxxxxxxxxxxxxxxxxx::serviceid:ServiceIdxxxxxxxxxxxxxxxxxxxxxx",
 "serviceInstanceId": "crn:v1:bluemix:public:cloud-object-storage:global:a/xxxxxxxxxxxxxxxxxxx:xxxxxxxxxxxxxxxxxxxxxxxxxx::",
"ibmAuthEndpoint": "iam.cloud.ibm.com/oidc/token"

}

只要您不使用基于 KeyProtect 的密钥,只要您能够正确授予请求用户访问权限以便能够读取放置副本的源代码,这就应该有效。

由于一些不直观的术语,这里的细分有点混乱。

一个服务实例是一个桶的集合。拥有多个 COS 实例的主要原因是为了更精细地计费,因为您将为每个实例获得一个单独的行项目。但是,该术语有点误导,因为 COS 是一个真正的多租户系统 - 您实际上并没有提供 COS 的 实例 ,您提供的是一种子帐户在现有系统内。

bucket 用于将您的数据分段到不同的存储位置或存储 classes。其他行为(如 CORS、归档或保留)也作用于存储桶级别。您不希望将您希望扩展的内容(如客户数据)分割到不同的存储桶中,因为一个实例中存在约 1k 个存储桶的限制。 IBM Cloud IAM 将存储桶视为 'resources' 并受 IAM 策略约束。

相反,不需要按位置或 class 分离的数据以及您希望遵守相同 CORS、生命周期、保留或 IAM 策略的数据可以按 前缀。这意味着一堆相似的对象共享一条路径,例如 foo/barfoo/bas 具有相同的 prefix foo/。这有助于列表和组织,但不提供精细的访问控制或任何其他类型的策略类功能。

现在,对于你的问题,答案是肯定的和否定的。如果存储桶在同一个 instance 中,那么没问题。存储桶名称是唯一的,因此只要没有任何二级托管加密(例如 Key Protect),跨存储桶复制就没有问题,即使它们跨越区域。但是请记住,大型对象的复制需要时间,并且 COS 的强一致性可能会导致操作可能 return 在完成之前没有响应的情况。目前不支持跨实例复制。