我有以下 lambda 函式代碼,用于簡單地從 S3 存盤桶中列印出 CSV 檔案的列名。
import json
import boto3
import csv
s3_client = boto3.client('s3')
def lambda_handler(event, context):
# TODO implement
print(event)
bucket = event['Records'][0]['s3']['bucket']['name']
csv_file = event['Records'][0]['s3']['object']['key']
response = s3_client.get_object(Bucket=bucket, Key=csv_file)
lines = response['Body'].read().decode('utf-8').split()
results = []
for row in csv.DictReader(lines):
results.append(row.name())
print(results)
return {
'statusCode': 200,
'body': json.dumps('Hello from Lambda!')
}
但是,我在測驗時收到以下錯誤:
[ERROR] KeyError: 'Records'
Traceback (most recent call last):
File "/var/task/lambda_function.py", line 10, in lambda_handler
bucket = event['Records'][0]['s3']['bucket']['name']
不知道我哪里錯了!誰能告訴我如何解決這個問題?
手動更新“測驗”事件后,我收到此錯誤;
Test Event Name
TestEvent2
Response
{
"errorMessage": "An error occurred (AccessDenied) when calling the GetObject operation: Access Denied",
"errorType": "ClientError",
"stackTrace": [
" File \"/var/task/lambda_function.py\", line 13, in lambda_handler\n response = s3_client.get_object(Bucket=bucket, Key=csv_file)\n",
" File \"/var/runtime/botocore/client.py\", line 386, in _api_call\n return self._make_api_call(operation_name, kwargs)\n",
" File \"/var/runtime/botocore/client.py\", line 705, in _make_api_call\n raise error_class(parsed_response, operation_name)\n"
]
}
我可以完全訪問我的 S3 存盤桶。此外,在列印事件時,它會顯示正確的物件名稱、s3 存盤桶名稱、記錄 [] 等。
uj5u.com熱心網友回復:
發生錯誤是因為您Test在 AWS 控制臺中使用。在這種情況下,會提供一些默認值event。對于您的代碼,您必須為您的用例提供有效的 S3 事件。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/414655.html
標籤:
