了解 R2 中存储数据的位置如何确定,以及控制存储桶中对象物理存储位置的不同可用输入。
创建新存储桶时,数据位置默认设置为 Automatic。目前,此选项根据创建存储桶请求的调用者位置,在最近的可用区域中选择存储桶位置。
位置提示是创建存储桶时可选提供的参数,用于指示您预期数据将被访问的主要地理位置。
当您预期存储桶中数据的绝大部分访问来自与创建存储桶请求不同的位置时,位置提示可能是不错的选择。请记住,位置提示是尽力而为而非保证,应仅作为优化性能的手段,将经常更新的内容放置在更靠近用户的位置。
您可以选择根据您的位置自动在最近的可用区域创建存储桶,或从列表中选择特定位置。
-
在 Cloudflare 仪表板中,前往 R2 object storage(R2 对象存储) 页面。
Go to Overview ↗ -
选择 Create bucket(创建存储桶)。
-
输入存储桶名称。
-
在 Location(位置) 下,保持选择 None 以自动选择,或从列表中选择区域。
-
选择 Create bucket(创建存储桶) 完成存储桶创建过程。
您可以使用 S3 API 通过 LocationConstraint 参数设置位置提示:
await S3.send(
new CreateBucketCommand({
Bucket: "YOUR_BUCKET_NAME",
CreateBucketConfiguration: {
LocationConstraint: "WNAM",
},
}),
);有关其他 S3 SDK 的更多示例,请参阅示例。
支持以下提示位置:
| Hint | Hint description |
|---|---|
| wnam | 北美西部 |
| enam | 北美东部 |
| weur | 西欧 |
| eeur | 东欧 |
| apac | 亚太 |
| oc | 大洋洲 |
位置提示仅在首次创建具有给定名称的存储桶时生效。如果您删除并重新创建同名存储桶,将使用原始存储桶的位置。
管辖区域限制保证存储桶中的对象存储在特定管辖区域内。
当您需要确保数据存储和处理在管辖区域内以满足数据驻留要求(包括 GDPR ↗ 或 FedRAMP ↗ 等本地法规)时,请使用管辖区域限制。
-
在 Cloudflare 仪表板中,前往 R2 object storage(R2 对象存储) 页面。
Go to Overview ↗ -
选择 Create bucket(创建存储桶)。
-
输入存储桶名称。
-
在 Location(位置) 下,选择 Specify jurisdiction(指定管辖区域) 并从列表中选择管辖区域。
-
选择 Create bucket(创建存储桶) 完成存储桶创建过程。
要从 Workers 访问属于某个管辖区域的 R2 存储桶,您需要在 Wrangler 配置文件 的绑定中同时指定管辖区域和存储桶名称:
{
"r2_buckets": [
{
"bindings": [
{
"binding": "MY_BUCKET",
"bucket_name": "<YOUR_BUCKET_NAME>",
"jurisdiction": "<JURISDICTION>"
}
]
}
]
}[[r2_buckets]]
[[r2_buckets.bindings]]
binding = "MY_BUCKET"
bucket_name = "<YOUR_BUCKET_NAME>"
jurisdiction = "<JURISDICTION>"有关入门的更多信息,请参阅从 Workers 使用 R2。
使用 S3 API 或现有 S3 兼容 SDK 与属于已定义管辖区域的 R2 资源交互时,必须在 S3 端点中指定管辖区域:
https://<ACCOUNT_ID>.<JURISDICTION>.r2.cloudflarestorage.com
您可以将管辖区域特定的端点用于任何支持的 S3 API 操作。使用管辖区域端点时,您将无法访问该管辖区域之外的 R2 资源。
以下示例展示如何使用 JavaScript 的 @aws-sdk/client-s3 ↗ 包在 eu 管辖区域创建 R2 存储桶。
import { S3Client, CreateBucketCommand } from "@aws-sdk/client-s3";
const S3 = new S3Client({
endpoint: "https://<account_id>.eu.r2.cloudflarestorage.com",
credentials: {
accessKeyId: "<access_key_id",
secretAccessKey: "<access_key_secret>",
},
region: "auto",
});
await S3.send(
new CreateBucketCommand({
Bucket: "YOUR_BUCKET_NAME",
}),
);有关其他 S3 SDK 的更多示例,请参阅示例。
支持以下管辖区域:
| Jurisdiction | Jurisdiction description |
|---|---|
| eu | 欧盟 |
| fedramp | FedRAMP |
以下服务不与具有指定管辖区域的 R2 资源交互:
- Logpush。作为此限制的解决方法,您可以使用 S3 兼容端点设置 Logpush 作业,将日志存储在您选择的管辖区域的 R2 存储桶中。
R2 存储桶创建后,管辖区域无法更改。