【问题标题】:How do I get the AWS S3 Website Endpoint URL through the API?如何通过 API 获取 AWS S3 网站终端节点 URL?
【发布时间】:2020-11-13 11:30:45
【问题描述】:

我能否通过 AWS 开发工具包获取 AWS S3 网站终端节点 URL(如此表中的 http://docs.aws.amazon.com/AmazonS3/latest/dev/WebsiteEndpoints.html)?好像没找到。

在以编程方式创建存储桶并放置存储桶网站设置后,我需要它: http://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/S3.html#putBucketWebsite-property

【问题讨论】:

  • 我目前创建了一个简单的地图,但我真的不想在亚马逊添加/删除区域或修改网址时更新它:gist.github.com/danielmahal/87522603e1d86fd66948b8c4a25fc010
  • 如果您想添加更多信息,请更新您的问题而不是评论。
  • 谢谢@zajonc。问题实际上是stackoverflow只让我发布两个链接

标签: amazon-web-services amazon-s3


【解决方案1】:

桶的模式是${bucket}.s3-website-<region>.amazonaws.com(这是更通用的形式,适用于所有地区,见http://docs.aws.amazon.com/general/latest/gr/rande.html#s3_region,而${bucket}.s3-website.<region>.amazonaws.com的形式并不适用于所有地区)

如果你想知道你的存储桶的区域名称,你可以使用以下命令

aws s3api get-bucket-location --bucket <your-bucket>

你会得到

{
    "LocationConstraint": null
}

这意味着您的存储桶已在 us-east-1 中创建 或者对于任何其他地区,您将正确获得地区名称

{
    "LocationConstraint": "eu-central-1"
}

作为补充,如果您真的想构建可用终端节点列表,AWS SDK(s3s3api)不提供此列表(截至今天)

使用 CLI 最接近的方法是从 ec2 区域获取列表。它将假设当有一个部署了 ec2 的新区域时,也部署了 s3(我不能保证有一天不会出现这种情况,但现在可以假设是否有一个新区域 ec2 和 s3 是至少服务 aws 将部署)

这样你就可以跑了

$ aws ec2 describe-regions
{
    "Regions": [
        {
            "Endpoint": "ec2.ap-south-1.amazonaws.com",
            "RegionName": "ap-south-1"
        },
        {
            "Endpoint": "ec2.eu-west-1.amazonaws.com",
            "RegionName": "eu-west-1"
        },
        {
            "Endpoint": "ec2.ap-southeast-1.amazonaws.com",
            "RegionName": "ap-southeast-1"
        },
        {
            "Endpoint": "ec2.ap-southeast-2.amazonaws.com",
            "RegionName": "ap-southeast-2"
        },
        {
            "Endpoint": "ec2.eu-central-1.amazonaws.com",
            "RegionName": "eu-central-1"
        },
        {
            "Endpoint": "ec2.ap-northeast-2.amazonaws.com",
            "RegionName": "ap-northeast-2"
        },
        {
            "Endpoint": "ec2.ap-northeast-1.amazonaws.com",
            "RegionName": "ap-northeast-1"
        },
        {
            "Endpoint": "ec2.us-east-1.amazonaws.com",
            "RegionName": "us-east-1"
        },
        {
            "Endpoint": "ec2.sa-east-1.amazonaws.com",
            "RegionName": "sa-east-1"
        },
        {
            "Endpoint": "ec2.us-west-1.amazonaws.com",
            "RegionName": "us-west-1"
        },
        {
            "Endpoint": "ec2.us-west-2.amazonaws.com",
            "RegionName": "us-west-2"
        }
    ]
}

然后您可以应用模式${bucket}.s3-website-&lt;RegionName&gt;.amazonaws.com

【讨论】:

  • 感谢您的回答@frédéric-henri!好的,您的意思是${bucket}.s3-website.&lt;region&gt;.amazonaws.com,而不是第二个参考中的${bucket}.s3.website-&lt;region&gt;.amazonaws.com,对吧?您提供的第一个/最后一个模式不适用于 eu-central-1。我已经有了桶的位置,所以其余的无关紧要。我需要动态生成这个 url,维护我自己的不同区域的匹配 url 列表似乎很麻烦。如果 AWS 使用新的 url 模式设置了一个新区域,则必须对其进行更新。
  • 我理解这个问题,并且很明显维护硬编码列表很糟糕 - 我已经使用 us-east-1 和 eu-central-1 进行了测试,并且确实发现了应用模式 ${bucket}.s3-website-&lt;region&gt;.amazonaws.com 的问题eu-central-1,实际上连主机s3-website-eu-central-1.amazonaws.com都不存在
  • 该解决方案似乎在我完成的 2 个测试(us-east-1 和 eu-central-1)中使用了模式 ${bucket}.s3.dualstack.&lt;region&gt;.amazonaws.com 它有效,并且从文档中它是有效的所有地区的终点
  • 啊,我以前没见过这个,谢谢。虽然它似乎不适用于静态网站托管?我尝试并得到拒绝访问的响应。好像我不是唯一一个 - twitter.com/rb2k/status/763788520167137281
  • 嗯 .. 我让它为我工作:report.pws-sourcing.com.s3.dualstack.us-east-1.amazonaws.com/… ; bucket 是静态网站和静态网站存储桶的默认策略。前几天我在欧盟中部地区用一个桶做了一个测试,它也工作得很好
猜你喜欢
  • 2021-10-22
  • 2019-09-06
  • 2020-02-07
  • 2020-12-04
  • 2017-03-08
  • 2022-01-09
  • 2017-07-27
  • 2017-10-19
  • 1970-01-01
相关资源
最近更新 更多