VPC 中的 AWS Lambda 有时无法访问互联网

2024-04-03

我有部署到 VPC 的 Lambda。

此部署有以下配置:

  • 专有网络 (192.168.0.0/16)
  • 公共子网 A (192.168.32.0/20) 具有 NAT 网关和到 Internet 网关的路由 0.0.0.0/0
  • 私有子网 A (192.168.48.0/20) 具有到 NAT 网关的路由 0.0.0.0/0
  • 私有子网B (192.168.64.0/20)

Lambda 有自己的安全组和对“私有子网”和“私有子网 B”的引用

我有一个奇怪的问题:Lambda 有时无法访问互联网。第三方服务正常。

另一件奇怪的事情是,Lambda 从子网(192.168.48.0/20 和 192.168.64.0/20)获取 IP,如 127.0.0.1、169.254.76.13、169.254.79.1,而不是 IP。

Error:

Error: connect ETIMEDOUT x.x.x.x:443
at Object._errnoException (util.js:1022:11)
at _exceptionWithHostPort (util.js:1044:20)
at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1198:14)

Deployment schema: enter image description here

这里是完整的 CloudFormation 模板:

    ---
AWSTemplateFormatVersion: '2010-09-09'
Description: 'Base Infrastructure'
Metadata:
  'AWS::CloudFormation::Interface':
    ParameterGroups:
    - Label:
        default: 'VPC Parameters'
      Parameters:
      - VpcId
      - InternetGatewayId
Parameters:
  VpcId:
    Type: String
  InternetGatewayId:
    Type: String
Resources:
  SubnetAPublic:
    Type: 'AWS::EC2::Subnet'
    Properties:
      AvailabilityZone: !Select [0, !GetAZs '']
      CidrBlock: !Sub '192.168.32.0/20'
      MapPublicIpOnLaunch: true
      VpcId: !Sub '${VpcId}'
  SubnetAPrivate:
    Type: 'AWS::EC2::Subnet'
    Properties:
      AvailabilityZone: !Select [0, !GetAZs '']
      CidrBlock: !Sub '192.168.48.0/20'
      VpcId: !Sub '${VpcId}'
  SubnetBPrivate:
    Type: 'AWS::EC2::Subnet'
    Properties:
      AvailabilityZone: !Select [1, !GetAZs '']
      CidrBlock: !Sub '192.168.64.0/20'
      VpcId: !Sub '${VpcId}'
  RouteTablePublic:
    Type: 'AWS::EC2::RouteTable'
    Properties:
      VpcId: !Sub '${VpcId}'
  RouteTablePrivate:
    Type: 'AWS::EC2::RouteTable'
    Properties:
      VpcId: !Sub '${VpcId}'
  RouteTableBPrivate:
    Type: 'AWS::EC2::RouteTable'
    Properties:
      VpcId: !Sub '${VpcId}'
  RouteTableAssociationAPublic:
    Type: 'AWS::EC2::SubnetRouteTableAssociation'
    Properties:
      SubnetId: !Ref SubnetAPublic
      RouteTableId: !Ref RouteTablePublic
  RouteTableAssociationAPrivate:
    Type: 'AWS::EC2::SubnetRouteTableAssociation'
    Properties:
      SubnetId: !Ref SubnetAPrivate
      RouteTableId: !Ref RouteTablePrivate
  RouteTableAssociationBPrivate:
    Type: 'AWS::EC2::SubnetRouteTableAssociation'
    Properties:
      SubnetId: !Ref SubnetBPrivate
      RouteTableId: !Ref RouteTableBPrivate
  EIP:
    Type: 'AWS::EC2::EIP'
    Properties:
      Domain: vpc
  NatGateway:
    Type: 'AWS::EC2::NatGateway'
    Properties:
      AllocationId: !GetAtt 'EIP.AllocationId'
      SubnetId: !Ref SubnetAPublic
  RouteTablePublicInternetRoute:
    Type: AWS::EC2::Route
    Properties:
      RouteTableId: !Ref RouteTablePrivate
      DestinationCidrBlock: '0.0.0.0/0'
      NatGatewayId: !Ref NatGateway
  RouteTablePublicInternetRoute2:
    Type: AWS::EC2::Route
    Properties:
      RouteTableId: !Ref RouteTablePublic
      DestinationCidrBlock: '0.0.0.0/0'
      GatewayId: !Sub '${InternetGatewayId}'
  ServerlessSecurityGroup:
    Type: AWS::EC2::SecurityGroup
    Properties:
      GroupDescription: SecurityGroup for Serverless Functions
      VpcId: !Sub '${VpcId}'
  ServerlessSecurityGroupIngress:
    Type: AWS::EC2::SecurityGroupIngress
    Properties:
      GroupId: !Ref ServerlessSecurityGroup
      IpProtocol: -1
      SourceSecurityGroupId: !Ref ServerlessSecurityGroup

