为 Deno Subhosting 推出 KV 备份
Subhosting 允许您在安全的沙箱中以编程方式运行来自多用户的不受信任的 JavaScript 代码,而无需管理复杂的 инфраструктура。自从自助服务发布以来,许多客户使用 Subhosting 来托管靠近用户的电子商务店面,为低代码工作流构建器提供代码级定制逃生舱口,甚至只是转售无服务器边缘函数。
今天,我们很高兴地宣布 KV 备份现已可用于 Subhosting。此功能为您和您的用户提供了改进的数据持久性,因为您现在可以将 KV 数据库持续备份到您自己的 S3 兼容对象存储,使用时间点恢复等等。
让我们深入了解如何使用此功能。
为您的用户提供简单、持久的数据存储
您的用户可能希望向他们的代码添加数据持久性。虽然他们可以导入任意数量的 npm
包来连接到数据存储,但最简单的方法是使用内置的 KV API
const kv = await Deno.openKv();
这让您的用户可以跳过配置新的数据库实例和管理 API 密钥,直接投入编写代码。但是请注意,要为您的用户启用 KV,您需要以编程方式创建一个 KV 数据库,然后将其附加到新的部署。
设置 KV 数据库
在我们向您展示如何对 KV 数据库执行备份操作之前,让我们首先在您的组织中使用 POST /organizations/{organizationId}/databases
创建一个。
import { assert } from "jsr:@std/assert/assert";
const orgId = "your-organization-id";
const orgToken = "your-organization-token";
// Create a new database in your organization
const res = await fetch(
`https://api.deno.com/v1/organizations/${orgId}/databases`,
{
method: "POST",
headers: {
"Authorization": `Bearer ${orgToken}`,
},
body: JSON.stringify({
description: "my database",
}),
},
);
assert(res.ok);
// You can get database ID from response body
const { id: databaseId } = await res.json();
console.log(databaseId);
启用 KV 备份
一旦您拥有 KV 数据库,您可以使用 POST /databases/{databaseId}/database_backups
启用备份。以下示例展示了如何启用备份到 S3 兼容对象存储,在本例中为 Google Cloud Storage。
import { assert } from "jsr:@std/assert/assert";
const ACCESS_KEY_ID = Deno.env.get("ACCESS_KEY_ID")!;
const SECRET_ACCESS_KEY = Deno.env.get("SECRET_ACCESS_KEY")!;
const orgToken = "your-organization-token";
// Database ID you got from the previous step
const databaseId = "database-id";
const res = await fetch(
`https://api.deno.com/v1/databases/${databaseId}/database_backups`,
{
method: "POST",
headers: {
"Authorization": `Bearer ${orgToken}`,
},
body: JSON.stringify({
kind: "s3",
endpoint: "https://storage.googleapis.com",
bucketName: "test-kv-backup",
bucketRegion: "us-central1",
accessKeyId: ACCESS_KEY_ID,
secretAccessKey: SECRET_ACCESS_KEY,
prefix: "backup/",
}),
},
);
assert(res.ok);
// You can get database backup ID from response body
const { id: databaseBackupId } = await res.json();
console.log(databaseBackupId);
然后,您可以使用 GET /database_backups/{databaseBackupId}
获取备份的状态以及其他信息。
import { assert } from "jsr:@std/assert/assert";
const orgToken = "your-organization-token";
// Database backup ID you got from the previous step
const databaseBackupId = "database-backup-id";
const res = await fetch(
`https://api.deno.com/v1/database_backups/${databaseBackupId}`,
{
headers: {
authorization: `Bearer ${orgToken}`,
},
},
);
assert(res.ok);
console.log(await res.json());
// You would see something like:
// {
// id: "database-id",
// kind: "s3",
// endpoint: "https://storage.googleapis.com",
// bucketName: "test-kv-backup",
// bucketRegion: "us-central1",
// accessKeyId: "YOUR_ACCESS_KEY_ID",
// prefix: "backup/",
// status: {
// code: "active"
// }
// }
如果您忘记了数据库备份 ID 怎么办?不用担心,您可以调用 GET /databases/{databaseId}/database_backups
端点以列出数据库的所有备份。
import { assert } from "jsr:@std/assert/assert";
const orgToken = "your-organization-token";
const databaseId = "database-id";
const res = await fetch(
`https://api.deno.com/v1/databases/${databaseId}/database_backups`,
{
headers: {
authorization: `Bearer ${orgToken}`,
},
},
);
assert(res.ok);
console.log(await res.json());
// You would see something like:
// [
// {
// id: "database-id",
// kind: "s3",
// endpoint: "https://storage.googleapis.com",
// bucketName: "test-kv-backup",
// bucketRegion: "us-central1",
// accessKeyId: "YOUR_ACCESS_KEY_ID",
// prefix: "backup/",
// status: {
// code: "active"
// }
// }
// ]
请注意,目前单个数据库只能启用一个备份。这意味着如果您想使用不同的配置设置更新备份、备份到不同的目标或修复配置错误的凭据,您首先需要禁用现有备份。您可以使用 DELETE /database_backups/{databaseBackupId}
来执行此操作。
import { assert } from "jsr:@std/assert/assert";
const orgToken = "your-organization-token";
const databaseBackupId = "database-backup-id";
const res = await fetch(
`https://api.deno.com/v1/database_backups/${databaseBackupId}`,
{
method: "DELETE",
headers: {
authorization: `Bearer ${orgToken}`,
},
},
);
assert(res.ok);
之后,您可以使用新设置启用新备份。
使用备份数据的高级用法
您可以使用 denokv
工具管理您的备份数据。例如,您可以将数据同步到本地 SQLite 文件并查看或检出可恢复的点。有关更多详细信息,请参阅 denokv
文档。
接下来是什么
使用 Deno Subhosting 可以轻松构建一个安全部署和运行不受信任代码的平台。您可以在几周而不是几个月内启动您的集成平台、低代码解决方案、应用市场等,而且只需一小部分成本。
我们计划继续投入,以确保 Deno Subhosting 是安全运行第三方不受信任代码的最简单方法,以便您可以继续专注于为您的用户构建价值。
🚨️ 阅读更多关于 Deno Subhosting 的信息 🚨️