【问题标题】:Is it okay to fetch AWS region from SQS url?从 SQS url 获取 AWS 区域可以吗?
【发布时间】:2018-07-02 01:43:19
【问题描述】:

我有一个包含区域的 SQS URL。我正在使用官方 Go SDK 对此 SQS 执行操作,这需要 AWS 区域来初始化会话。目前,我已经编写了一个实用程序函数来解析 URL 并返回 AWS 区域。

示例网址:https://sqs.us-east-1.amazonaws.com/774557911234/my_sqs_name

示例初始化代码:

sess, err := session.NewSession()
if err != nil {
    return
}

s := sqs.New(sess, aws.NewConfig().WithRegion(getRegionFromSQSURL(config.SQSURL))

从 URL 获取区域的示例函数

func getRegionFromSQSURL(url string) string {
    return strings.Split(url, ".")[1]
}

只是想知道这是否是正确的方法。

是否存在 SQS URL 在 URL 中的区域与 SQS 所在区域不同的情况?

我是否应该在服务中再添加一个要设置的环境变量?

【问题讨论】:

  • 不,不行。尝试将其放入 SQS 的消息中。

标签: amazon-web-services go amazon-sqs aws-regions


【解决方案1】:

引用自这里:https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-queue-message-identifiers.html

重要

在您的系统中,始终将整个队列 URL 完全存储为 Amazon SQS 在您创建队列时将其返回给您(例如, http://sqs.us-east-2.amazonaws.com/123456789012/queue2)。不要建造 每次需要时从其单独的组件中获取队列 URL 在请求中指定队列 URL,因为 Amazon SQS 可以更改 组成队列 URL 的组件。

如前所述,他们有时会在未来出于任何原因更改 URL 的结构。队列区域可能仍会保留在 某处 中,但不一定在您期望的位置。

所以,考虑到所有的想法,我认为引入新的环境变量是正确的方法。

【讨论】:

    【解决方案2】:

    是的,从队列 URL 中提取区域应该是完全安全的。

    在其他地方引用的documented recommendation并未表示将队列 URL 解构到其组件中是不安全的,而是建议不要构造 来自其组成部分的队列 URL。警告是存储整个 URL。没有建议根本不解析它。

    在您的系统中,始终按照 Amazon SQS 在您创建队列时返回给您的方式存储整个队列 URL

    URL 的主机名部分非常确定,regional endpoints for SQSsqs.${region}.amazonaws.com 非常一致。

    没有明显的理由依赖主机名来确定区域。 AWS 很少更改端点主机名,并且在它们拥有的少数情况下,它一直是为了使它们更可预测。同时,旧的仍然安静地存在——例如,the original endpoints,如queue.amazonaws.comus-west-1.queue.amazonaws.com 仍然处于活动状态并且似乎功能齐全,即使它们已被sqs.us-[east | west]-1.amazonaws.com 正式取代。 AWS 最近与端点约定更加一致和分层,但这样做并没有破坏这些值是硬编码的旧客户端。

    【讨论】:

      【解决方案3】:

      如果我理解正确,问题会询问是否可以从 SQS URL 中提取 AWS 区域...

      一个简单的答案是肯定的。但我不推荐这个。

      首先,从配置文件中保存的固定 SQS URL 中提取 Region 只是一个附加处理。由于它已经存储在 Config 文件中,我们也可以在 Config 文件中指定 AWS-region,因为除非我们决定手动更改,否则我们工作的区域不会动态更改。如果你看this documentation,AWS 区域通常保存在配置文件中,以便更好地维护。

      第二,使用拆分从字符串中提取区域是不可信的。这就像试图破解一些东西以获得你需要的东西。这不是一个好的编码习惯。

      第三,您上面给出的是特定队列的 AWS SQS 端点。阅读this documentation 并了解 AWS 端点的结构。 AWS 终端节点并不总是在 Sting 结构中包含其中的区域。在 AWS 区域的配置文件中维护一个单独的参数始终是最佳实践。

      某些服务,例如 IAM,不支持区域;因此,他们的 端点不包括区域。一些服务,例如 Amazon EC2, 让您指定不包含特定区域的端点, 例如,https://ec2.amazonaws.com。在这种情况下,AWS 路由 us-east-1 的端点。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-03-16
        • 1970-01-01
        • 2021-03-30
        • 1970-01-01
        • 2020-04-11
        • 2021-05-20
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多