serverless frameworkでdeployエラー
lambdaとAPIGatewayの構成のスタックを今まで何回かdeployしてうまく行っていたのですが、
sls remove -v
したあとにsls deploy -v
し直したときに以下のエラーが発生しました。
ServerlessError: Stack with id lambda-demo-dev does not exist
翻訳すると、**lambda-demo-dev のスタックが存在しません。**という内容。
調べていくとserverless.yml
の以下の記述が原因でした。
serverless.yml
service: lambda-demo
---------省略---------
resources:
Outputs:
ServiceEndpointTestRequest:
Value: !Join
- ''
- - "curl -v -X GET -sS '"
- ${cf:lambda-demo-dev.ServiceEndpoint}
- "?person_id=001' -H 'Content-Type:application/json'|jq"
serverlessframeworkが自動で作成するOutputsであるServiceEndpointを使用したかったので、
自分自身のスタックのcfnの変数を参照していました。
sls deploy -v
だけしている分には問題なかったのですが、sls remove -v
することで今まで参照していたcfnが削除され、sls deploy -v
してもスタックが存在しませんというエラーが出たようです。
解決方法
以下のように、ServiceEndpointを自分でcustomに作り直し、Outputsに組み込みました。
serverless.yml
service: lambda-demo
---------省略---------
custom:
ServiceEndpoint: !Join
- ''
- - "https://"
- !Ref ApiGatewayRestApi
- ".execute-api."
- !Ref AWS::Region
- "."
- !Ref AWS::URLSuffix
- "/"
- ${self:provider.stage}
resources:
Outputs:
ServiceEndpointTestRequest:
Value: !Join
- ''
- - "curl -v -X GET -sS '"
- ${self:custom.ServiceEndpoint}
- "?person_id=001' -H 'Content-Type:application/json'|jq"