我的 lambda 和 EC2 在 VPC 中,我无法从 lambda 将记录放入运动但我可以从 EC2

My lambda and EC2 are in a VPC and I cant putRecords to kinesis from lambda but I can from EC2

我在 aws 中有一个设置,EC2 -> kinesis_x -> lambda -> kinesis_x (kinesis_x:说明这是同一个运动流) EC2 和 lambda 在同一个 VPC 中。 我可以从 lambda 发布到 kinesis_x.

我已经配置了一个 VPC 端点,它起到了作用,但它禁止 EC2 发布到运动。 EC2 和 lambda 的安全组相同。

启用端点后,这是我的 EC2 中 java 应用程序的超时异常:

原因:org.apache.http.conn.ConnectTimeoutException:连接到 kinesis.us-west-1.amazonaws.com:443 [kinesis.us-west-1.amazonaws.com/10.1.1.180, kinesis.us-west-1.amazonaws.com/10.1.2.157] 失败:连接超时 在 org.apache.http.impl.conn.DefaultHttpClientConnectionOperator.connect(DefaultHttpClientConnectionOperator.java:150) 在 org.apache.http.impl.conn.PoolingHttpClientConnectionManager.connect(PoolingHttpClientConnectionManager.java:353) 在 sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法) 在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 在 java.lang.reflect.Method.invoke(Method.java:498) 在 com.amazonaws.http.conn.ClientConnectionManagerFactory$Handler.invoke(ClientConnectionManagerFactory.java:76)

我希望能够从 EC2 和 Lambda 发布到同一个运动流

要检查的事情,查看客户端无法连接的错误:

  • VPC是public/private吗?
  • 您是否使用多个子网?
  • 如果是私人的,它有互联网网关吗?
  • 设置了哪些路由?

所有基本 IP 网络规则都适用于 VPC。

telnet 也是你的朋友。一个好的技巧是 SSH/SSM 进入 EC2 实例并尝试使用 telnet eg

进行连接
telnet ip port

这可以让您将网络连接与 application-level 问题隔离开来。

问题解决了! 我们将我们的安全组附加到端点,这就成功了! 此 sg 与我们的 EC2 和 Lambda 函数相同。