成功删除sls后,所有sls命令中的“具有id X的堆栈不存在”

时间:2018-06-13 08:01:11

标签: amazon-web-services amazon-cloudformation serverless-framework

成功sls remove后所有sls命令都失败

  

ID为X的堆栈不存在

检查是否已删除堆栈,其他堆栈和S3部署存储桶。尝试删除.serverless/,但没有帮助。

3 个答案:

答案 0 :(得分:1)

事实证明我的${cf:${self:service}-${self:provider.stage}.ServiceEndpoint}中的违规位是serverless.yml。如果主堆栈不存在,即在尚未部署的情况下,serverless.yml中的${cf:...}内容(或至少是特定情况)显然会失败。

我无法判断这是不是sls bug还是我应该知道的更好。

答案 1 :(得分:1)

问题是${cf:...}语法需要输出现有的CloudFormation堆栈,当您尚未部署项目时,堆栈及其输出尚不存在。

如果您需要从"当前"内部访问该输出。堆栈,你应该看看无服务器如何定义输出(这个例子来自我的一个项目):

"ServiceEndpoint":{
  "Description": "URL of the service endpoint",
  "Value": {"Fn::Join":["", [
    "https://",
    {"Ref":"ApiGatewayRestApi"},
    ".execute-api.eu-central-1.",
    {"Ref":"AWS::URLSuffix"},"/dev"]]}
}

您可以使用相同的语法来生成"生成"在您需要的地方,您自己的堆栈中的值,用${self:provider.region}${self:provider.stage}之类的无服务器变量替换动态部分,或者您的项目选择使用而不是它们。例如,要将其添加到Lambda环境:

provider:
  environment:
    SERVICE_ENDPOINT: {"Fn::Join":["", [
      "https://",
      {"Ref":"ApiGatewayRestApi"},
      ".execute-api.${self:provider.region}.",
      {"Ref":"AWS::URLSuffix"},
      "/${self:provider.stage}"]]}

答案 2 :(得分:1)

在我的情况下,我手动删除了cloudformation堆栈并运行sls deploy -s <stage> --force并成功。