Amazon web services &引用;id为X的堆栈不存在“;成功删除sls后的所有sls命令
成功后Amazon web services &引用;id为X的堆栈不存在“;成功删除sls后的所有sls命令,amazon-web-services,amazon-cloudformation,serverless-framework,Amazon Web Services,Amazon Cloudformation,Serverless Framework,成功后sls removeallsls命令失败 id为X的堆栈不存在 检查是否已删除堆栈、其他堆栈和S3部署桶。尝试删除.serverless/,但没有任何帮助。结果发现,在我的serverless.yml中,有问题的部分是${cf:${self:service}-${self:provider.stage}.ServiceEndpoint}。显然,${cf:…}如果主堆栈不存在(即您尚未部署),serverless.yml中的东西(或至少在特定情况下)将失败 我无法确定这是sls错误还是我应该
sls remove
allsls
命令失败
id为X的堆栈不存在
检查是否已删除堆栈、其他堆栈和S3部署桶。尝试删除
.serverless/
,但没有任何帮助。结果发现,在我的serverless.yml
中,有问题的部分是${cf:${self:service}-${self:provider.stage}.ServiceEndpoint}
。显然,${cf:…}
如果主堆栈不存在(即您尚未部署),serverless.yml中的东西(或至少在特定情况下)将失败
我无法确定这是sls错误还是我应该知道得更清楚。问题是
${cf:…}
语法需要现有CloudFormation堆栈的输出,当您尚未部署项目时,该堆栈及其输出还不存在
如果您需要从“当前”堆栈内部访问该输出,您应该了解Serverless是如何定义该输出的(此示例来自我的一个项目):
您可以使用相同的语法在需要的地方在自己的堆栈中“生成”该值,将动态部分替换为无服务器变量,如${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}"]]}
在我的例子中,我手动删除了cloudformation堆栈,并运行了
slsdeploy-s--force
,它成功了
provider:
environment:
SERVICE_ENDPOINT: {"Fn::Join":["", [
"https://",
{"Ref":"ApiGatewayRestApi"},
".execute-api.${self:provider.region}.",
{"Ref":"AWS::URLSuffix"},
"/${self:provider.stage}"]]}