无法使用 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 個月前檢視次數 34 次
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 個月前

您尚未登入。 登入 去張貼答案。

一個好的回答可以清楚地回答問題並提供建設性的意見回饋,同時有助於提問者的專業成長。

回答問題指南