尝试致电"errorMessage": "An error occurred (403) when calling the HeadObject operation: Forbidden"
时得到s3.download_file
(请参见下面的代码)。
我看了无数帖子,但似乎都不是我的问题所在的AWS Lambda打电话给他们。
我的代码在我的计算机上本地运行,所以我猜到问题涉及Lambda。 Lambda函数最终将由S3事件触发,但在测试过程中将不起作用。
我的IAM用户具有对S3和Lambda的完全访问权限。
AWS Lambda功能代码:
import json
import boto3
import logging
log = logging.getLogger()
log.setLevel(logging.INFO)
s3 = boto3.client('s3')
def lambda_handler(event, context):
document_name = event['Records'][0]['s3']['object']['key']
bucket = event['Records'][0]['s3']['bucket']['name']
log.info('Performing stuff on {}/{}'.format(bucket, document_name))
# download the file
s3.download_file(
Bucket=bucket,
Key=document_name,
Filename=document_name
)
log.info('here it is!')
return event
(我什至尝试将信息显式输入s3.download_file
中,而不是从event
中获取,但无济于事。日志消息确认这是正确的路径。)
在测试事件配置中传递的参数:
...
"s3": {
...
"bucket": {
"name": "bucket-name",
...
"object": {
"key": "filename.pdf",
本地计算机上的代码:
import boto3
s3 = boto3.client('s3')
s3.download_file(
Bucket='bucket-name',
Key='filename.pdf',
Filename='filename.pdf'
)
我希望该文件可以无错误地下载,就像我在计算机上测试代码时一样。