Cloud Storage
S3 兼容的对象存储,支持预签名 URL、分段上传和范围读取。
Entry 类型
| Kind | 描述 |
|---|---|
config.aws |
AWS 凭据和区域配置 |
cloudstorage.s3 |
S3 存储桶连接 |
AWS 配置
- name: aws_config
kind: config.aws
region: ${env:AWS_REGION}
access_key_id: ${env:AWS_ACCESS_KEY_ID}
secret_access_key: ${env:AWS_SECRET_ACCESS_KEY}
| 字段 | 类型 | 必需 | 描述 |
|---|---|---|---|
region |
string | 是 | AWS 区域。当各部署间不同时,通过 ${env:NAME} 提供 |
access_key_id |
string | 否 | AWS 访问密钥 ID(内联或 ${env:NAME}) |
secret_access_key |
string | 否 | AWS 私有访问密钥(内联或 ${env:NAME}) |
凭据在解码时从环境注册表解析。access_key_id 和 secret_access_key 都必须解析为非空值,静态凭据才会生效;否则使用 AWS SDK 默认凭据链(IAM 角色、实例配置文件等)。
请求由 AWS SDK 使用解析出的凭据以 AWS Signature Version 4 签名。无需任何签名配置。
<field>_env 指令(region_env、access_key_id_env、secret_access_key_env),其解析方式相同。该形式已废弃——请迁移到上文所示的 ${env:NAME} 占位符。
config.aws 条目可在多个基于 AWS 的服务间复用。queue.driver.sqs 通过其 config: 字段引用同一个条目。
S3 存储
- name: files
kind: cloudstorage.s3
bucket: "my-bucket"
config: app.infra:aws_config
| 字段 | 类型 | 必需 | 描述 |
|---|---|---|---|
bucket |
string | 条件 | S3 存储桶名称。当各部署间不同时,通过 ${env:NAME} 提供 |
config |
reference | 是 | AWS 配置 entry 引用 |
endpoint |
string | 否 | S3 兼容服务的自定义端点(内联或 ${env:NAME}) |
S3 兼容服务
对于 MinIO 或其他 S3 兼容服务,设置自定义端点:
- name: local_storage
kind: cloudstorage.s3
bucket: "local-bucket"
config: app.infra:aws_config
endpoint: "http://localhost:9000"
提供端点时,会自动启用路径风格访问。
分段上传
预签名分段上传是提供方的能力,而非运行时特性。cloudstorage.s3 类型实现了它们;不支持分段协议的提供方会让 create_multipart_upload、presigned_part_urls、complete_multipart_upload 和 abort_multipart_upload 以 errors.UNAVAILABLE 失败。
从未完成或中止的上传,其分段会一直被存储并计费。应用会在每条失败路径上执行中止,但客户端崩溃时就没有什么能去执行该中止了。请在存储桶上配置 AbortIncompleteMultipartUpload 生命周期规则作为兜底:
{
"Rules": [
{
"ID": "abort-incomplete-multipart",
"Status": "Enabled",
"Filter": { "Prefix": "" },
"AbortIncompleteMultipartUpload": { "DaysAfterInitiation": 7 }
}
]
}
范围读取
open_reader 通过范围 GET 读取对象,并在每次读取时用 If-Match 固定对象的 ETag。在初始 stat 中不返回 ETag 的提供方会让该调用以 errors.UNAVAILABLE 失败,而忽略 If-Match 的提供方会失去覆盖保护——此时读取无法察觉自己混合了对象的两个版本。
Lua API
参见 Cloud Storage 模块 了解操作方法(list、upload、download、delete、预签名 URL、分段上传、范围读取器)。
另请参阅
- Cloud Storage 模块 - Lua API 参考
- Filesystem - 本地文件系统条目
- Queue - SQS 处理器共享相同的
config.aws条目