复制到另一个存储桶后,从源存储桶中删除吗?

时间:2019-01-29 09:09:24

标签: javascript node.js amazon-web-services amazon-s3

因此,我需要创建一个lambda函数,在其中选择源存储桶中的图像并调整其大小。完成此操作后,它将调整大小后的图像放入另一个存储桶中。我一直在aws网站上关注一个教程,但是现在我需要添加功能,以便它从原始存储桶中删除原始图像。

已经通过许多不同的方式进行了尝试,但是无法正常工作。请帮助。

    async.waterfall([
        function download(next) {
            // Download the image from S3 into a buffer.
            s3.getObject({
                    Bucket: srcBucket,
                    Key: srcKey
                },
                next);
            },
        function transform(response, next) {
            gm(response.Body).size(function(err, size) {
                // Infer the scaling factor to avoid stretching the image unnaturally.
                var scalingFactor = Math.min(
                    MAX_WIDTH / size.width,
                    MAX_HEIGHT / size.height
                );
                var width  = scalingFactor * size.width;
                var height = scalingFactor * size.height;

                // Transform the image buffer in memory.
                this.resize(width, height)
                    .toBuffer(imageType, function(err, buffer) {
                        if (err) {
                            next(err);
                        } else {
                            next(null, response.ContentType, buffer);
                        }
                    });
            });
            },
            function upload(contentType, data, next) {
                // Stream the transformed image to a different S3 bucket.
                s3.putObject({
                        Bucket: dstBucket,
                        Key: dstKey,
                        Body: data,
                        ContentType: contentType
                    },
                    next);
            },
            function deleteOrig(err) {
              s3.deleteObject({
                Bucket: srcBucket,
                Key: srcKey
              }){
                if(err) {
                  console.log(err);
                }
              }
            }
        ], function (err) {
            if (err) {
                console.error(
                    'Unable to resize ' + srcBucket + '/' + srcKey +
                    ' and upload to ' + dstBucket + '/' + dstKey +
                    ' due to an error: ' + err
                );
            } else {
                console.log(
                    'Successfully resized ' + srcBucket + '/' + srcKey +
                    ' and uploaded to ' + dstBucket + '/' + dstKey
                );
            }

            callback(null, "message");
        }
    );
};

在Lambda中,按照以下日志返回成功:

START RequestId: f4a00fce-c283-4801-a902-03d450db8a8d Version: $LATEST
2019-01-29T10:07:19.012Z    f4a00fce-c283-4801-a902-03d450db8a8d    Reading options from event:
 { Records: 
   [ { eventVersion: '2.0',
       eventSource: 'aws:s3',
       awsRegion: 'us-west-2',
       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: 'ciansource',
             ownerIdentity: { principalId: 'A3NL1KOZZKExample' },
             arn: 'arn:aws:s3:::ciansource' },
          object: 
           { key: 'football.jpg',
             size: 1024,
             eTag: 'd41d8cd98f00b204e9800998ecf8427e',
             versionId: '096fKKXTRTtl3on89fVO.nfljtsv6qko' } } } ] }
2019-01-29T10:07:19.281Z    f4a00fce-c283-4801-a902-03d450db8a8d    { AccessDenied: Access Denied
    at Request.extractError (/var/runtime/node_modules/aws-sdk/lib/services/s3.js:577:35)
    at Request.callListeners (/var/runtime/node_modules/aws-sdk/lib/sequential_executor.js:105:20)
    at Request.emit (/var/runtime/node_modules/aws-sdk/lib/sequential_executor.js:77:10)
    at Request.emit (/var/runtime/node_modules/aws-sdk/lib/request.js:683:14)
    at Request.transition (/var/runtime/node_modules/aws-sdk/lib/request.js:22:10)
    at AcceptorStateMachine.runTo (/var/runtime/node_modules/aws-sdk/lib/state_machine.js:14:12)
    at /var/runtime/node_modules/aws-sdk/lib/state_machine.js:26:10
    at Request.<anonymous> (/var/runtime/node_modules/aws-sdk/lib/request.js:38:9)
    at Request.<anonymous> (/var/runtime/node_modules/aws-sdk/lib/request.js:685:12)
    at Request.callListeners (/var/runtime/node_modules/aws-sdk/lib/sequential_executor.js:115:18)
  message: 'Access Denied',
  code: 'AccessDenied',
  region: null,
  time: 2019-01-29T10:07:19.279Z,
  requestId: '7FDDB3FAD06B6A81',
  extendedRequestId: '6N6cxCFzgupDhpukxcVHOaFECYKl/0cQx7lc40qVGYnYr2efnXarfQ9ztQ3/nU8Fu6WpRurJ7Ps=',
  cfId: undefined,
  statusCode: 403,
  retryable: false,
  retryDelay: 10.888386530079242 } 'AccessDenied: Access Denied\n    at Request.extractError (/var/runtime/node_modules/aws-sdk/lib/services/s3.js:577:35)\n    at Request.callListeners (/var/runtime/node_modules/aws-sdk/lib/sequential_executor.js:105:20)\n    at Request.emit (/var/runtime/node_modules/aws-sdk/lib/sequential_executor.js:77:10)\n    at Request.emit (/var/runtime/node_modules/aws-sdk/lib/request.js:683:14)\n    at Request.transition (/var/runtime/node_modules/aws-sdk/lib/request.js:22:10)\n    at AcceptorStateMachine.runTo (/var/runtime/node_modules/aws-sdk/lib/state_machine.js:14:12)\n    at /var/runtime/node_modules/aws-sdk/lib/state_machine.js:26:10\n    at Request.<anonymous> (/var/runtime/node_modules/aws-sdk/lib/request.js:38:9)\n    at Request.<anonymous> (/var/runtime/node_modules/aws-sdk/lib/request.js:685:12)\n    at Request.callListeners (/var/runtime/node_modules/aws-sdk/lib/sequential_executor.js:115:18)'
END RequestId: f4a00fce-c283-4801-a902-03d450db8a8d
REPORT RequestId: f4a00fce-c283-4801-a902-03d450db8a8d  Duration: 273.72 ms Billed Duration: 300 ms     Memory Size: 1024 MB    Max Memory Used: 39 MB  

1 个答案:

答案 0 :(得分:0)

我可以使用它,但我没有获得我正在使用的从s3中删除权限的角色。当我添加该策略时,它便对其进行了修复。感谢所有提供帮助的人!