如何在Serverless本地开发时禁用API Key?
如何在Serverless本地开发时禁用API Key验证?
要实现仅在本地离线开发时跳过API Key验证,同时保留部署到AWS时的保护,你可以利用Serverless框架的条件配置和离线环境自带的环境变量批量处理,不用逐个修改函数配置:
具体实现步骤
- 在配置中定义离线环境判断变量,复用Serverless Offline自动生成的
IS_OFFLINE环境变量 - 给所有HTTP事件的
private属性添加条件判断,动态切换是否启用API Key验证
修改后的完整serverless.yml配置如下:
service: my-service frameworkVersion: "3" custom: isOffline: ${env:IS_OFFLINE, false} # 读取离线环境变量,部署时默认取false provider: name: aws runtime: nodejs16.x region: eu-central-1 apiGateway: apiKeys: - name: my-apikey value: ${ssm:my-apikey} functions: myfunc: handler: src/v1/myfunc/index.get events: - http: path: /v1/myfunc method: get private: ${if:${self:custom.isOffline}, false, true} # 离线时自动关闭私有验证 plugins: - serverless-esbuild - serverless-offline - serverless-dotenv-plugin
原理说明
IS_OFFLINE环境变量:执行serverless offline时,框架会自动将该变量设为true;执行serverless deploy时该变量不存在,会使用默认值false。- 条件函数
if:通过${if:条件, 真值, 假值}语法,实现"离线时private为false,部署时为true"的动态配置。 - 多函数批量适配:如果有多个HTTP函数,只需把每个函数事件中的
private: true替换成上述条件表达式即可,用编辑器的全局替换功能就能快速完成。
内容的提问来源于stack exchange,提问作者Timo Ernst
相关产品推荐
相关产品推荐

