Cannot access S3 bucket using flask+lambda

0

I made a lambda function with the following code (runtime python3.7). The role of the lambda has "AmazonS3FullAccess". However, I got "botocore.exceptions.ConnectTimeoutError" at the line "ret= client.list_objects_v2(Bucket='myfiles');".

What is the problem? How can flask+lambda access S3 objects?

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";

nemy
已提問 2 年前檢視次數 390 次
1 個回答
0
已接受的答案

Is your lambda function VPC enabled? If not, you should not have any issues connecting to S3 from your lambda function, unless there are bucket policies preventing access.

If your lambda function is VPC enabled, you can create a NAT Gateway in your VPC as mentioned here - https://aws.amazon.com/premiumsupport/knowledge-center/internet-access-lambda-function/

Another better option is to create an interface VPC endpoint for S3 in your VPC. That way the lambda function will be able to connect to the S3 endpoint over the Amazon network without needing to go over the internet - https://docs.aws.amazon.com/AmazonS3/latest/userguide/privatelink-interface-endpoints.html

profile pictureAWS
專家
已回答 2 年前
  • Many thanks! It is solved!

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

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

回答問題指南