首页 > 解决方案 > 如何使用 lambda 函数跨区域复制存储桶内容

问题描述

如何通过 lambda 函数将弗吉尼亚存储桶中的内容复制到爱尔兰存储桶?

我正在尝试在弗吉尼亚创建 lambda 函数:

const aws = require('aws-sdk');
const s3 = new aws.S3();
s3.copyObject({
    Bucket: 'my-bucket-in-ireland',
    CopySource: 'my-bucket-in-virginia' + '/' + 'myKey.zip',
    Key: 'myKey.zip'
}, function (err, data) {
    // further handling logic goes here
});

但我得到一个错误:

"The authorization header is malformed; the region 'us-east-1' is wrong; expecting 'eu-west-1'"

标签: amazon-web-servicesaws-lambdaamazon-cloudformation

解决方案


该问题似乎与 AWS 签名计算有关。我认为 s3 客户端正在使用 lambda 函数的区域(us-east-1)。但我认为出于签名计算的目的,它期望该区域是目标存储桶的区域(eu-west-1)。您可以尝试将区域传递给 s3 客户端并查看签名是否被接受?

const aws = require('aws-sdk');
const s3 = new aws.S3({region: 'eu-west-1'});

推荐阅读