我的 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 用户名?

lambda 函数有啥用? [复制]

我可以确定哪个 AWS 服务触发了我的 Lambda 函数吗?

我的带有 lambda 函数的 AWS API Gateway REST API 返回 Null,如何解决这个问题?

AWS lambda函数未终止线程