Amazon S3是否支持符号链接?

The*_*hat 49 symlink amazon-s3

我有一个对象,我想使用不同的键来解决,而不是实际复制对象本身,如Linux中的符号链接.Amazon S3提供这样的东西吗?

Mic*_*bot 41

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

如果您使用的是静态网站托管功能,则可以使用对象级重定向对此功能进行部分模拟:

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

这导致对"对象-a"的请求受到301 Moved Permanently响应的欢迎,Location:标题中的"object-b"的URL用于类似目的,但当然仍然完全不同.它仅在请求到达网站端点(而不是REST端点)时才有效.

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


小智 10

我有一个类似的问题,需要一个解决方案,我将在下面介绍.虽然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)
Run Code Online (Sandbox Code Playgroud)

这实际上做的是获取文件的内容,这实际上只是指向目标文件的指针,然后将其传递给wget(curl也可以用于重定向到文件而不是wget).

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

  • 这不是符号链接。这是直接复制的。存在有意义的、必然的差异 (5认同)
  • @code_monk 仔细看看。存储在“s3://my.bucket.name/file”中的是字符串文字“https://s3.amazonaws.com/my.bucket.name/path/to/a/targetfile”,而不是内容文件的。curl 命令检索该链接并将其传递给 wget。因此,与符号链接一样,文件内容既是间接的,又没有重复。 (3认同)
  • 现在有很多缺点:(1) S3 中有更多文件,(2) 一些文件现在只包含其他文件的路径,(3) 每个最终用户都知道有关文件结构的所有信息(路径到所有伪链接和实际文件),以及 (4) 现在您运行更多 HTTP 请求(由于 HTTP 重定向)。所以它不是实际的 _"symlink"_ ,而是(正如 @cdoughty 所写的)一种解决方法。_实际上有时**可以**达到目的。_ (2认同)

Tom*_*ero 6

符号链接不,但可能是多个键的相同对象。

请参阅 Rodrigo 在Amazon S3 上的回答- 一个对象的多个键

如果您使用的是在 S3 上提供服务的网站,则可以通过标头进行 x-amz-website-redirect-location

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