求适用于Supabase边缘函数的AWS SDK v3 ESM导入映射URL
在Supabase边缘函数中配置AWS SDK v3的导入映射(用于SES邮件发送)
你的原有配置无效,核心原因是AWS SDK v3采用模块化拆分设计,不存在统一的aws-sdk入口包,必须单独引入所需的具体服务模块(比如SES相关的客户端、命令类)。以下是正确的配置方案:
正确的import_map.json配置
{ "imports": { "@aws-sdk/client-ses": "https://esm.sh/@aws-sdk/client-ses@3.422.0?target=deno", "@aws-sdk/util-utf8": "https://esm.sh/@aws-sdk/util-utf8@3.422.0?target=deno", "@aws-sdk/signature-v4": "https://esm.sh/@aws-sdk/signature-v4@3.422.0?target=deno" } }
关键配置说明
- 必须指定具体模块:比如
@aws-sdk/client-ses是专门处理SES邮件发送的客户端模块,不能用旧版SDK的aws-sdk包名 - 强制Deno兼容:添加
target=deno参数,确保esm.sh输出的代码适配Supabase边缘函数的Deno运行环境 - 指定固定版本:建议使用具体版本号(如@3.422.0),避免最新版本可能出现的兼容性问题
- 依赖自动处理:esm.sh会自动解析模块依赖,但如果遇到加载失败,可像示例中一样显式声明核心依赖(如签名模块)
边缘函数中使用示例
import { SESClient, SendEmailCommand } from "@aws-sdk/client-ses"; export default async function handler(req: Request) { // 初始化SES客户端 const sesClient = new SESClient({ region: "us-east-1", // 替换为你的AWS区域 credentials: { accessKeyId: Deno.env.get("AWS_ACCESS_KEY_ID")!, secretAccessKey: Deno.env.get("AWS_SECRET_ACCESS_KEY")! } }); // 构造发送邮件命令 const sendCommand = new SendEmailCommand({ Source: "your-sender@example.com", // 替换为已验证的发件邮箱 Destination: { ToAddresses: ["recipient@example.com"] }, // 收件人邮箱 Message: { Subject: { Data: "Supabase边缘函数发送的测试邮件" }, Body: { Text: { Data: "这是通过AWS SES发送的测试内容" } } } }); try { const result = await sesClient.send(sendCommand); return new Response(JSON.stringify({ success: true, messageId: result.MessageId }), { status: 200 }); } catch (err) { return new Response(JSON.stringify({ success: false, error: err.message }), { status: 500 }); } }
内容的提问来源于stack exchange,提问作者Lonare
相关产品推荐
相关产品推荐

