AWS:如果只有弹性 IP 与目标组中的实例相关联,则文件从 EC2 保存到 S3。否则文件不写

AWS: File saving into S3 from EC2 if only Elastic IP is associated to the instance in the target group. Else file not writing

我目前正在通过学​​习 Pluralsight 课程 AWS 开发人员:入门来学习 AWS。作为本课程的一部分,需要在 AWS 中部署一个 nodejs 应用程序(创建应用程序的比萨饼)。这个应用程序 运行s 在 EC2 实例上,当我们创建一个新的披萨并单击创建时,一个 png 文件将保存到 S3 存储桶中(EC2 实例中的代码 运行ning 将写入 S3)。

当我使用负载均衡器 URL 触发此应用程序时,应用程序已加载并且当我尝试保存新创建的比萨饼(png 图像)时,网页冻结并且文件未保存到 s3。

但是,如果我将弹性 IP 关联到目标组中的其中一个实例,文件将正确保存到 S3 中。

关于EC2实例的权限,安全组只有负载均衡,没有SSH。

并且 EC2 具有完整的 S3 访问角色。

但是,即使弹性 IP 不可用(因为目标组 EC2 安全组只有 SSH 之外的负载均衡器访问权限)

,应用程序仍然只有在关联弹性 IP 时才能运行

为什么在这种情况下需要弹性 IP 才能实现正确的行为。

编辑: 附加信息:

S3 存储桶: 已授予完全 public 访问权限。

以下 PUT 允许的方法可能无效。作为跟踪和错误,我提供了这个。

我的子网路由配置。我以为这是 public 子网。如有不妥请指正

我的假设: 我可能完全错了,但我的理解是我的子网是 public 子网,我的 ec2 实例正在该子网中创建。 EC2 实例(具有完整的 s3 访问角色)具有使用上述设置将 PNG 文件写入 S3 的代码(根据我的理解,所有 public)。

因此我期望这个 ec2 应该在没有弹性 IP 的情况下将文件写入 S3。

但我知道如果启用了自动分配 IP 地址,它与我手动将弹性 IP 分配给 EC2 的状态完全相似,因此这种情况有效。

我了解到启用自动分配 IP 地址后,每个 EC2 实例将被分配一个不同的 public IP 地址。对于这种需求,这种方法好吗?

分配多个 public IP 地址,即使不使用它(意味着将 运行 仅负载平衡器 URL 浏览器访问应用程序而不是 public IP)将花费更多的钱?

您的实例通常可以通过三种方式访问 S3 来上传您的披萨文件:

  1. 连接到 S3 public endpoint。这意味着,您的实例需要能够通过 Internet 连接到此端点。如果您的实例位于自动分配 public IPs 的 public 子网中,那么它开箱即用。如果您的实例未获得自动分配的 public IP,您可以使用弹性 IP 为您的实例获取 public IP。
  2. 使用 NAT gateway 连接到 S3 public 端点。当您的实例位于 私有子网 中时,这很有用,无法直接访问互联网或任何 public IP。
  3. 使用S3 VPC gateway。这允许 完全私有 连接到 S3,而无需任何互联网访问。

您的描述似乎表明选项 1 适用于您。

可能还有其他可能性,例如S3 存储桶有一个 存储桶策略 ,它只允许从列入白名单的 IP 或 IP 范围上传。因此,也许您的弹性 IP 已列入白名单,而其他 IP 未列入白名单。

这是因为您的实例无法访问 Internet。

如果您的实例具有 public IP(或 EIP),您的实例将可以访问互联网 它在 Public 子网中并且您添加了“Internet 网关”。

您似乎无法分配 public IP.. 分配请执行以下操作:

Select your subnet and choose Subnet Actions, Modify auto-assign IP settings. Then Enable auto-assign public IPv4 address

如果您无法配置 public IP,则将 EIP 关联到它..

如果您想在没有 public IP 的情况下访问互联网,则需要使用“NAT 网关”

如果您想在不离开 AWS 网络(没有互联网)的情况下将文件保存在 s3 中,请使用 S3 的 VPC 端点