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

使用Serverless部署AdonisJS到Cloudflare Worker时环境变量缺失报错

解决Serverless部署Cloudflare Worker时缺失认证环境变量的问题

问题重现

执行serverless deploy部署AdonisJS到Cloudflare Worker时,出现以下报错:

Warning: You're relying on provider "cloudflare" defined by a plugin which doesn't provide a validation schema for its config.
Please report the issue at its bug tracker linking: https://www.serverless.com/framework/docs/providers/aws/guide/plugins#extending-validation-schema
You may turn off this message with "configValidationMode: off" setting

× Uncaught exception
Environment: win32, node 20.2.0, framework 3.38.0, plugin 7.2.0, SDK 4.5.1
Docs:        docs.serverless.com
Support:     forum.serverless.com
Bugs:        github.com/serverless/serverless/issues

Error:
'Missing mandatory environment variable: CLOUDFLARE_AUTH_KEY.'

C:\Vscode local\FsAssignment2\adonis-todo\new-project\node_modules\bluebird\js\release\async.js:49
        fn = function () { throw arg; };
                           ^
Missing mandatory environment variable: CLOUDFLARE_AUTH_EMAIL.
(Use `node --trace-uncaught ...` to show where the exception was thrown)

Node.js v20.2.0

当前使用的serverless.yaml配置(已移除敏感值):

service: new-project

frameworkVersion: '3'

provider:
  name: cloudflare
  environment:
    CLOUDFLARE_ACCOUNT_ID: 
    CLOUDFLARE_AUTH_EMAIL: 
    CLOUDFLARE_AUTH_KEY: 
  config:
    accountId: 
    authEmail: 
    authKey: 

plugins:
  - serverless-cloudflare-workers

functions:
  adonis-todo:
    name: adonis-todo
    script: ..\cloudflareWorker.js # there must be a file called helloWorld.js
    events:
      - http:
          url: https://simon-floyd-proceed-example.trycloudflare.com/hello/*
          method: GET
          headers:
            foo: bar
            x-client-data: value

已尝试用set/setx设置环境变量、添加.env文件,但问题未解决。

问题分析

报错核心是Serverless框架的Cloudflare插件无法读取到认证所需的CLOUDFLARE_AUTH_EMAIL和CLOUDFLARE_AUTH_KEY,主要原因可能有以下几点:

  • serverless.yaml中provider.config下的认证字段为空,且未正确关联环境变量
  • Windows环境下设置的环境变量未生效
  • .env文件未被Serverless框架自动加载

解决方案

1. 修正serverless.yaml配置

Cloudflare插件的认证信息需要在provider.config中配置,而非provider.environment(后者是给Worker运行时用的环境变量)。推荐用环境变量引用的方式避免硬编码敏感信息:

service: new-project

frameworkVersion: '3'

provider:
  name: cloudflare
  # 这里的environment是给Worker运行时用的,不需要放认证信息
  environment:
    # 若Worker需要用到其他环境变量可在此配置
  config:
    accountId: ${env:CLOUDFLARE_ACCOUNT_ID}
    authEmail: ${env:CLOUDFLARE_AUTH_EMAIL}
    authKey: ${env:CLOUDFLARE_AUTH_KEY}

plugins:
  - serverless-cloudflare-workers

functions:
  adonis-todo:
    name: adonis-todo
    script: ..\cloudflareWorker.js
    events:
      - http:
          url: https://simon-floyd-proceed-example.trycloudflare.com/hello/*
          method: GET
          headers:
            foo: bar
            x-client-data: value

2. 确保环境变量生效

Windows下设置环境变量的正确方式:

  • 临时生效(仅当前终端):

    set CLOUDFLARE_ACCOUNT_ID=你的账号ID
    set CLOUDFLARE_AUTH_EMAIL=你的Cloudflare邮箱
    set CLOUDFLARE_AUTH_KEY=你的Cloudflare全局API密钥
    

    设置后直接在当前终端执行serverless deploy

  • 永久生效(需重启终端):

    setx CLOUDFLARE_ACCOUNT_ID "你的账号ID"
    setx CLOUDFLARE_AUTH_EMAIL "你的Cloudflare邮箱"
    setx CLOUDFLARE_AUTH_KEY "你的Cloudflare全局API密钥"
    

    设置后关闭当前终端,重新打开再执行部署命令

3. 用.env文件加载环境变量(可选)

如果想用.env文件管理环境变量,需要安装serverless-dotenv-plugin插件:

  1. 安装插件:
    npm install serverless-dotenv-plugin --save-dev
    
  2. 在serverless.yaml的plugins中添加该插件:
    plugins:
      - serverless-dotenv-plugin
      - serverless-cloudflare-workers
    
  3. 在项目根目录创建.env文件,填入敏感信息:
    CLOUDFLARE_ACCOUNT_ID=你的账号ID
    CLOUDFLARE_AUTH_EMAIL=你的Cloudflare邮箱
    CLOUDFLARE_AUTH_KEY=你的Cloudflare全局API密钥
    
  4. 执行serverless deploy即可自动加载.env中的变量

4. 验证环境变量是否正确读取

在部署前可先执行以下命令验证环境变量是否能被Serverless读取:

serverless print

该命令会输出解析后的yaml配置,检查provider.config下的字段是否已正确填充值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 08:33:20