我正在用pycharm编写Flask API。当我在本地运行代码时,使用boto3请求从Secrets Manager获取 secret 的时间不到一秒钟。但是,当我将代码放在EC2上时,大约需要3分钟(在t2.micro和m5.large中都尝试过)。
起初我以为可能是Python问题,所以我在EC2中通过awscli使用以下命令运行它:
aws secretsmanager get-secret-value --secret-id secretname
阈值花了大约3分钟。为什么会这样?从理论上讲,这在EC2中难道不比在本地计算机中快吗?
编辑:仅当EC2位于不同于默认VPC的VPC内时,才会发生这种情况。
最佳答案
在我们的本地计算机上解决同一问题近两个月后,我们终于在今天取得了一些进步。
原来,问题与IPv6有关。
如果您使用的是IPv6,则密码管理器域将解析为IPv6地址。由于某些原因,cli无法使用IPv6建立安全连接。超时后,cli退回到IPv4,然后成功。
要验证您是否要解析到IPv6地址,只需ping secretsmanager.us-east-1.amazonaws.com。不必担心ping响应,您只需要查看域解析为的IP地址即可。
要解决此问题,您现在有3个选项:
--cli-connect-timeout 1
最终,选项1是真正的解决方案,但由于它是如此广泛,所以其他选项可能会更容易。
希望这可以帮助其他人在达到目标时保持理智。
关于amazon-web-services - 通过awscli和boto3, secret 管理器在EC2中的运行速度极慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50203916/