亚马逊AWS官方博客

Amazon S3 现已在 Vercel Marketplace 和 v0 by Vercel 上推出

在 Vercel 上构建 Web 和人工智能应用程序的开发人员现在可以直接从 Vercel Marketplace 和 v0 添加 Amazon S3 存储资源,将 S3 的耐用性、可扩展性和性能与 Vercel 预置工作流程的便利性相结合。从今天起,包括 Amazon S3 表类数据存储服务和 Amazon S3 Vectors 在内的 Amazon Simple Storage Service(Amazon S3)将在 Vercel Marketplace 和 v0 by Vercel 上原生提供,涵盖三种不同的工作负载:日常存储、分析和人工智能。

为什么这很重要
数百万开发人员在 Vercel 上构建、部署和扩展 Web 和人工智能应用程序。存储对于提高应用程序的性能至关重要,但之前对其进行预置需要导航到 AWS 管理控制台来配置策略和凭证。现在,S3 存储直接集成到 Vercel 开发人员体验中,资源预置和连接配置自动处理。再加上 Amazon Aurora、Amazon DynamoDB 和 Amazon OpenSearch 无服务器的现有集成,您可以在 Vercel 中获得完整的应用程序堆栈(从数据库层到对象、向量和开放表存储),所有这些都集中在一个 AWS 账户中,只需一张账单。

每个应用程序的存储

  • S3 通用存储桶:存储几乎无限量的对象,包括用于数据湖、云原生应用程序和移动应用程序的文件、图像、视频和文档。S3 提供最耐用的云端存储,默认情况下旨在提供 99.999999999%(11 个 9)的数据耐用性和 99.99% 的可用性。
  • S3 表类数据存储服务:完全托管的 Apache Iceberg 存储针对分析进行了优化,具有自动表维护和压缩功能。可以直接从任何兼容 Iceberg REST 目录 API 的引擎(包括 DuckDB)中查询 S3 表类数据存储服务。
  • S3 Vectors:专为检索增强生成(RAG)和语义搜索等人工智能应用程序构建的向量存储和查询,可将上传、存储和查询向量的成本降低多达 90%。

Vercel Marketplace 上的 AWS 页面,提供 100 美元的免费 AWS 服务抵扣金、无服务器规模和“安装”按钮

图 1 – Vercel Marketplace 上的 AWS 页面。

开始使用
在 Vercel 控制面板中,转到“存储”选项卡,然后选择“创建”。选择 AWS,选择您的 S3 存储桶类型,选择“区域”,然后创建存储桶。预置需要几秒钟。

图 2 – 通过选择区域和名称,在 Vercel 中创建 Amazon S3 通用存储桶。

将存储桶连接到项目,然后使用 Vercel CLI 拉取环境变量:

vercel link 
vercel env pull .env.local

该集成注入了 AWS_REGION、AWS_ROLE_ARN、AWS_RESOURCE_ARN 以及 S3_BUCKET_NAME、S3_TABLE_BUCKET_NAME 或 S3_VECTOR_BUCKET_NAME 等存储桶名称。在运行时,来自 @vercel/functions/oidc 的 awsCredentialsProvider 与 AWS Security Token Service(AWS STS)交换短期的 OIDC 令牌,换取限于您的资源的临时凭证。任何地方都不存储任何静态密钥。

使用 S3 进行对象存储
这个 Next.js 路由将文件上传到通用存储桶:

import { S3Client, PutObjectCommand } from "@aws-sdk/client-s3";
import { awsCredentialsProvider } from "@vercel/functions/oidc";

const s3 = new S3Client({
  region: process.env.AWS_REGION,
  credentials: awsCredentialsProvider({
    roleArn: process.env.AWS_ROLE_ARN,
  }),
});

export async function POST(request) {
  const formData = await request.formData();
  const file = formData.get("file");

  await s3.send(new PutObjectCommand({
    Bucket: process.env.S3_BUCKET_NAME,
    Key: file.name,
    Body: Buffer.from(await file.arrayBuffer()),
    ContentType: file.type,
  }));

  return Response.json({ success: true });
}

在同一个客户端上使用 ListObjectsV2Command 和 GetObjectCommand 来列出和读取对象。

使用 S3 表类数据存储服务进行分析
S3 表类数据存储服务提供专为分析而构建的 S3 存储,旨在随着数据量的增长自动优化查询性能。它们提供完全托管的 Apache Iceberg 表,具有自动表维护和压缩功能,并且可以与任何兼容 Apache Iceberg REST Catalog 的引擎一起使用。您可以在 Vercel 函数中使用 DuckDB 进行轻量级查询。此示例通过其 ARN 附加表存储桶并运行聚合查询:

import { DuckDBInstance } from "@duckdb/node-api";
import { awsCredentialsProvider } from "@vercel/functions/oidc";

