我正在尝试发现当前正在执行的 AWS Lambda 的 VPC IP 地址或 AWS ENI,以便我可以使用该 IP 地址来过滤 VPC 日志以查找匹配的记录。 Lambda 在 VPC 中运行,没有公共 IP 地址。
我尝试了这里建议的各种技术:
但这些对我不起作用,因为我认为它们是从容器的角度而不是 VPC 的角度显示容器的 IP 地址。
部分答案是,ENI 是在创建 lambda 时设置的,而不是每次运行时设置的。似乎(但我不确定)运行具有相同安全组的相同 VPC 的 lambda 共享相同的 ENI。因此,严格来说,我不需要在运行时从 lambda 本身的代码中发现 IP 地址。相反,我可以检查网络接口控制台来发现 lambda ENI 并将其用于我的过滤目的(当然,前提是没有太多来自同一网络接口上运行的其他 lambda 的流量)。
我们的解决方案是在 VPC 内生成一个私有 API,并通过模拟响应告诉您调用的私有 IP 地址。然后根据该私有 IP 查询 EC2DescribeNetworkInterfaces api。
由于这非常耗时,因此我们仅在冷启动时运行它,而不是在每次 lambda 运行时运行。
您可以使用 AWS CLI 获取 Lambda 使用的 ENI 的私有 IP。
aws ec2 describe-network-interfaces --filters Name=interface-type,Values=lambda --query "NetworkInterfaces[].{NetworkInterfaceId: NetworkInterfaceId, PrivateIpAddresses: PrivateIpAddresses}"