我有一个对象,我想使用不同的键来解决,而不是实际复制对象本身,就像Linux中的符号链接一样。 Amazon S3是否提供此类功能?
答案 0 :(得分:34)
S3不支持符号链接的概念,其中一个对象键被视为另一个对象键的别名。 (您之前可能听说过:S3不是文件系统。它是一个对象存储区。)
如果您使用的是静态网站托管功能,则可以使用对象级重定向对此功能进行部分模拟:
http://docs.aws.amazon.com/AmazonS3/latest/dev/how-to-page-redirect.html
这会导致对" object-a"的请求接受301 Moved Permanently
回复的问候,其中包含" object-b"在Location:
标题中,它具有类似的用途,但当然仍然完全不同。它仅在请求到达网站端点(而不是REST端点)时才有效。
如果您在EC2中使用反向代理(haproxy,nginx等)来处理传入的请求并将它们转发到存储桶,那么您当然可以在代理层重写请求URL,然后再转发到S3 ,因此您可以将传入的请求路径转换为您需要呈现给S3的任何内容。这有多实用取决于你的应用程序和动机,但这是我用来修改特定存储桶中某个对象出现的位置与其实际存储位置相比的策略之一,允许我根据其他属性重写路径在请求中。
答案 1 :(得分:8)
我有一个类似的问题,需要一个解决方案,我将在下面介绍。虽然S3不支持符号链接,但您可以通过以下方式执行此操作:
echo "https://s3.amazonaws.com/my.bucket.name/path/to/a/targetfile" > file
aws s3 cp file s3://my.bucket.name/file
wget $(curl https://s3.amazonaws.com/my.bucket.name/file)
这实际上做的是获取文件的内容,这实际上只是指向目标文件的指针,然后将其传递给wget(curl也可以用于重定向到文件而不是wget)。
这实际上只是一个解决方法,因为它不是真正的符号链接,而是模拟符号链接的创造性解决方案。
答案 2 :(得分:3)
可能没有符号链接,但可能将同一对象链接到多个键。
请参考Rodrigo在Amazon S3 - Multiple keys to one object上的回答
如果您正在使用S3上的网站,则可以通过标题x-amz-website-redirect-location
如果您不使用网站服务,则可以创建自定义标题(x-amz-meta-KeyAlias
)并手动进行处理。