使用Chalice Framework AWS读取S3文件内容失败

时间:2018-09-28 12:00:17

标签: amazon-s3 aws-lambda boto3 chalice

我正在尝试读取我先前写的S3文件的内容。当我从本地boto3脚本中读取时,我可以看到文件的内容,但是当我使用Chalice在Lambda上运行代码时,我收到“ NotFoundError”

这是Chalice App的代码

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'))

关于我想念什么的任何想法吗?

1 个答案:

答案 0 :(得分:0)

一旦验证了lambda功能的访问级别,我就遇到了同样的问题,但是为lambda函数提供s3访问可以解决此问题,并验证lambda和s3文件是否都在同一s3区域中。