I have a lambda function written in Python that uses a couple of heavyweight dependencies (NumPy, pandas, goodtables, etc.) and is also connected to a VPC (for access to a Postgres RDS instance)
The cold start execution time of this function is huge (16.2 seconds) when it's executed after a while (> 4-6 hours)
However, if I update the function code and invoke it a second time (shortly after the first execution), the cold start execution time reduces drastically (3 seconds)
If I invoke the function again without updating it so it's a warm start, the execution time goes down even further (313 ms)
I suspect the first cold start (16.2 secs) is when Lambda sets up an ENI for access to VPC resources and the ENI is reused during the second cold start (3 secs) so the time taken to re-create the ENI is avoided.
I am trying to optimize the cold start time of this function and want it to start from scratch to see how fast it can execute when starting completely cold (i.e. no ENI + cold start).
Is there a way to do this and do it repeatedly?
aws ec2 describe-network-interfaces | grep -C5 <function_name>
I can see whether or not an ENI is attached and the time of attachment (if one is attached). If I could detach/delete this ENI, do you think it'll force Lambda to re-create the ENI on next invocation?aws lambda create-function
accepts--code
to fetch the zip file from S3 or--zip-file
to upload the zip directly.