启用 VPC 后无法从 Lambda/Python/Boto3 连接到 S3

Unable to connect to S3 from Lambda/Python/Boto3 when VPC is enabled

我在 lambda 中有一个非常简单的 python 函数,如果我禁用 VPC,它运行良好。

import json
import boto3
import botocore


def lambda_handler(event, context):
    s3 = boto3.client('s3', 'us-east-1',
                      config=botocore.config.Config(s3={'addressing_style': 'path'}))
    keys = []
    resp = s3.list_objects_v2(Bucket='[BUCKET_NAME]')
    for obj in resp['Contents']:
        print(obj['Key'])

    return {
        'statusCode': 200,
        'body': json.dumps('Hello from Lambda!')
    }

启用 VPC 后,S3 连接不断超时。

我浏览了许多文档、教程、论坛主题和堆栈溢出帖子,但其中 none 对我有所帮助。

我的网络 ACL 具有端口 80、443 和 5439 (Redshift) 的 0.0.0.0/0 映射。

我唯一的一个安全组具有端口 80、443 和 5439 (Redshift) 的 0.0.0.0/0 映射。

我只配置了一个VPC。

我配置了 1 个 NAT 网关。

我配置了 1 个 Internet 网关。

我在 VPC 中有 6 个子网:

我在 VPC 中有 2 个端点:

最后,我有 3 个路由表:

我很确定我缺少的是简单的东西。请帮忙

非常感谢。

您配置了很多东西!我不确定其中有多少是想要修复这种特定情况的一部分,或者您是否对 NAT 网关、VPC 端点等有其他需求

启用连接 VPC 的 Lambda 函数调用 Internet(例如,API 调用 Amazon S3)的最简单设置是:

  • NAT 网关 添加到 Public 子网
  • 将 Lambda 函数附加到 私有子网
  • 在私有子网上设置路由以使用 0.0.0.0/0
  • 的 NAT 网关

这足以让 VPC 附加的 Lambda 函数访问互联网。