尝试在AWS Lambda函数中下载文件时如何修复“ ClientError:调用HeadObject操作时发生错误(403):禁止”

时间:2019-04-29 18:06:15

标签: python-3.x amazon-web-services amazon-s3 boto3

尝试致电"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'
)

我希望该文件可以无错误地下载,就像我在计算机上测试代码时一样。

0 个答案:

没有答案