有什么想法我做错了吗?

P.S.:我发现类似的问题AWS VPC Lambda 函数不断失去互联网访问权限 https://stackoverflow.com/questions/36581147/aws-vpc-lambda-function-keeps-losing-internet-access and 为什么VPC中的AWS lambda函数有时会超时,有时会正常工作? https://stackoverflow.com/questions/51373609/why-aws-lambda-functions-in-a-vpc-sometimes-timeout-and-sometimes-work-fine

UPD

添加了路线,现在可以使用了

  RouteTableBPrivateInternetRoute:
    Type: AWS::EC2::Route
      Properties:
        RouteTableId: !Ref RouteTableBPrivate
        DestinationCidrBlock: '0.0.0.0/0'
        NatGatewayId: !Ref NatGateway

为了使在 VPC 内部运行的 AWS Lambda 函数能够访问 VPC 外部的资源(例如 Internet),它必须位于具有 NAT 网关的私有子网中。在您的实例中,私有子网 A 是唯一具有适当配置以允许 Lambda 函数访问 Internet 的子网。因此,您需要编辑 Lambda 函数的配置,使其仅在该子网中运行。

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

VPC 中的 AWS Lambda 有时无法访问互联网 的相关文章

  • 以非 root 用户身份使用 AWS CodeBuild

    有没有办法掉root用户开启AWS 代码构建 我们正在构建一个 Yocto 项目 如果我们是 root Bitbake 健全性检查 该项目将在 CodeBuild 上失败 我们绝望的做法也不起作用 build commands chmod
  • AWS cognito身份池ABAC如何映射自定义多值属性?

    来自身份提供商的开放 ID 令牌示例 本例中为 Cognito 用户池 cognito groups testers admins email verified false 我想使用ABAC 就像这里给出的例子一样 https docs a
  • AWS Lambda 调用错误未触发 SQS 死信队列

    我有一个 AWS Lambda 函数 它订阅 DynamoDB 流并配置了SQS 死信队列 DLQ https docs aws amazon com lambda latest dg dlq html 我可以看到管理控制台中配置了正确的队
  • 从表单发布触发 AWS Lambda

    我创建了一个小型 AWS Lambda 它使用 SES 发送电子邮件 我正在寻找将联系我们表单从静态网站连接到此 lambda 是否可以将联系我们表单直接发布到 lambda 的 url 我没有使用服务器端框架 并且真的想避免它 我有什么选
  • 从 EC2 实例 ID 创建 AMI 时,command.resolveMiddleware 不是 AWS SDK 的函数,想知道为什么?

    我当时正在开发 AWS SDK 版本 3 并尝试以编程方式从 EC2 实例创建 AMI 以下是我使用的脚本 Imports TODO Import the ec2 client const EC2Client CreateImageComm
  • 如何在docker的keycloak中添加SSL

    我在将 SSL 证书添加到在 docker 上运行的 Keycloak 时遇到问题 我通过负载均衡器从 AWS EC2 获得了 SSL 证书 但不知道如何将其添加到 docker 上的 Keycloak 中 我正在通过谷歌搜索 但尚未找到任
  • AWS API Gateway 403 禁止

    我在 AWS API Gateway 中创建了一个 API 在该 API 中 我创建了一个带有自定义 http 端点的代理资源 但是当我访问API网关端点时https 2r3g3ttr6y execute api eu east 1 ama
  • 如何更改 Amazon Redshift 中的默认时区?

    默认情况下将时间戳列设置为 SYSDATE 将其存储为UTC 是否可以更改时区 以便 SYSDATE 将日期和时间存储到不同的时区 到目前为止 我已经检查了SET http docs aws amazon com redshift late
  • 将 Python 3 与 AWS lambda 结合使用

    可以在 lambda 中使用使用 Python3 构建的应用程序 而不仅仅是 python2 7 可能会考虑周围的选择 https gun io blog announcing zappa serverless python aws lam
  • 在 Elastic Beanstalk SSH 上运行 Django 命令 -> 缺少环境变量

    所以这对我来说是一个长期存在的问题 我很想解决它 我也认为这会帮助很多其他人 我希望在 Elastic Beanstalk EC2 实例上进行 ssh 操作后运行 Django 命令 例如 python manage py dumpdata
  • 输出和导出之间的区别

    在 CloudFormation 中 我们能够从模板输出一些值 以便其他进程 堆栈等可以检索它们 这通常是某个名称 可能是 URL 或在堆栈创建 部署 过程中生成的名称等 我们还能够从模板 导出 返回值作为 输出 与 导出 之间有什么区别
  • 如何在我的 AWS EC2 实例上安装特定字体?

    我有一个在 AWS EC2 Amazon Linux Elastic Beanstalk 实例上运行的 Python 应用程序 该实例需要某些特定字体才能生成输出 并且想知道如何在部署或实例启动过程中安装它们 我的代码在本地计算机 OS X
  • 具有服务器端加密 s3 存储桶的 AWS Cloudfront

    这是对这个问题 https stackoverflow com questions 50166557 how can a cloudfront distribution an aws kms key to get an s3 image e
  • 如何使用对象标记上传到 AWS S3

    有没有办法使用标签将文件上传到AWS S3 不将标签添加到S3中的现有文件 对象 我需要让该文件与我的 Tags 一起出现在 S3 中 即在单个 API 调用中 我需要这个 因为我使用 Lambda 函数 使用这些 S3 对象标签 由 S3
  • 带有 AWS S3 文件的 Icecast 服务器

    我目前正在运行 Icecast 服务器 用于在 EC2 实例上传输音频 目前我所有的 mp3 文件都存储在 EC2 实例上 我想将它们移动到 AWS S3 进行存储 到目前为止 我已经能够找到能够更新播放列表 https mediareal
  • AWS Lambda 提前结束(没有任何显式返回或回调)

    我在放入 AWS Lambda 中的一些 Node js 代码时遇到了一些问题 我需要进行几个异步调用 虽然第一个调用的行为符合我的预期 但 lambda 函数在第二个调用完成之前终止 返回值为 null 这让我认为 lambda 正在执行
  • 在 Serverless Framework 1.0 中使用路径参数

    我想使用路径参数 customer customerId of a GET请求以使用 AWS Lambda 查询客户 functions createCustomer handler handler createCustomer event
  • AWS Amazon - 登录循环卡住

    我已经使用 AWS 亚马逊几年了 但是 突然当我登录时 我进入了此验证部分 他们将验证码发送到我的电子邮件 我收到了该代码 因此 我输入收到的代码 最终返回登录页面 所以我登录后 同样的事情一遍又一遍地发生 我无法进入我的仪表板 它只是不断
  • 在 Azure 上运行 .NET 应用程序

    我拥有在 Amazon EC2 上运行应用程序的丰富经验 它需要一台低端服务器 我目前为该服务器支付大约 90 美元 月 是的 我知道我并不真正需要可扩展性 但我仍然使用 EC2 我想知道将这个纯粹的 NET 应用程序迁移到 Microso
  • 今天从 GitHub 操作构建 SAM 突然失败:模块“lib”没有属性“OpenSSL_add_all_algorithms”

    昨天 我的 SAM 构建正在使用以下 GitHub 操作 今天突然开始失败并出现错误 AttributeError 模块 lib 没有属性 OpenSSL add all algorithms 经我验证 SAM 模板没有任何错误 还有其他人

