无法使用 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
EXPERTE
gefragt vor 5 Monaten34 Aufrufe
1 Antwort
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
EXPERTE
beantwortet vor 5 Monaten

Du bist nicht angemeldet. Anmelden um eine Antwort zu veröffentlichen.

Eine gute Antwort beantwortet die Frage klar, gibt konstruktives Feedback und fördert die berufliche Weiterentwicklung des Fragenstellers.

Richtlinien für die Beantwortung von Fragen

Relevanter Inhalt