~~NOCACHE~~ ## 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を回収し、関数はアイドル状態になる。」 {{tag>AWS Lambda なるほど}}