首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无服务器V2:在"opt“源代码中找不到值

无服务器V2:在"opt“源代码中找不到值
EN

Stack Overflow用户
提问于 2022-04-23 00:23:13
回答 1查看 1.5K关注 0票数 0

我们目前正在使用Serverless版本2.0.0,并希望升级到最新的v3。根据他们的文档,我首先升级到最新的v2。

我们使用python脚本来使用subprocess库来运行服务器,因为我们使用机密管理器来获得一些cli参数。命令字符串如下:

代码语言:javascript
复制
command = [
        "npm", "run",
        "serverless", "--", "deploy", 
        "--elastic", elasticHost,
...
    ]

serverless.yml文件如下所示:

代码语言:javascript
复制
service: devices
variablesResolutionMode: 20210326

plugins:
  - serverless-plugin-typescript
  - serverless-offline
  - serverless-domain-manager
  - serverless-prune-plugin

provider:
  name: aws
  versionFunctions: false
  environment:
    ES_HOST_URL: ${opt:elastic}
...

我可以确认elasticHost确实存在,我在运行脚本时会在终端中看到它。但是,当我运行脚本时,会得到以下错误:

代码语言:javascript
复制
 > serverless "deploy" "--profile" "dev" "--aws-profile" "dev" "--elastic" "xxx" ...


 Serverless Error ----------------------------------------

  Cannot resolve serverless.yml: Variables resolution errored with:
    - Cannot resolve variable at "provider.environment.ES_HOST_URL": Value not found at "opt" source,

我的package.json如下:

代码语言:javascript
复制
    "serverless": "^2.72.3",
    "serverless-api-compression": "^1.0.1",
    "serverless-domain-manager": "^6.0.3",
    "serverless-offline": "^8.7.0",
    "serverless-plugin-split-stacks": "^1.11.3",
    "serverless-plugin-tracing": "^2.0.0",
    "serverless-plugin-typescript": "^2.1.2",
    "serverless-prune-plugin": "^2.0.1",
    "serverless-pseudo-parameters": "^2.6.1",
    "serverless-python-requirements": "^5.4.0",
    "serverless-step-functions": "^3.7.0",

如果我用它的值替换{opt:elastic},我不会得到错误,但我不希望它硬编码。我试图理解为什么我要得到这个错误,以及如何解决它。

我以前没有使用过无服务器服务,所以在这方面的任何帮助都是非常感谢的。

谢谢。

EN

回答 1

Stack Overflow用户

发布于 2022-04-23 05:27:11

我过去也犯过同样的错误。可悲的是,我没有找到使用opt命令设置动态值的方法,但我找到了另一种解决方案。

您可以在您的无服务器命令中定义环境vars,然后在您的无服务器文件中使用env,因此:

首先,让我们在package.json中定义一个脚本:

代码语言:javascript
复制
"scripts": {
   "serverless": “url=secondary serverless.. "  
} 

那么在您的YML文件中,应该有这样的内容:

代码语言:javascript
复制
environment:
    ES_HOST_URL: ${env:url, 'www.stackoverflow.com'}

这意味着,如果不设置env变量,这将设置www.stackoverflow.com,否则将是从命令发送的值。

最后,只运行npm run serverless就可以了

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71975854

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档