AWS Lambda S3 ::: ObjectCreated:Put事件返回无效的对象键

时间:2018-02-26 09:25:19

标签: amazon-web-services amazon-s3 amazon-iam aws-lambda

美好的一天!

我正在构建一个lambda函数,该函数应该调整保存在特定存储桶中的图像并将它们重新保存在不同前缀下的同一个存储桶中(lambda将首先检查此前缀以避免无限循环)。当我尝试上传图片时,' 123.jpg'例如,处理函数下的event.Resource [0] .s3.object.key将返回' undefined2018-02-26-08-40-37-DBAB838DACA3F368'

你可以想象,这导致我的lambda函数崩溃。任何人都对此有任何想法,请让我知道,因为我已经敲了几个星期这一点。请在下面找到其他资源。请注意,我还在s3存储桶设置下创建了一个lambda事件: -

lambda事件的LOGS

event: { Records: 
 [ { 
     eventVersion: '2.0',
     eventSource: 'aws:s3',
     awsRegion: 'us-east-1',
     eventTime: '2018-02-26T08:40:37.281Z',
     eventName: 'ObjectCreated:Put',
     userIdentity: { principalId: 'XXXXXXXXXXXXX' },
     requestParameters: { sourceIPAddress: '8.8.8.8' },
     responseElements: 
     { 
       'x-amz-request-id': '05465A75942F4593',
       'x-amz-id-2': 'GWXnftcTHzfdAOuH40R2LO+h2laQhcO9eeU4JIzsRfYpL3HsDHmxzmqvE6lIlmAfcDO8O+gXU6U=' 
     },
     s3: { 
        s3SchemaVersion: '1.0',
        configurationId: '19945d41-71f2-4ae0-9004-b1c6c06b06da',
        bucket: { 
          name: 'sample-bucket-23',
          ownerIdentity: { principalId: 'XXXXXXXXXXXX' },
          arn: 'arn:aws:s3:::sample-bucket-23' 
       },
       object: { 
          key: 'undefined2018-02-26-08-40-37-DBAB838DACA3F368',
          size: 355,
          eTag: '56b6395fe1bfea7cb98cd55d3cba3933',
          sequencer: '005A93C8053FEF92A2' 
       } 
    } 
 } 
 ] }

Lambda访问权限

{
  "roleName": "lambda_full_s3_v2",
  "policies": [
    {
      "document": {
        "Version": "2012-10-17",
        "Statement": [
          {
            "Effect": "Allow",
            "Action": [
              "s3:ListBucket"
            ],
            "Resource": [
              "arn:aws:s3:::sample-bucket-23"
            ]
          },
          {
            "Effect": "Allow",
            "Action": [
              "s3:PutObject",
              "s3:GetObject",
              "s3:DeleteObject"
            ],
            "Resource": [
              "arn:aws:s3:::sample-bucket-23/*"
            ]
          },
          {
            "Action": [
              "logs:CreateLogGroup",
              "logs:CreateLogStream",
              "logs:PutLogEvents"
            ],
            "Effect": "Allow",
            "Resource": "arn:aws:logs:*:*:*"
          }
        ]
      },
      "name": "oneClick_lambda_basic_execution_1519631544835",
      "type": "inline"
    }
  ]

1 个答案:

答案 0 :(得分:1)

这不是您上传触发的事件。这是由写入存储桶的新日志文件触发的事件,因为您已将存储桶配置为将其日志写入自身,而不是写入同一区域中的其他存储桶。

  

Amazon S3对目标存储桶中上传的日志对象使用以下对象键格式:

     

TargetPrefixYYYY-mm-DD-HH-MM-SS-UniqueString

     

https://docs.aws.amazon.com/AmazonS3/latest/dev/ServerLogs.html

您需要更改事件触发器以仅查看图像的前缀,重新配置Lambda代码以忽略与此模式匹配的条目,或创建单独的存储桶以捕获日志。

(我怀疑当你没有指定前缀时,日志对象键开头的字符串undefined的外观是一个控制台错误。你也可以改变你的存储桶记录用于为日志文件添加前缀的配置,例如logs/,如果您希望将它们写入此存储桶。)