【问题标题】:AWS Elastic Beanstalk change RDS EndpointAWS Elastic Beanstalk 更改 RDS 端点
【发布时间】:2014-07-03 01:05:48
【问题描述】:

如何更改 AWS Elastic Beanstalk 环境的已配置 RDS 终端节点? 例如。删除 RDS 数据库后或应更换为新的 RDS 数据库。

【问题讨论】:

  • 你是如何在 beanstalk 环境之外删除你的 RDS 的?我假设您创建 RDS 作为 beanstalk 环境启动的一部分。
  • 使用 RDS 接口。是的,我做到了。但我发现无法更改 Beanstalk 中定义的 RDS 端点。
  • 如果您的目标只是更改数据库内容,您可以转储源数据库并将其还原到目标数据库。为此,您需要临时编辑安全组以允许执行 DB 转储的机器的 IP。 PostgreSQL 的具体转储和恢复语法:coderwall.com/p/2e088w/…
  • 经过大量挖掘后,我偶然发现了 this article 的主题,这看起来很有帮助。

标签: amazon-web-services amazon-rds amazon-elastic-beanstalk


【解决方案1】:

更新

主题仍然很复杂,AWS Elastic Beanstalk (EB) 文档仍然可以更好地阐明可用选项。问题是关于如何更改 RDS 端点,这似乎以两种不同的方式阅读:

  1. 人们可以将其解释为如何将现有的外部管理的 RDS 端点附加到现有的(不是新的!)EB 环境 - 这确实是不可能的,而是需要求助于处理这个来自应用程序本身的场景,例如在Using Amazon RDS with Python 中的将现有的 Amazon RDS 数据库实例与 Python 一起使用部分中进行了概述。
  2. 相反,OP 询问了 RDS 数据库被删除或应该用新的 RDS 数据库替换后如何做到这一点,即 RDS 端点更改隐含在为已有的现有 EB 环境创建新的 RDS 数据库 - 这确实可以通过 DBSnapshotIdentifier Option Value 来实现,它表示 要从中恢复的数据库快照的标识符时间>。再一次,EB 文档并不能完全确定这意味着什么,但是,EB 在后台使用AWS CloudFormation,而相应的。 AWS::RDS::DBInstance - DBSnapshotIdentifier 的条目提供了更多详细信息:

    通过指定此属性,您可以从 指定的数据库快照。如果 DBSnapshotIdentifier 属性是 空字符串或 AWS::RDS::DBInstance 声明没有 DBSnapshotIdentifier 属性,数据库被创建为一个新的 数据库。如果属性包含一个值(空字符串除外), AWS CloudFormation 从指定的快照创建数据库。如果 指定名称的快照不存在,数据库 创建失败,堆栈回滚。

换句话说,从命名空间aws:rds:dbinstance 为现有EB 环境更新任何General Option Values 的典型结果是创建一个由EB 管理的分别调整的RDS 实例,从而创建一个新的RDS 端点。
  • 一个特定的子场景是使用DBSnapshotIdentifier,它根据引用的快照生成一个由EB管理的新RDS实例,因此可以用于迁移(而不是attach )一个现有的外部管理的 RDS 实例,尽管根据快照大小有相当长的停机时间。

初步回答

虽然很遗憾在Configuring Databases with AWS Elastic Beanstalk 中没有特别说明,但可选Amazon RDS 数据库的AWS Elastic Beanstalk 设置是通过Option Values 处理的,请参阅General Options 中的命名空间aws:rds:dbinstance

虽然AWS Management Console 在其 UI 后面隐藏了许多选项值,但您可以在通过其他方式使用 API 时明确指定它们,无论是在创建环境时还是在更新环境时(这是您更改任何环境的方式) RDS 数据库实例的设置) - 参见例如来自AWS Command Line Interfaceupdate-environment的参数--option-settings

如果指定,AWS Elastic Beanstalk 会更新与运行环境关联的配置集,并将指定的配置选项设置为请求的值。

【讨论】:

  • 我无法理解这个答案。
  • 所以基本上您可以使用 EB 命令行界面更新环境的 RDS 设置,如下所示: *** eb update-environment --environment-name --option-设置 aws:rds:dbinstance,, *** 遗憾的是,没有选项可以更改环境的端点(仅更改用户名、密码、引擎、实例类等 - 主要是您可以在 aws 管理控制台上更改的那些)。我看不出这个答案有什么用,或者为什么它被接受,它根本没有解决问题。
  • @korsosa,@JoãoPauloMotta - 我已经更新了我的答案,试图根据对 OP 问题的不同解释来澄清什么是可能的,什么是不可能的 - 具体来说,它希望能澄清如何使用 @ 987654340@ 选项值,用于从现有 RDS 数据库的快照为现有 EB 环境预置新的 EB 托管 RDS 数据库(仍然只能通过 EB 或 AWS CLI 实现,而不会出现在 AWS 管理控制台中)。
  • @SteffenOpel 谢谢,我以为您在谈论编辑现有 EB 环境的数据库端点(将现有数据库附加到现有 EB 环境)而不创建新的数据库实例,但现在我明白了什么我误解了。感谢您的澄清!
  • 这么麻烦解释如何构建命令,以及使用哪些选项,但不是命令本身的单个示例实现?
【解决方案2】:

不鼓励在环境中热交换数据层,因为它会破坏环境的完整性。您要做的是使用 RDS 实例的还原快照克隆环境。这意味着您将拥有一个具有不同 url 'host' 的相同环境,如果一切顺利,那么您可以交换环境 url 以启动 DNS 交换。

在交换发生并且一切顺利后,您可以继续对旧环境进行放气

【讨论】:

  • 当您说“使用 RDS 实例的还原快照克隆环境”时,您指的是 Beanstalk 的克隆环境功能吗?据我所知,它不允许您指定快照来重建环境。
【解决方案3】:

我在.ebextensions 文件夹下创建了一个配置文件,其内容如下:

option_settings:
  - namespace: aws:rds:dbinstance
    option_name: DBSnapshotIdentifier
    value: <name-of-snapshot>

上传并部署,它将使用此快照创建一个新的 RDS 数据库。

【讨论】:

    【解决方案4】:

    按照决议中的步骤:

    • 使用 Elastic Beanstalk 蓝色(环境 A)/绿色(环境 B)部署将 RDS 数据库实例与环境 A 分离。
    • 使用连接到 RDS 数据库实例所需的信息创建一个新的 Elastic Beanstalk 环境(环境 B)。

    查看下面的官方答案以获得更详细的解决方案

    https://aws.amazon.com/premiumsupport/knowledge-center/decouple-rds-from-beanstalk/?nc1=h_ls

    【讨论】:

      猜你喜欢
      • 2015-08-02
      • 1970-01-01
      • 2015-07-04
      • 1970-01-01
      • 2018-08-19
      • 2017-06-06
      • 2017-08-01
      • 2014-09-25
      • 2019-09-12
      相关资源
      最近更新 更多