我正在尝试读取我先前写的S3文件的内容。当我从本地boto3脚本中读取时,我可以看到文件的内容,但是当我使用Chalice在Lambda上运行代码时,出现“NotFoundError”
这是 chalice 应用程序的代码
from chalice import Chalice
import boto3
import json
from botocore.exceptions import ClientError
from chalice import NotFoundError
app = Chalice(app_name='scraper-one')
app.debug = True
s3 = boto3.resource('s3')
bucket = 'scraper-one'
key = 'csv'
@app.route("/")
def index():
return {"hello": "world"}
@app.route('/{content}', methods=['GET', 'PUT'])
def to_s3(content):
request = app.current_request
if request.method == 'PUT':
s3.put_object(bucket=bucket, Key=key, Body=content)
return {"content": content}
elif request.method == 'GET':
try:
obj = s3.Object(bucket, key)
return json.loads(obj.get()['Body'].read().decode('utf-8'))
except ClientError as e:
raise NotFoundError(key)
这是可以正常工作的本地脚本。
import boto3
s3 = boto3.resource('s3')
bucket = 'scraper-one'
key = 'csv'
obj = s3.Object(bucket, key)
print(obj.get()['Body'].read().decode('utf-8'))
关于我缺少什么的任何想法?
最佳答案
一次验证了lambda功能的访问级别。我也遇到了同样的问题,但是赋予了lambda函数s3访问权限解决了该问题,并验证了lambda和s3文件是否都在同一s3区域中。
关于amazon-s3 - 使用Chalice Framework AWS读取S3文件内容失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52554871/