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

如何在Serverless中访问SSM变量?

别急,我来帮你一步步解决这个问题——从正确配置SSM参数,到在代码里访问,再到消除部署警告,都给你理清楚:

1. 先确保Serverless.yml的配置正确

首先,你需要在serverless.yml里正确引用SSM参数,同时给部署角色加上必要的权限,这是避免警告的关键:

引用SSM参数

在custom块里定义变量,根据参数是否加密选择语法:

custom:
  # 加密的SSM参数(用KMS加密),要加~true表示需要解密
  encryptedDbPassword: ${ssm:/my-service/prod/db-password~true}
  # 未加密的普通参数
  apiEndpoint: ${ssm:/my-service/prod/api-endpoint}

配置IAM权限(必加,否则会出警告)

Serverless部署时使用的IAM角色需要有访问SSM参数的权限,否则框架无法验证参数存在,会抛出警告。在provider块里添加权限:

provider:
  name: aws
  runtime: nodejs18.x # 换成你用的运行时
  iamRoleStatements:
    - Effect: Allow
      Action:
        - ssm:GetParameter
        - ssm:GetParameters
      # 限定参数路径,遵循最小权限原则,不要用通配符*除非必要
      Resource: "arn:aws:ssm:${aws:region}:${aws:accountId}:parameter/my-service/prod/*"
2. 在代码/配置中访问变量

有两种常用的访问方式,看你的需求:

方式一:通过环境变量注入到Lambda

把SSM参数注入到Lambda的环境变量里,代码里直接用process.env读取:

provider:
  environment:
    DB_PASSWORD: ${self:custom.encryptedDbPassword}
    API_ENDPOINT: ${self:custom.apiEndpoint}

然后在Lambda代码里(以Node.js为例):

exports.handler = async (event) => {
  // 直接读取环境变量
  const dbPassword = process.env.DB_PASSWORD;
  const apiUrl = process.env.API_ENDPOINT;
  
  // 你的业务逻辑
  return { statusCode: 200, body: JSON.stringify({ apiUrl }) };
};

方式二:直接在Serverless配置中使用

如果是要在配置里用(比如函数内存、超时时间),可以直接引用:

functions:
  mainFunction:
    handler: src/handler.main
    memorySize: ${ssm:/my-service/prod/function-memory} # 直接用SSM参数设置内存
    timeout: ${ssm:/my-service/prod/function-timeout}
3. 消除部署警告的常见排查点

如果部署时出现警告,大概率是以下问题:

  • 权限缺失:刚才的IAM权限没加全,或者Resource路径写错了,导致Serverless框架无法获取参数信息。
  • 参数路径错误:检查SSM参数的名称/路径是否和配置里一致,注意区分大小写,还有区域是否和部署区域匹配。
  • 加密参数未加~true:如果参数是KMS加密的,没加~true的话,框架无法解密,会抛出警告。
  • 参数不存在:确认AWS控制台里的SSM参数确实存在,没有被删除。

比如如果警告提示Unable to fetch SSM parameter at path...,先去AWS IAM控制台检查部署角色的权限,再核对SSM参数的路径和区域。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 08:25:20