You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Amplify Gen2函数中使用generateClient保存记录及部署配置问题

解决Amplify Gen2函数部署时传递amplify_outputs.json的问题

针对你遇到的本地amplify_outputs.json无法在部署后的Lambda函数中使用的问题,以下是几种可行的解决方案:

方案一:使用Amplify内置的自动配置(推荐)

Amplify在部署函数时,会自动将必要的配置注入到Lambda的环境变量中,无需手动导入amplify_outputs.json。直接修改你的handler代码即可:

import { Amplify, generateClient } from 'aws-amplify/api';
import type { Schema } from '../amplify/data/resource'; // 根据你的Schema实际路径调整

export const handler = async (event) => {
  // 无需手动调用Amplify.configure(),Amplify会自动加载部署环境的配置
  const client = generateClient<Schema>();

  const emailCreatedResponse = await client.models.NewsletterMail.create({
    email: event.arguments.email,
  });

  // ... 你的发送邮件API逻辑
};

原理:Amplify会在函数运行时自动读取注入的环境变量,完成配置初始化,完全不需要依赖本地生成的配置文件。

方案二:将配置内容作为环境变量注入

如果需要手动控制配置,可以在amplify/backend.ts中把amplify_outputs.json的内容序列化后作为环境变量传递给函数:

  1. 在backend.ts中导入并配置函数环境变量:
import { defineFunction } from '@aws-amplify/backend';
import amplifyOutputs from '../amplify_outputs.json';

export const sendNewsletterEmail = defineFunction({
  // 其他函数配置(如路径、运行时等)
  environment: {
    AMPLIFY_CONFIG: JSON.stringify(amplifyOutputs),
  },
});
  1. 在函数handler中读取并使用配置:
import { Amplify, generateClient } from 'aws-amplify/api';
import type { Schema } from '../amplify/data/resource';

export const handler = async (event) => {
  const amplifyConfig = JSON.parse(process.env.AMPLIFY_CONFIG || '{}');
  Amplify.configure(amplifyConfig);
  
  const client = generateClient<Schema>();

  const emailCreatedResponse = await client.models.NewsletterMail.create({
    email: event.arguments.email,
  });

  // ... 你的发送邮件API逻辑
};

方案三:直接调用AppSync API(跳过generateClient)

可以使用AWS SDK的AppSyncClient,直接读取Amplify部署时自动设置的环境变量来初始化客户端:

import { AppSyncClient, gql } from '@aws-sdk/client-appsync';
import { fromEnv } from '@aws-sdk/credential-provider-env';

export const handler = async (event) => {
  const appSyncClient = new AppSyncClient({
    url: process.env.APPSYNC_API_ENDPOINT || '',
    credentials: fromEnv(),
    region: process.env.AWS_REGION || '',
  });

  const createEmailMutation = gql`
    mutation CreateNewsletterMail($email: String!) {
      createNewsletterMail(input: {email: $email}) {
        email
        confirmed
      }
    }
  `;

  const response = await appSyncClient.send({
    query: createEmailMutation,
    variables: { email: event.arguments.email },
  });

  // ... 你的发送邮件API逻辑
};

原理:Amplify部署时会自动将AppSync端点、区域等信息设置为Lambda的环境变量,直接读取即可完成客户端初始化。

内容的提问来源于stack exchange,提问作者J SanF

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 06:53:24