如何通过 AWS Lambda 调用 IPv6 REST 服务
How to call a IPv6 REST service over AWS Lambda
我在 AWS Lambda 中托管了一个 Alexa Skill,它使用 AsyncHttpClient
调用 IPv6
REST 服务,示例如下 URL:
http://[2a12:5375:4151:2300:1353:a632:5f4e:c232]:4711/rest/test
现在我的问题是,我总是遇到以下异常:
ava.util.concurrent.ExecutionException: java.net.ConnectException: Protocol family unavailable
如果我检查分配给底层服务器或应用程序的 IP 地址?,我得到以下地址(也是示例):
ip-10-23-56-1.eu-west-1.compute.internal: 10.23.56.1
所以我想,因为我使用的是 IPv6 而系统使用的是 IPv4,所以我无法让它工作?
我可以从另一台服务器成功调用我的 REST 服务。
我也在使用以下系统属性:
System.setProperty("java.net.preferIPv6Addresses", "true");
System.setProperty("java.net.preferIPv4Stack", "false");
是否有任何解决方案可以在 IPv4 底层系统上提供 'tunnel' 隧道 IPv6 地址以调用 REST 服务?或者有什么更简单的解决方案吗?
错误 Protocol family unavailable
表示协议(在本例中为 IPv6)在您的代码所在的系统上不可用或未配置 运行。
就 AWS 而言,您唯一能做的就是抱怨并希望他们最终向尚未提供 IPv6 的服务推出 IPv6 支持。
经过相当广泛的研究和测试,这个词是:IPv6 不适用于 Lambda。如果您 运行 您的 Lambda 在 VPC 中运行,这会更进一步。
如果您的函数与包含 IPv6 CIDR 的子网相关联,那么再多的正确配置也无法让您的 Lambda 访问外部资源。
您将能够 API 调用某些可用作 VPC 端点的 AWS 资源。这包括 S3 和 Dynamo 等服务,它们将在您的 VPC 中获得一个内部 IP。 VPC 端点不支持 SQS 等服务,因此将获得外部解析。
在您的 VPC 之外的任何服务或外部 API 调用都将因 IPv6 CIDR 而失败。解决此问题的唯一方法是从子网中删除 IPv6 CIDR 或仅为您的 Lambda 函数创建专用子网。
我们选择了后一个选项,并且在应用适当的 VPC 安全和路由策略的情况下一切正常。
我在 AWS Lambda 中托管了一个 Alexa Skill,它使用 AsyncHttpClient
调用 IPv6
REST 服务,示例如下 URL:
http://[2a12:5375:4151:2300:1353:a632:5f4e:c232]:4711/rest/test
现在我的问题是,我总是遇到以下异常:
ava.util.concurrent.ExecutionException: java.net.ConnectException: Protocol family unavailable
如果我检查分配给底层服务器或应用程序的 IP 地址?,我得到以下地址(也是示例):
ip-10-23-56-1.eu-west-1.compute.internal: 10.23.56.1
所以我想,因为我使用的是 IPv6 而系统使用的是 IPv4,所以我无法让它工作? 我可以从另一台服务器成功调用我的 REST 服务。
我也在使用以下系统属性:
System.setProperty("java.net.preferIPv6Addresses", "true");
System.setProperty("java.net.preferIPv4Stack", "false");
是否有任何解决方案可以在 IPv4 底层系统上提供 'tunnel' 隧道 IPv6 地址以调用 REST 服务?或者有什么更简单的解决方案吗?
错误 Protocol family unavailable
表示协议(在本例中为 IPv6)在您的代码所在的系统上不可用或未配置 运行。
就 AWS 而言,您唯一能做的就是抱怨并希望他们最终向尚未提供 IPv6 的服务推出 IPv6 支持。
经过相当广泛的研究和测试,这个词是:IPv6 不适用于 Lambda。如果您 运行 您的 Lambda 在 VPC 中运行,这会更进一步。
如果您的函数与包含 IPv6 CIDR 的子网相关联,那么再多的正确配置也无法让您的 Lambda 访问外部资源。
您将能够 API 调用某些可用作 VPC 端点的 AWS 资源。这包括 S3 和 Dynamo 等服务,它们将在您的 VPC 中获得一个内部 IP。 VPC 端点不支持 SQS 等服务,因此将获得外部解析。
在您的 VPC 之外的任何服务或外部 API 调用都将因 IPv6 CIDR 而失败。解决此问题的唯一方法是从子网中删除 IPv6 CIDR 或仅为您的 Lambda 函数创建专用子网。
我们选择了后一个选项,并且在应用适当的 VPC 安全和路由策略的情况下一切正常。