0
Help us understand the problem. What are the problem?

posted at

LambdaのSecurityGroupが削除できなくて困った話

はじめに

AWSの運用として、「このLambda使わなくなったから削除してー」と言われ、
リソースの削除後に、使われなくなったSecurityGroup(以下SG)も削除する。
というのはよくある運用かと思います。

その際に、SGが削除できない、正確にはLambdaのENIが自動で削除されなくて困った
という話になります。

なにが起きたか

① VPC内のLambdaを削除

② Lambdaの実行ロールを削除

③ LambdaのSGを削除するために、
念の為、削除対象のSGがネットワーク・インターフェースにアタッチされていないか確認。
→あれ、まだ使われてるな…(削除したLambdaのENIが削除されていない)
時間かかってるだけかな、、明日になって確認してみるか。。
→翌日、まだアタッチされている。SGの削除を試みるも、もちろんネットワーク・インターフェースにアタッチされているため削除できない旨のエラーがでる。

原因

EC2などと同様に、Lambdaも削除後、使用していたENIも自動的に削除されるはずだが、
その際に、Lambdaの実行ロールを使用しているため、ENIの自動削除が終わる前に、
実行ロールを削除してしまうと自動で削除されなくなってしまうとのこと。

ネットワークインターフェイスが表すリソースを削除すると、Lambda はネットワークインターフェイスをデタッチおよび削除します。使用されていないネットワークインターフェイスを削除するために、Lambda サービスはネットワークインターフェイスを作成した関数の実行ロールを使用します。

なので、上記の手順でいうと、②で実行ロールを消したのが早すぎて、
ENIの自動削除がされなかったと。(ちなみにENIの自動削除は最大で20分程度らしいです)

対処

シンプルにENIを手動で削除してあげれば大丈夫でした。
上記の、AWSのリンクに、「Lambda ENI Finder」なるもので、
ネットワーク・インターフェースがLambdaに使われていないか確認できるそうですが、

今回の場合は、
① ネットワーク・インターフェースの画面でSG IDで検索
② 削除されるはずだったENIが出てくる。
③ 状態が「Available」であることを確認。
④ 対象のENIを「アクション」から削除。
→このときに「Avalable」じゃない(どこかで使用されている)ときは削除できません。
⑥ 無事、LambdaについていたSecurityGroupが削除可能に。

おわりに

ENIってほとんど自動で削除されるので、意外と手動で削除したことなくて嫌だなーって
人も多いかと思うので、そんな方は是非スピードにとらわれず、VPC Lambdaを削除した後は
SGの削除行ってから、実行ロールの削除をするようにすれば良いかなと思います!

Register as a new user and use Qiita more conveniently

  1. You can follow users and tags
  2. you can stock useful information
  3. You can make editorial suggestions for articles
What you can do with signing up
0
Help us understand the problem. What are the problem?