如何同步含自定义--endpoint-url与标准地址的S3存储桶?
刚好处理过类似的需求,AWS CLI默认只会用一个endpoint配置,所以得用点小技巧来跨不同endpoint同步。下面给你两种实用方案:
这个方法适合长期使用,配置一次之后就不用每次输一堆密钥了。
配置自定义存储的Profile
运行下面的命令,按照提示输入你的StackPath存储的Access Key、Secret Key,Region填对应的值(比如示例里的us-east-2),输出格式直接回车留空就行:aws configure --profile stackpath配置标准AWS S3的Profile
如果你的机器上还没配置过AWS CLI,或者需要单独用一个profile来同步,运行:aws configure --profile aws-s3
输入你的AWS账号Access Key、Secret Key,以及目标桶所在的Region(比如us-east-1)。执行同步命令
从自定义存储桶同步到标准S3:
aws s3 sync s3://your-stackpath-bucket/ s3://your-aws-s3-bucket/ --source-profile stackpath --profile aws-s3 --endpoint-url=https://s4.us-east-2.stackpathstorage.com
这里--source-profile指定源存储的配置,--profile指定目标S3的配置,--endpoint-url对应源的自定义地址,目标标准S3会自动使用默认的s3.amazonaws.com。从标准S3同步到自定义存储桶:
aws s3 sync s3://your-aws-s3-bucket/ s3://your-stackpath-bucket/ --source-profile aws-s3 --profile stackpath --endpoint-url=https://s4.us-east-2.stackpathstorage.com
这次--endpoint-url是目标自定义存储的地址,--source-profile用AWS的配置,--profile用StackPath的配置。
如果只是偶尔同步一次,不想配置Profiles,可以直接把密钥、Region等参数写在命令里:
- 自定义存储 → 标准S3:
aws s3 sync s3://your-stackpath-bucket/ s3://your-aws-s3-bucket/ \ --endpoint-url=https://s4.us-east-2.stackpathstorage.com \ --source-region us-east-2 \ --source-access-key-id YOUR_STACKPATH_ACCESS_KEY \ --source-secret-access-key YOUR_STACKPATH_SECRET_KEY \ --region us-east-1 \ --access-key-id YOUR_AWS_ACCESS_KEY \ --secret-access-key YOUR_AWS_SECRET_KEY
- 标准S3 → 自定义存储:
aws s3 sync s3://your-aws-s3-bucket/ s3://your-stackpath-bucket/ \ --endpoint-url=https://s4.us-east-2.stackpathstorage.com \ --source-region us-east-1 \ --source-access-key-id YOUR_AWS_ACCESS_KEY \ --source-secret-access-key YOUR_AWS_SECRET_KEY \ --region us-east-2 \ --access-key-id YOUR_STACKPATH_ACCESS_KEY \ --secret-access-key YOUR_STACKPATH_SECRET_KEY
- 权限检查:确保源桶的密钥有读取权限,目标桶的密钥有写入权限,否则会报权限错误。
- 测试先行:在正式同步前,可以加
--dryrun参数,预览会执行的操作,避免误操作:aws s3 sync ... --dryrun - 特性兼容性:有些S3兼容存储可能不支持AWS的全部特性,如果遇到报错,可以尝试加
--no-progress或者检查存储提供商的文档,调整参数。
内容的提问来源于stack exchange,提问作者Jaroslav




