AWS Lambda - NAT 网关互联网访问导致超时

2024-01-21

我有一个 AWS Lambda 函数:

  • 检查 Redis Elasticache 实例,
  • 如果在缓存中未找到该项目,则转至 Google Places API 服务。

Redis 实例位于私有子网;因此,为了获取它,我添加了 VPC 和实例所在的子网。我还指定了允许所有出站流量的安全组。网络 ACL 是默认的 ACL,适用于所有入站和出站流量。

通过控制台向Lambda函数添加VPC时,提示:

当您启用 VPC 时,您的 Lambda 函数将失去默认的互联网访问权限。如果您的功能需要外部 Internet 访问,请确保您的安全组允许出站连接,并且您的 VPC 具有 NAT 网关。

所以,在Route Table对于私有子网,我添加了一个NAT gateway也。然而,当从 Lambda 函数调用 Google Places API 服务时,它总是注定会导致超时。

简而言之,我怀疑 NAT 网关是否正确允许 Lambda 函数访问互联网。我怎样才能检查它出了什么问题?

NAT 网关是否以某种方式在 CloudWatch 等中记录通过其尝试的呼叫或呼叫尝试?


我想详细说明@vahdet 的答案。我试图协调 NAT 网关应该如何同时位于公共子网和私有子网中,但我却失去了理智。看起来像是AWS官方文档here https://aws.amazon.com/premiumsupport/knowledge-center/internet-access-lambda-function/错了,但当然不是。我和其他人都忽略了一个非常微妙的细节。

NAT 网关必须同时跨两个不同的子网进行“热连线”,以便将私有地址桥接到面向互联网的公共地址。

首先,我尝试将 NAT 网关放在与 IGW 相同的路由表中,但这当然行不通,因为您不能有两条具有不同目标的相同路由 (0.0.0.0/0)。

该指南说将 NAT 网关放入专用网络的路由表中,我照做了,但这似乎不起作用。

我遗漏的关键细节是 NAT 网关必须是创建于公共子网。文档实际上是这么说的,但这似乎令人困惑,因为我们后来被告知将route对于 NAT 网关私人餐桌.

这两件事都是真的。在中创建 NAT 网关公有子网然后只添加一个路由表条目 in the 私有路由表.

文档告诉您在VPC中创建以下网络资源:

  • 两个新子网
  • 两个新的路由表
  • 一个新的 NAT 网关

我已经有了一个路由表和一些子网,所以我尝试只添加一个新子网和一个新路由表,这就是我遇到麻烦的地方。按照记录,每个创建两个确实更好。

对于我来说,子网是这样的:

subnet-public    10.8.9.0/24    us-east-1a
subnet-private   10.8.8.0/24    us-east-1a

Then createNAT 网关在子网公共。 它将等待几分钟,这很重要,因为它必须进入可用状态才能在路由表条目中引用。

以下是路由表:

route-table-public
10.8.0.0/16    local
0.0.0.0/0      igw-xyz
subnet-association: subnet-public

route-table-private
10.8.0.0/16    local
0.0.0.0/0      nat-abc
subnet-association: subnet-private

你看到那里发生了什么吗?这真的很微妙。 NAT 网关是交叉连线的。它“生活”在创建它的公共子网中,但私有子网中的所有流量都会路由到它。

如果您像我一开始一样在私有子网中创建 NAT 网关,则 NAT 网关与私有子网中的其他所有内容一样隔离,并且无法将流量路由到 Internet。一定是created在公共子网中才能访问互联网,因为它必须拥有公共子网内的 IP 地址。我的 NAT 网关的内部 IP 地址为10.8.9.127以及 54.X.X.X 范围内的外部 IP。

通过将 NAT 网关设置为专用路由表中的 0.0.0.0/0 路由,我们告诉所有非 10.8.0.0/16 流量直接进入 NAT 网关,即使它实际上不在私有子网内.

