问题描述
我有一个 Java 应用程序,它部署在 EC2 中并与 Dynamodb 通信。我已为 Dynamodb 启用 VPC 端点(网关端点)。但是我没有注意到这个变化有任何性能改进。从理论上讲,与公共访问相比,我应该通过 VPC 端点看到更少的延迟。 同样基于tcpdump,我可以看到我们的应用程序仍然使用dynamodb的公共IP进行通信。
这里的 52.119.232.38
是 dynamodb 公共 IP。
如何验证我们在 EC2 中的应用程序是否使用 VPC 端点与 Dynamodb 通信?
- EC2 和 VPC 端点都为同一个 VPC 启用。
解决方法
您可以使用 AWS cloudtrail 来验证这一点。如果您仅从 AWS 网络上托管且具有关联 VPC 网关终端节点的应用程序连接到 DynamoDB,那么您应该只会在 Cloudtrail 日志的源 IP 字段中看到私有 IP。如果您看到其他公共 IP,则表示 DyanmoDB 正在通过 Internet 访问。
- 转到 AWS Cloudtrail 并筛选
EventSource
dynamodb.amazonaws.com
- 如果您没有看到任何 cloudtrail 事件,请确保选择您希望应用程序访问 DynamoDB 的时间段或手动 ssh 进入 EC2 实例并运行一些 cli 命令
aws dynamodb list-tables
,然后等待 10- 15 分钟后此新活动才会出现。 - 点击设置图标以显示事件的
Source IP address
- 事件的
Source IP address
应该来自您的 VPC 的 CIDR 范围(在本例中是 EC2 实例的私有 IP) - 您可以点击事件名称并查看原始事件,该事件的键值为
vpcEndpointId
,其值与 VPC 端点的 ID 相同
如果源 IP 不是 EC2 实例的私有 IP,请按照链接 here
的To add or remove route tables used by a gateway endpoint
部分确保使用网关端点条目更新适用的路由表
,
您可以简单地为 dynamodb 的端点执行 nslookup,它应该从 vpc 内的一个实例返回私有 IP 地址。