LoginSignup
8
2

More than 1 year has passed since last update.

AWS CLI による Lambda Layer のアップデートについて

Last updated at Posted at 2021-10-07

CodeBuildを使ってLambdaに対して自動デプロイしていたのだが、Layer部分で急にエラーが出るようになったので調べてみた。

TL;DR

  • CodeBuild だけでなく、コンソールからの AWS CLI でも起きる
  • update-function-configuration を利用しなければ影響はない
  • Lambda関数の説明に「aws:states:opt-out」を追加すれば、取り敢えずは今まで通り動く
  • 2021/12/1 以降は上記説明を付けても無理そうなので、検討必要

Error Log

An error occurred (ResourceConflictException) when calling the UpdateFunctionConfiguration operation: The operation cannot be performed at this time. An update is in progress for resource: [ARN]

ResourceConflictException

さて、エラーログに例外が明記されていますので調べました。

しかし、上記で検索すると以下の解決策が出てきますが、これでは解決できません。

リソースが既に存在しているか、別のオペレーションが進行中です。

ということで、もう少し調べてみました。

update-function-configuration

Layerの設定を行うコマンドなのだが、これを利用するときだけエラーが発生した。

使っているレイヤーに問題があるのかどうか考えたり、レイヤーの上書きが問題の可能性も考えたが、Layerを消すコマンド(「update-function-configuration」コマンドで空リストを指定するだけ)を使ってもエラーが起きたことから、「update-function-configuration」コマンド自体に問題があると想定して、コメントアウトするとエラーが出なくなったことから確信へと変わった。

the state of AWS Lambda functions

あまり気にしていなかった(知らなかった)だけなのだが、どうやら Lambda には状態というものが存在するようです。

調査中なので割愛しますが、アップデートする際に「LastUpdateStatus」という状態があり、これが「InProgress」になっているとアップデート(上書き)出来ないようになっており、このタイミングで「update-function-configuration」をかけて失敗したものと思っています。

実際にエラーログにも「InProgress」と書かれていました。

何で急にこうなったのかはちゃんと調べます。。

解決策

取り敢えずは、Lambda 関数の説明文に「aws:states:opt-out」と書けば、従来通りに動いてくれました。
「opt-out」なのでデフォルトでは「ON」になっているんですね。。

image.png

最後に

常に情報をアップデートすることと、常に勉強しなくては、、と思いました。

Ref

8
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
2