Amazon S3 是否支持符号链接?

Does Amazon S3 support symlinks?

我有一个对象,我想使用不同的键对其进行寻址,而无需实际复制对象本身,例如 Linux 中的符号链接。 Amazon S3 是否提供这样的东西?

S3 不支持符号链接的概念,其中一个 object 键被视为另一个 object 键的别名。 (您之前可能听说过:S3 不是文件系统。它是 object 存储)。

如果您使用静态网站托管功能,可以部分模拟此功能,使用 object-level 重定向:

http://docs.aws.amazon.com/AmazonS3/latest/dev/how-to-page-redirect.html

这会导致对 "object-a" 的请求收到 301 Moved Permanently 响应,URL 对 "object-b" 在 Location: header,其目的相似,但当然还是有很大的不同。它仅在请求到达网站端点(而非 REST 端点)时有效。

如果您在 EC2 中使用反向代理(haproxy、nginx 等)来处理传入请求并将它们转发到存储桶,那么您当然可以选择在代理层重写请求 URL 在转发到 S3 之前,这样您就可以将传入的请求路径转换为您需要呈现给 S3 的任何内容。这有多实用取决于您的应用程序和动机,但这是我用来修改在特定存储桶中出现 object 的位置(与实际存储位置相比)的策略之一,允许我重写路径基于请求中的其他属性。

我有一个类似的问题,需要一个解决方案,我将在下面描述。虽然 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)。

这实际上只是一种解决方法,因为它不是真正的符号链接,而是一种模拟符号链接的创造性解决方案。

没有符号链接,但可能 object 到多个键。

请参考 Rodrigo 在 Amazon S3 - Multiple keys to one object

的回答

如果您正在使用 S3 上的网站,您可以通过 header x-amz-website-redirect-location

如果您不使用网站服务,您可以创建自定义 header (x-amz-meta-KeyAlias) 并手动处理。