VPC 本身知道如何跨其自己的子网桥接流量,并且能够将 10.8.8.X 流量发送到 NAT 网关的 10.8.9.X IP。然后,它充当桥梁,将其内部 IP 上的所有流量转换为外部 IP。由于它位于具有 Internet 网关的路由表中的公有子网中,因此外部 IP 具有通往 Internet 的清晰路径。

现在我的私有 VPC lambda 位于子网专用已通过 NAT 网关验证互联网访问。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

AWS Lambda - NAT 网关互联网访问导致超时 的相关文章

  • AWS S3 使用 boto3 预签名 url - 签名不匹配

    我想为我的存储桶中的对象创建一个预签名 URL 我使用以下 python 代码 client boto3 client s3 aws access key id os environ AWS ACCESS KEY aws secret ac
  • 迭代亚马逊S3上文件夹中的对象

    我们有一个应用程序 用户可以创建自己的网页并托管它们 我们使用 S3 来存储静态页面 在这里 由于我们每个用户有 100 个存储桶的限制 我们决定为每个用户使用文件夹桶内的用户 现在 如果用户想在他的域上托管他的网站 我们会向他询问域名 当
  • 全文搜索 DynamoDB

    以下情况 我正在为我的客户将元素存储在 DyanmoDb 中 HashKey 是元素 ID Range Key 是客户 ID 除了这些字段之外 我还存储一个字符串数组 gt 标签 例如 Pets House 和多行文本 我想在我的应用程序中
  • 如何通过 SSL 将文件直接上传到 S3?

    我已经使用基于浏览器的 Amazon S3 直接 POST 上传有一段时间了 最 近想开始通过 HTTPS 发布 普通的 HTTP 帖子就可以正常工作 但是 当我将相同的表格发布到https s3 amazonaws com https s
  • 使用 Cloudformation SAM 的 AWS::Serverless::Api 资源策略

    最近AWS宣布 是否可以将资源策略附加到通过 Cloudformation 使用 SAM 创建的 AWS Serverless Api 我还没有机会尝试这个 但我假设您可以像使用 S3 存储桶策略一样使用它 对你来说最棘手的部分是抓住api
  • 如何随机生成文件的链接?

    我有一个 PDF 文件 我不想通过我网站上的 URL 公开访问该文件 作为 轻微 安全层 我想通过电子邮件向用户发送一个唯一的 随机生成的 URL 他们可以从中下载 PDF 我将把该 PDF 存储在 AWS 或类似的地方 我感觉自己被困在r
  • S3 Java 客户端经常失败,并出现“内容长度分隔消息正文过早结束”或“java.net.SocketException 套接字已关闭”

    我有一个在 S3 上做很多工作的应用程序 主要是从中下载文件 我看到很多此类错误 我想知道这是否是我的代码中的问题 或者服务是否真的像这样不可靠 我用来从 S3 对象流读取的代码如下 public static final void wri
  • AWS Glue 3.0 容器不适用于 Jupyter 笔记本本地开发

    我正在 AWS 中开发 Glue 并尝试在本地开发中进行测试和调试 我按照这里的说明进行操作https aws amazon com blogs big data developing aws glue etl jobs locally u
  • AWS lambda只读文件系统错误,使用docker镜像存储ML模型

    我在 lambda 上使用 docker 容器映像来运行我的 ML 模型 我的 lambda 函数有一个 S3 触发器来获取图像 我正在尝试运行 lambda 函数 但收到此错误 有人可以帮帮我吗 PS 现在我知道 tmp 是 lambda
  • 更新AWS S3过期时间

    我想知道如何延长密钥的有效期 我指的不是访问对象的签名 URL 而是密钥本身 我将 AWS 设置为存储桶中的所有对象应在 90 天后过期的规则 在大多数情况下 这就是我希望发生的事情 有时我需要将单个密钥的使用寿命最多再延长 90 天 事实
  • 如何获取AWS ec2中区域的可用容量?

    AWS 终止了我的运行位置 并出现错误 实例终止容量超额订阅 有没有办法查看不同 ec2 区域中实例类型的可用容量 这样我就可以在更 可用 的区域创建我的新位置 查看 现货实例历史记录 这不会告诉您未来 但会给您迄今为止的良好指示 此链接将
  • AWS ALB 截断 HTTP 响应

    我有一个带有目标组的 ALB 和运行 PHP API 的 ECS 集群 我正在尝试查询 API 以获得 CSV 响应 但如果请求通过 ALB 我会得到被截断的结果 当我通过 SSH 连接到运行集群的 EC2 实例并尝试手动运行curl 通过
  • 扩展策略中的AWS ASG冷却期和预热期有什么区别?

    AWS ASG 冷却期 当我想要更新自动扩展组时可以编辑该冷却期 和扩展策略中的预热期之间有什么区别 冷却时间可以防止失控的缩放事件 如果您的系统在 CPU 上运行较高 并且您的自动扩展规则添加了一个实例 则该实例将需要 5 分钟左右的时间
  • 关于 S3 文件传输的权限

    我正在使用 S3TransferManager Sample 进行测试 我创建了Cognito并设置了IAM并最后更改了constants swift文件 我上传没有问题 但下载失败 错误信息是 下载失败 错误域 com amazonaws
  • 使用 ecs-cli 在 AWS 上部署 docker 时遇到问题

    我在 ECS 上有一个存储库 已使用 ecs cli 创建了一个集群 ecs cli configure region us west 2 profile
  • 由于命名约定,使用 DynamoDB AWS SDK [无哈希键映射] 时出错

    在使用 AWS JAva SDK 时 为了定义 DynamoDBHashKey 我们使用 DynamoDBHashKey 注释 奇怪的是 如果我使用如下注释 DynamoDBHashKey String Abc 代替 DynamoDBHas
  • AWS Lambda 调用错误未触发 SQS 死信队列

    我有一个 AWS Lambda 函数 它订阅 DynamoDB 流并配置了SQS 死信队列 DLQ https docs aws amazon com lambda latest dg dlq html 我可以看到管理控制台中配置了正确的队
  • 如何通过id获取最近共享的AWS RDS快照?

    我在 AWS RDS 上有 2 个数据库 其中一个用于stage和一个用于production跨 2 个帐户 我正在尝试将数据复制到production to stage每 x 天 我的计划是复制最近的自动备份快照production并分享
  • API网关+Lambda+Python:处理异常

    我正在非代理模式下从 API Gateway 调用基于 Python 的 AWS Lambda 方法 我应该如何正确处理异常 以便使用部分异常设置适当的 HTTP 状态代码以及 JSON 正文 作为示例 我有以下处理程序 def my ha
  • Elastic Beanstalk、Bundler 找不到 gem“bundler”的兼容版本

    我已经尝试过将 Elastic Beanstalk 用于 Rails 当我运行 eb deploy 时出现此错误 我需要至少安装bundler 1 8 4 知道如何解决这个问题吗 Bundler could not find compati