随机推荐

  • 在弹性中映射 geo_point 字段数组

    我想将一些 JSON 持久保存到 elastic search 中 看起来有点像这样 name value points lat 0 0 lon 0 0 lat 1 0 lon 1 0 点是弹性中 geo point 类型的列表 因为它们是
  • 按对角线旋转数据框

    给定一个数据框 col1 col2 col3 0 1 4 7 1 2 5 8 2 3 6 9 如何得到这样的东西 0 1 2 0 1 0 2 0 3 0 1 5 0 4 0 7 0 2 9 0 6 0 NaN 3 NaN 8 0 NaN 如
  • 我如何跟踪退回的电子邮件?

    我想跟踪从我的服务器发送的退回电子邮件 我看了一些资料 发现退回的邮件都存储在邮箱中 直接读取邮箱文件就可以检测到 使用 php 检查退回邮件 https stackoverflow com questions 4243100 check
  • 如何将文件拖放到 .MAPIMail 上

    给定一些文件 或 shell 文件对象 我如何调用 MAPIMail向他们注册 shell 扩展处理程序 问题 我的计算机上有一些文件 C Users ian AppData Local Temp Contoso Invoice 14117
  • 如何更改具有深色背景的 ActionBarSherlock 内部搜索视图的自动完成文本颜色?

    我有自己的 ActionBarSherlock 主题 基于Theme Sherlock Light DarkActionBar 这是我的风格
  • Ant Zip 提取的父目录

    我有几个 zip 文件需要在 Ant 目标中解压缩 所有 zip 文件都位于同一目录中 并且具有相同的内部目录和文件结构 因此 我使用以下代码片段来解压缩目录中的所有 zip 文件 但每个 zip 文件在根目录下不包含父文件夹 因此每个连续
  • Mod_rewrite 已启用但不起作用

    我已经阅读了一段时间 但无法让它发挥作用 mod rewrite 在 Apache 中启用 我已将 AllowOverride 更改为 all 我的 htaccess 看起来像这样 Options FollowSymLinks Rewrit
  • 如何更改datagridview中列的颜色?

    我有一个 DataGridview 并且我将某些列设置为只读以用于数据输入目的 当我这样做时 该列保持正常的白色 尽管它不允许进入 如何将列设置为灰色 我看过很多关于如何为行着色的示例 但没有看到列的示例 如何使只读列显示为灰色 尝试设置默
  • 展平数据框

    我有这个嵌套数据框 test lt structure list id c 13 27 seq structure list 1 c 1997 1997 1997 2007 2 c 2007 2007 2007 2007 2007 2007
  • 如何通过innerText获取元素

    如果我知道文本标签包含哪些内容 如何获取 html 页面中的标签 例如 a SearchingText a 您可以使用 xpath 来完成此任务 var xpath a text SearchingText var matchingElem
  • pytesseract找不到指定的文件

    我的代码很简单 如下所示 import pytesseract from PIL import Image img Image open C temp foo jpg img load i pytesseract image to stri
  • castle IOC - 解决循环引用

    关于我的 MVP 实现的简单问题 目前我有下面的代码 其中演示者和视图都是通过容器解析的 然后演示者调用 View Init 将自己传递给视图 然而 我想知道是否有一种方法可以让容器修复我的循环引用 视图 gt 演示者 演示者 gt 视图
  • Codeigniter 会话不会取消设置

    我在一个社区工作 我想让用户注销 但它不会取消设置用户数据 S 你知道为什么吗 这是我的控制器功能 function logOff this gt session gt flashdata reports Du er logget af r
  • 如何使用 MAMP 在 mac 上安装 phpunit 3.5

    我正在尝试使用 MAMP 在 Mac OS X 上安装 PHPUnit 3 5 我确实通过 MAMP 的 PEAR 安装了 PHPUnit 3 5 这一切都是正确的 phpunit 位于 Applications MAMP bin php5
  • 如何将键值对加载到hive表中?

    以下是我的数据集 Jun name balaji id 101 Mar name kumar id 102 创建的表 create table sample month string name string id int row forma
  • ZeroMQ套接字在什么情况下会丢弃或无法传递消息?

    是否有某种规范或其他解释来描述正常情况 对于每种通信类型 您可以预期在 ZeroMQ 套接字上发送的消息不会被 所有 侦听进程接收 例如 我有一个实验程序 它基本上假设所有订阅者PUB套接字接收在该套接字上发送的所有消息 在初始化握手之后
  • Azure AD B2C 审核日志 - 图形 API - 查询选项不起作用

    我正在尝试检索我们租户的 Azure AD 用户登录审核日志 为此 我使用 Microsoft 的图形 API 1 https graph microsoft com v1 0 auditLogs signIns filter create
  • 使用seaborn白色风格没有显示主要刻度线并且无法恢复

    当我使用seaborn 白色 样式生成绘图时 我看到了主要的勾号labels但我没有看到任何重大的问题marks 使用 将主要刻度线设置得更大 matplotlib inline import seaborn as sns import m
  • java.lang.ClassCastException:org.springframework.security.core.userdetails.User无法转换为model.User

    我在我的应用程序中使用 Spring Security 我需要在我的应用程序的控制器中登录用户详细信息 为此 我正在使用这段代码 User loggedInUser User SecurityContextHolder getContext
  • VPC 中的 AWS Lambda 有时无法访问互联网

    我有部署到 VPC 的 Lambda 此部署有以下配置 专有网络 192 168 0 0 16 公共子网 A 192 168 32 0 20 具有 NAT 网关和到 Internet 网关的路由 0 0 0 0 0 私有子网 A 192 1