我的 AWS Lambda 函数有啥问题?
Posted
技术标签:
【中文标题】我的 AWS Lambda 函数有啥问题?【英文标题】:What is wrong with my AWS Lambda function?我的 AWS Lambda 函数有什么问题? 【发布时间】:2015-03-17 08:25:03 【问题描述】:我已按照本教程使用 AWS Lambda 创建图像缩略图到另一个存储桶:http://docs.aws.amazon.com/lambda/latest/dg/walkthrough-s3-events-adminuser-create-test-function-upload-zip-test.html
我已经完成了本教程前面的所有步骤,但是当我从上面的链接在 Lambda 测试中运行下面的代码时
"Records":[
"eventVersion":"2.0",
"eventSource":"aws:s3",
"awsRegion":"us-east-1",
"eventTime":"1970-01-01T00:00:00.000Z",
"eventName":"ObjectCreated:Put",
"userIdentity":
"principalId":"AIDAJDPLRKLG7UEXAMPLE"
,
"requestParameters":
"sourceIPAddress":"127.0.0.1"
,
"responseElements":
"x-amz-request-id":"C3D13FE58DE4C810",
"x-amz-id-2":"FMyUVURIY8/IgAtTv8xRjskZQpcIZ9KG4V5Wp6S7S/JRWeUWerMUE5JgHvANOjpD"
,
"s3":
"s3SchemaVersion":"1.0",
"configurationId":"testConfigRule",
"bucket":
"name":"sourcebucket",
"ownerIdentity":
"principalId":"A3NL1KOZZKExample"
,
"arn":"arn:aws:s3:::sourcebucket"
,
"object":
"key":"HappyFace.jpg",
"size":1024,
"eTag":"d41d8cd98f00b204e9800998ecf8427e",
"versionId":"096fKKXTRTtl3on89fVO.nfljtsv6qko"
]
我收到错误消息
无法调整 sourcebucket/HappyFace.jpg 的大小并上传到 sourcebucketresized/resized-HappyFace.jpg 由于错误: PermanentRedirect:您尝试访问的存储桶必须是 使用指定的端点寻址。请发送所有未来 对此端点的请求。 END RequestId: 345345...
我已更改存储桶名称、eTag 和图像名称。我需要更改其他内容吗?我的地区是正确的。我需要编辑“principalId”吗?我在哪里可以找到它?
怎么了。
【问题讨论】:
【参考方案1】:您的问题与“端点”有关。您必须将“arn”:“arn:aws:s3:::sourcebucket”更改为“arn”:“arn:aws:s3:::(name_of_your_bucket)”。与 "name":"sourcebucket" 到 "name":"(name_of_your_bucket)" 相同。
为了避免出现更多问题,您必须上传一个名为 HappyFace.jpg 的 jpg 到您的存储桶或在 s3 中更改放置测试对象代码。
问候
【讨论】:
【参考方案2】:就我而言,问题出在存储桶区域。在示例中使用了“us-east-1”,但我的存储桶在“eu-west-1”上,所以我必须更改两件事:
"awsRegion":"eu-west-1",
在 lambda 测试文件中
在我的 nodejs lambda 代码中设置区域:AWS.config.update("region": "eu-west-1")
当然你还需要在 lambda 测试文件中设置以下值:
name: 'your_bucket_name_here',
arn: 'arn:aws:s3:::your_bucket_name_here'
修改后,它按预期工作
【讨论】:
【参考方案3】:尝试使用这种更新的格式(请仔细配置密钥、存储桶名称、arn 和 awsRegion 到您自己的设置):
"Records": [
"eventVersion": "2.0",
"eventTime": "1970-01-01T00:00:00.000Z",
"requestParameters":
"sourceIPAddress": "127.0.0.1"
,
"s3":
"configurationId": "testConfigRule",
"object":
"eTag": "0123456789abcdef0123456789abcdef",
"sequencer": "0A1B2C3D4E5F678901",
"key": "HappyFace.jpg",
"size": 1024
,
"bucket":
"arn": "arn:aws:s3:::myS3bucket",
"name": "myS3bucket",
"ownerIdentity":
"principalId": "EXAMPLE"
,
"s3SchemaVersion": "1.0"
,
"responseElements":
"x-amz-id-2": "EXAMPLE123/5678abcdefghijklambdaisawesome/mnopqrstuvwxyzABCDEFGH",
"x-amz-request-id": "EXAMPLE123456789"
,
"awsRegion": "us-east-1",
"eventName": "ObjectCreated:Put",
"userIdentity":
"principalId": "EXAMPLE"
,
"eventSource": "aws:s3"
]
【讨论】:
以上是关于我的 AWS Lambda 函数有啥问题?的主要内容,如果未能解决你的问题,请参考以下文章
AWS lambda 和 AWS Lambda@EDGE 有啥区别?
有啥方法可以在 AWS Lambda 中获取 Cognito 用户名?
我可以确定哪个 AWS 服务触发了我的 Lambda 函数吗?