无法使用 Flask + Lambda 访问 S3 存储桶

0

【以下的问题经过翻译处理】 我创建了一个具有以下代码的 Lambda 函数(运行时为 Python 3.7)。Lambda 的角色具有 "AmazonS3FullAccess" 权限。然而,我在 "ret = client.list_objects_v2(Bucket='myfiles')" 这一行遇到了 "botocore.exceptions.ConnectTimeoutError" 错误。

这个问题是什么原因引起的?如何让 Flask + Lambda 访问 S3 对象?

import awsgi
from flask import Flask
import boto3;

app = Flask(__name__)

def lambda_handler(event,context):
    return awsgi.response(app,event,context);

@app.route("/",methods=["GET"])
def index():
  s3 = boto3.resource('s3');
  client = s3.meta.client;
  ret= client.list_objects_v2(Bucket='myfiles');
  print(ret);
  return "hello world";
profile picture
专家
已提问 5 个月前21 查看次数
1 回答
0

【以下的回答经过翻译处理】 你的 Lambda 函数是否启用了 VPC?如果没有启用,那么从 Lambda 函数连接到 S3 不应该有问题,除非有存储桶策略限制了访问。

如果你的 Lambda 函数启用了 VPC,你可以在你的 VPC 中创建一个 NAT 网关,具体步骤见这里:https://aws.amazon.com/premiumsupport/knowledge-center/internet-access-lambda-function/

另一个更好的选择是在你的 VPC 中为 S3 创建一个接口 VPC 端点。这样,Lambda 函数将能够通过 Amazon 网络连接到 S3 端点,而无需通过互联网进行连接,具体信息请参考:https://docs.aws.amazon.com/AmazonS3/latest/userguide/privatelink-interface-endpoints.html

profile picture
专家
已回答 5 个月前

您未登录。 登录 发布回答。

一个好的回答可以清楚地解答问题和提供建设性反馈,并能促进提问者的职业发展。

回答问题的准则