随机推荐

  • 当应用程序位于*前台*时,红色录音状态栏“闪烁”

    有很多疑问 here https stackoverflow com questions 16878991 hide red recording status bar in ios app when not recording here h
  • 当另一个片段中的数据发生变化时,如何刷新一个片段中的RecyclerView

    数据提交成功后 如何将本地数据库的数据刷新到RecyclerView中 我使用应用程序上的选项卡 2nd Tab函数提交数据 如果成功 数据将存储在localDB Data on localDB我将在3rd Tab 但会发生什么 我必须刷卡
  • 在Excel VBA中,如何检索单元格内文本的格式

    在 Excel VBA 中 我想检索单元格的文本以及每个单词的格式 例如 单元格 A1 的值为 sample text Range A1 Value 属性仅返回纯文本 即 示例文本 我想要的是一个对象 它给我类似 示例 i gt 文本 Ex
  • 无互联网连接时的警报框 - Phonegap

    我试图在设备上没有互联网连接时弹出一个弹出窗口 I got 下面的例子 http docs phonegap com en 1 0 0 phonegap connection connection md html工作 但现在我希望仅在结果为
  • 无法从数据帧列表中获取索引位置

    我试图通过使用 python 中的内置方法索引从数据帧列表中获取数据帧的位置 我的代码如下 df1 pd DataFrame 1 2 3 df2 pd DataFrame 4 5 6 df3 pd DataFrame 7 8 9 dfs d
  • Google Glass Android Studio Gradle 问题

    我正在尝试使用 Android Studio 0 5 4 构建我的第一个 Google Glass 应用程序 但我收到构建错误 Error Module TestApplication TestApplication platform Go
  • 保证表值函数结果的顺序

    PREMISE 应用程序代码无法更改 条件非常具体 我正在寻找一些非书本上的东西 如果可以的话 这是最后的解决方法 我有一个表值函数 内联 可以生成 2 到 7 条记录 有时可能只有 1 个或最多 15 个 但很少 该函数仅由应用程序以这种
  • 特定值的固定颜色

    我正在尝试制作温度图 一切正常 但我不知道如何拥有固定的调色板 其实我有这个 rgb palette lt colorRampPalette c blue green yellow orange red space Lab image pl
  • 如何在java中改变我的框架?

    假设有一个按钮 如果您单击该按钮 则会出现一个新框架 依此类推 The setVisible true 函数用于显示框架 创建所需框架的对象并调用此函数 像这样的东西 The applications first or the main f
  • 打印 Mnesia 表的最佳方式

    我尝试了这个代码片段 print next Current gt case mnesia dirty next muppet Current of end of table gt io format n ok Next gt Muppet
  • 缺少 HttpClient 的依赖项

    我在 Java 桌面应用程序中使用 HttpClient 我已经添加httpclient 4 0 1 jar and httpmime 4 0 1 jar到构建路径 但我收到错误 无法解析类型 org apache http HttpRes
  • 使用标识符或 url 获取 Facebook 群组 ID

    我想通过使用 URL 或特定标识符来获取 Facebook 群组 ID For ex http www facebook com groups chennaifoodies http www facebook com groups chen
  • $.ajax仅在放置alert()时才起作用

    我尝试将内容加载到之前使用 AJAX 加载的内容中 我把代码 使用负载 jQuery contentpage on submit loginform my function contentpage load logincheck jsp a
  • 解析模型后,Redland RDF 中 RDF 节点的生命周期?

    我正在解析 RDF model 使用librdf parser parse string into model 然后我保留librdf model但释放librdf parser 在我看来 模型中的节点似乎也消失了 那么一生会做什么雷德兰R
  • 不使用 webpackJsonp 编译 Webpack typescript

    是否可以使用webpack进行打包而不使用webpack模块加载 我有一个可以使用 webpack 的所有内容的应用程序 在这个应用程序旁边我有一个小的打字稿文件test ts应该被编译 缩小等 但是输出应该是一个简单的js文件 没有被包装
  • iPhone应用程序启动时间指南[关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 请指出 iPhone 应用程序启动时间指南 我发现有大约 24 秒的硬性限制 如果应用程序当时未启动
  • 读取EDI格式文件

    我是 EDI 新手 我有一个问题 我读到 通过查看 ISA 行的最后 3 个字符 您可以获得有关 EDI 格式的大部分信息 如果每个 EDI 都使用换行符来分隔实体 那么这很好 但我发现许多都是单行文件 其中使用任意数量的字符作为换行符 我
  • 使用 pandas apply 时的异常处理

    我可以使用 series str extract 从 pandas 系列中提取子字符串 ds pd Series 1A apple 1B pear 3C orange grape ds str extract d 1 expand Fals
  • Broom.mixed exp 模型预测

    我想请求一些帮助来绘制我的模型的预测值以及 lmer 估计生成的方程 所以 我得到的数据是不同老鼠在不同日期的质量体积 每只老鼠都有不同的时间点来测量该体积 那么 我使用的模型是 m1 lt lmer lVolume Country Day
  • AWS Lambda - NAT 网关互联网访问导致超时

    我有一个 AWS Lambda 函数 检查 Redis Elasticache 实例 如果在缓存中未找到该项目 则转至 Google Places API 服务 Redis 实例位于私有子网 因此 为了获取它 我添加了 VPC 和实例所在的