AWS S3自动对象密钥名称标准化为小写

时间:2019-02-28 09:12:13

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

AFAIK,AWS S3上的对象名称始终区分大小写,并且不可能将AWS S3配置为不区分大小写。

那么,是否可以配置AWS Lambda之类的东西,以将上传的文件名规范化为小写?或使用AWS S3执行此任务的最佳实践是什么?

1 个答案:

答案 0 :(得分:2)

是的,这可以通过让Lambda函数订阅您的S3 PUT事件来轻松完成。

{
  "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": bucketarn,
          "name": "sourcebucket",
          "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"
    }
  ]
}

然后,您可以获取event.Records [0] .s3.bucket.name和event.Records [0] .s3.object.key来向AWS发起copyObject请求

文件复制成功后,您就可以delete原始文件了。

只需确保仅将Lambda配置为用于PUT事件,因为如果将其设置为ALL事件,则COPY和DELETE也会触发您的函数,从而使您可以进行无限递归。