const creds = await awsCredentialsProvider({
  roleArn: process.env.AWS_ROLE_ARN,
})();

const db = await DuckDBInstance.create();
const conn = await db.connect();

await conn.run("INSTALL aws; LOAD aws; INSTALL httpfs; LOAD httpfs; INSTALL iceberg; LOAD iceberg;");

await conn.run(`
  CREATE SECRET s3cred (
    TYPE s3,
    KEY_ID '${creds.accessKeyId}',
    SECRET '${creds.secretAccessKey}',
    SESSION_TOKEN '${creds.sessionToken}',
    REGION '${process.env.AWS_REGION}'
  );
`);

await conn.run(`
  ATTACH '${process.env.AWS_RESOURCE_ARN}' AS s3tables (
    TYPE iceberg,
    ENDPOINT_TYPE s3_tables
  );
`);

const rows = await (await conn.run(`
  SELECT town_city, AVG(median_price) AS avg_price
  FROM s3tables."${process.env.S3_TABLES_NAMESPACE}".town_monthly
  GROUP BY town_city
  ORDER BY avg_price DESC
  LIMIT 10
`)).getRowObjects();

如果您在 Next.js 路由中运行 DuckDB,请将 @duckdb/node-api 添加到 next.config.mjs 中的 serverExternalPackages 中,这样原生绑定就不会捆绑在一起。

使用 S3 Vectors 进行向量搜索
S3 Vectors 为智能体、人工智能推理以及存储在 Amazon S3 中的内容的语义搜索提供专用、成本优化的向量存储服务。S3 Vectors 在没有单独向量数据库的情况下为存储和查询向量提供原生支持,但它不生成向量。使用您选择的模型创建嵌入,然后在索引中查询最接近的匹配项:

import { S3VectorsClient, QueryVectorsCommand } from "@aws-sdk/client-s3vectors";
import { awsCredentialsProvider } from "@vercel/functions/oidc";

const vectors = new S3VectorsClient({
  region: process.env.AWS_REGION,
  credentials: awsCredentialsProvider({
    roleArn: process.env.AWS_ROLE_ARN,
  }),
});

export async function POST(request) {
  const { embedding } = await request.json();

  const result = await vectors.send(new QueryVectorsCommand({
    vectorBucketName: process.env.S3_VECTOR_BUCKET_NAME,
    indexName: "documents",
    queryVector: { float32: embedding },
    topK: 5,
    returnMetadata: true,
  }));

  return Response.json({ matches: result.vectors });
}

使用 v0 by Vercel 构建
在 v0 中,描述您想要构建的内容,它会提供正确的资源。要求构建“用户使用 AWS 上传图像的照片库”就会得到通用存储桶,要求构建“回答我的 PDF 中问题的支持机器人”就会得到 S3 Vectors,要求构建“我的点击流数据的分析控制面板”就会得到 S3 表类数据存储服务。然后 v0 会配置连接并生成工作代码。

使用连接的 Amazon S3 Vectors 集成以及预览面板中生成的 PDF 支持机器人应用程序进行 v0 聊天

图 3 – v0 使用连接的 Amazon S3 Vectors 和预览面板中的应用程序,根据自然语言提示生成 PDF 支持机器人。

将 S3 与 AWS 数据库相结合
Vercel 上的每个 AWS 服务共享相同的账户和身份验证模型,因此您无需额外设置即可将它们组合在一起。例如,将文件元数据存储在 Aurora 中,而文件存储在 S3 中,或者将文档文本存储在 DynamoDB 中,而嵌入存储在 S3 Vectors 中,用于 RAG 检索。

将 Vercel 与您的 AWS 账户结合使用
您可以通过集成创建一个新的 AWS 账户,该账户支持用于构建和测试的 S3 功能。您还可以关联现有的 AWS 账户,进而使用您的全套 S3 和 AWS 功能并保留当前账单。如果您关联现有的 AWS 账户,Vercel 仅用于您通过该平台创建的新存储桶。由于每个 S3 资源都存在于您自己的 AWS 账户中,因此您可以保留 AWS 原生工具和单一存储管理位置。

定价和可用性
集成不收取任何费用,您需要为使用的资源按标准 Amazon S3 定价付费。通过 Vercel 创建的新的 AWS 账户将获得 100 美元的服务抵扣金,有效期为六个月。Amazon S3,包括 S3 表类数据存储服务和 S3 Vectors,可从 v0 和 Vercel Marketplace 获得,适用于 Vercel 支持的所有商业 AWS 区域。要开始使用,请访问 v0 或 Vercel Marketplace 上的 AWS 页面。

加入对话
如果您想调用 API、搜索文档、查找区域可用性并查看有关此新功能的故障排除,请尝试在首选人工智能工具中使用 AWS MCP 服务器和插件。分享您对 AWS re:Post for Amazon S3 的反馈。

— Daniel