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

Node.js中使用Middy从SSM读取值失败,请求协助排查

问题分析与修复方案

错误原因

Lambda抛出的TypeError: Cannot read properties of undefined (reading 'Parameter'),核心问题出在middy的ssm中间件配置和参数访问逻辑上:

  1. 错误的参数结构访问:当setToContext: true时,ssm中间件会直接将SSM参数的值存入handler.context.botToken,而非返回完整的SSM响应对象(即{ Parameter: { Value: 'xxx' } }),所以你访问Parameter.Value会触发undefined错误。
  2. SSM参数路径配置错误:如果process.env.BOT_TOKEN存储的不是SSM参数的完整路径(如/your-app/slack/bot-token),而是Token本身,中间件会尝试去SSM中查找名称等于该Token的参数,导致获取失败,handler.context.botToken变为undefined。

修复步骤

步骤1:修正参数访问逻辑

无论SSM参数是否正确获取,先修正before中间件的参数读取代码:

.before(async (handler) => {
  // 直接使用handler.context.botToken,它已经是SSM参数的实际值
  const botToken = handler.context.botToken;
  if (!botToken) {
    throw new Error("Failed to retrieve bot token from SSM");
  }
  console.log(`Retrieved bot token: ${botToken}`);
  initializeClient(botToken);
});

步骤2:确认SSM参数配置

  • 确保process.env.BOT_TOKEN存储的是SSM参数的完整路径,而非Token本身;
  • 给Lambda函数添加IAM权限,允许调用ssm:GetParameter(若参数加密,还需kms:Decrypt权限)。

可选:如果无需SSM存储Token

若你直接用环境变量存储Token,可移除ssm中间件,简化代码:

// 初始化Slack客户端
initializeClient(process.env.BOT_TOKEN);

// 仅保留必要的中间件
export const handler = middy(handlePipelineEvent)
  .use(doNotWaitForEmptyEventLoop());

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 18:07:09