tl;dr
Serverless で, コードを一切変更せずに, serverless.yml の設定だけをイジって (関数にタグを設定した) デプロイ sls deploy
したら, 以下のようなエラーが発生して, とりあえず
対処したのでメモしておきます.
An error occurred: xxxxxxxxx - A version for this Lambda function exists ( 1 ). Modify the function to create a new version.
とりあえず
の対処なので, 正しい対処の方法なのか解っていないので, より良い対策が確認できたら追記したいと思います.
versionFunctions: false
serverless.yml に追加
versionFunctions: false
を serverless.yml に追加しました.
--- # yamllint disable rule:line-length service: sample-application provider: name: aws versionFunctions: false runtime: go1.x region: ap-northeast-1 ...
この状態でデプロイすることで, 先述のエラーは発生しなくなりました.
versionFunctions について
以下, ドキュメントです.
デフォルトでは Lambda 関数はデプロイ毎に新しいバージョンが作成され続けますが, versionFunctions: false
を指定することで, これを抑制することが出来ます. デプロイ毎に新しいバージョンが作られなくなることで, 古いバージョンにロールバックしてデプロイすることが出来なくなります.
尚, Serverless ではデプロイの際にコードの sha256
ハッシュ値を計算していますが, このハッシュ値を比較して, バージョンを変更するようです. (ハッシュ値が異なれば新しいバージョンと判断している) 今回のエラーはコードが変更されていないにも関わらず, Serverless が Lambda 関数の新しいバージョンを作成しようとした為に発生したと思われます.
参考
以上
色々と解っていないわたくしでございました.