在Lambda函数中提取SQS队列消息



我有一个触发Lambda函数的SQS队列。我正在尝试解析SQS消息并提取相关数据。我特别尝试提取s3对象密钥和s3 bucket arn。

我当前的Lambda功能:

def lambda_handler(event, context):

for record in event['Records']:
payload = record['body']
print(str(payload))
objectKey = record['body']['s3']['object']['key']
bucketARN = record['body']['s3']['bucket']['arn']

print('Filename is: ' + str(objectKey))
print('Bucket ARN is: ' + str(bucketARN))

CloudWatch中显示的我的SQS消息:

{
"Records": [
{
"eventVersion": "2.1",
"eventSource": "aws:s3",
"awsRegion": "xxx",
"eventTime": "2021-03-27T19:39:41.694Z",
"eventName": "ObjectCreated:Put",
"userIdentity": {
"principalId": "AWS:AIDAQ5MMP4GQL2S4KQ2SZ"
},
"requestParameters": {
"sourceIPAddress": "xxx"
},
"responseElements": {
"x-amz-request-id": "xxx",
"x-amz-id-2": "xxx"
},
"s3": {
"s3SchemaVersion": "1.0",
"configurationId": "xxx",
"bucket": {
"name": "xxx",
"ownerIdentity": {
"principalId": "AHWVPEVW911DW"
},
"arn": "arn:aws:s3:::xxx"
},
"object": {
"key": "Audio1.mp3",
"size": 16659,
"eTag": "71d5ea0a7152e04d0d170be8146080ba",
"sequencer": "00605F8A02147F848A"
}
}
}
]
}

最后一个错误是:

[ERROR] TypeError: string indices must be integers
Traceback (most recent call last):
File "/var/task/transcribe.py", line 14, in lambda_handler
objectKey = record['body']['s3']['object']['key']

我也试过objectKey=record〔'Records〕〔0〕〔's3〕〕〔'object’〕〔'key’〕。谢谢

在这里找到了类似问题的有用答案。

这对我有效:

for record in event['Records']:     
#pull the body out & json load it
jsonmaybe = record['body']
jsonmaybe = json.loads(jsonmaybe)

objectKey = jsonmaybe['Records'][0]['s3']['object']['key']
print(objectKey)
bucketARN = jsonmaybe['Records'][0]['s3']['bucket']['arn']
print(bucketARN)

最新更新