繁体   English   中英

如何通过AWS Lambda调用IPv6 REST服务

[英]How to call a IPv6 REST service over AWS Lambda

我在AWS Lambda中托管了一个Alexa技能,该技能使用AsyncHttpClient在以下示例URL下调用IPv6 REST服务:

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底层系统上提供“隧道”以隧道化IPv6地址以调用REST服务? 还是有更简单的解决方案?

错误Protocol family unavailable意味着在运行代码的系统上该协议(在这种情况下为IPv6)不可用或未配置。

对于AWS,您唯一可以做的就是抱怨,并希望他们最终为尚未提供IPv6支持的服务提供支持。

经过广泛的研究和测试后,单词是:Lambda无法使用IPv6。 如果您在VPC中运行Lambda函数,则情况会更进一步。

如果您的功能与包含IPv6 CIDR的子网相关联,则没有任何正确的配置将使您的Lambda访问外部资源。

您将能够对一些可用作VPC终端节点的AWS资源进行API调用。 这包括S3和Dynamo之类的服务,它们将在您的VPC中获得内部IP。 VPC端点不支持SQS之类的服务,因此将获得外部解析。

V6外部的任何服务或外部API调用都将因IPv6 CIDR而失败。 解决此问题的唯一方法是从子网中删除IPv6 CIDR或创建仅用于Lambda功能的专用子网。

我们选择了后一种选项,并且在应用适当的VPC安全性和路由策略的情况下,所有人都可以正常工作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM