目次
VPCに作成したLambdaのIPについて
VPCに作成したLambdaのIPを固定化したくAWSサポートに問合せした際の回答メモ
ポイント
・VPCにLambdaを作成する際は、Lambda用のロールに[AWSLambdaVPCAccessExecutionRole]ポリシーを付与する必要がある。
・関数が長期間アクティブでない場合、Lambda はそのENIを回収し、関数はアイドル状態になる。
・関数を再度アクティブにするには、その関数を呼び出します。この呼び出しは失敗し、ENIが使用可能になるまで、関数は Pending 状態になる。
・同じサブネットとセキュリティグループを共有する場合、複数の関数が 1 つのENIを共有できる。
・たくさんの関数がある場合や、ネットワーク使用率の高い関数がある場合は、追加のENIが Lambda で引き続き作成されることがある。
https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/configuration-vpc.html
・必要なENIの数は以下の計算式で概算可能?現行のドキュメントには記載が無い、AWSからも「具体的な条件は公開していない」と回答あり。
Projected peak concurrent executions * (Memory in GB / 3GB) → 想定する同時実行数 × (Lambda関数のメモリサイズ / 3GB)
https://d1.awsstatic.com/webinars/jp/pdf/services/20190402_AWSBlackbelt_AWSLambda%20Part1%262.pdf
サポートへの問合せ及び回答
IPを固定化したいので、VPCにLambda作成後[AWSLambdaVPCAccessExecutionRole]ポリシーを外して良いですか?
×:追加のENIが必要な際に、権限の不足により追加のENIを作成できなく動作に異常が発生する可能性がある。
Lambdaが関数作成時のENIのみ使い続ける方法があればご教示ください。
×:関数作成時に作成されたENIを確実に使い続けさせることはできない。
LambdaでもELBのような設計案内(CIDRを/27で各サブネットにつき 8 個の空き IP アドレスを用意)はあるか?
×:たくさんの関数がある場合や、ネットワーク使用率の高い関数がある場合には、追加のENIが作成される場合があるが、具体的な条件は公開していない。
追加のENI作成されるかは、ユーザー側で動作検証してください。
感想
・下記の計算式が公式ドキュメントに見当たらないので、設計時点ではENIの数は算出が難しいです。
→恐らく最小ENI数は下記の式で算出できるものと思われます。(同じサブネットとセキュリティグループを共有する前提)
Projected peak concurrent executions * (Memory in GB / 3GB)
・実際に作成されるENIの数は、ネットワーク使用率も考慮に入れると動作確認するしかない。
→ネットワーク使用率も追加ENIが作成される条件なら仕方がないか・・・
・下記の記載は、DRの常に実行されない環境は注意するが必要ありそうです。
→DR切替が発生した際、全てのLambdaを一回実行してあげる。
「関数が長期間アクティブでない場合、Lambda はそのENIを回収し、関数はアイドル状態になる。」