【问题标题】:How do I get RDS instance id for an Elastic Beanstalk environment?如何获取 Elastic Beanstalk 环境的 RDS 实例 ID?
【发布时间】:2017-06-16 02:43:11
【问题描述】:

我想编写一个脚本,对与我的 Elastic Beanstalk 环境关联的 RDS 数据库进行快照和还原。如何获取要插入 aws rds create-db-snapshotaws rds restore-db-instance-from-db-snapshot 命令的 RDS 实例 ID?

我知道可以在 Web 界面的“配置”选项卡中看到它,但我想使用在 shell 中执行的命令来获取它。

【问题讨论】:

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


    【解决方案1】:

    虽然您可以在配置 Elastic Beanstalk 应用程序时配置 RDS 实例,但它们并没有真正捆绑在一起。它们都可以在 VPC 中运行,但这是唯一真正的分组本身。您也可以轻松地将 RDS 用于其他用途。

    您可能希望使用 aws rds describe-db-instances 之类的东西来获取 RDS 实例信息以及实例名称(即 application1-ebs-rds),以便您定位 RDS。

    【讨论】:

    • 感谢您确认我的直觉,它们都在 vpc 中运行
    【解决方案2】:

    我发现的最直接的方法包括以下步骤

    1. 使用$ eb ssh {environment-id} SSH 到您的实例
    2. 从 SSH 终端运行以下命令获取 RDS 实例 ID:

      $ sudo /opt/elasticbeanstalk/bin/get-config environment --output YAML | grep RDS_HOSTNAME | sed -n "s/^RDS_HOSTNAME: \([a-z0-9]*\).*$/\1/p"

    上面的命令获取所有可用的环境变量,包括以RDS_开头的特殊环境变量,用greps查找RDS_HOSTNAME变量,然后用sed提取你需要的值。

    【讨论】:

      【解决方案3】:

      您可以通过这种方式获取事件历史记录...

      aws elasticbeanstalk describe-events --environment-name your_environment_name
      

      您历史记录中的一个事件应该包括 db-instance-identifier...

      {
          "ApplicationName": "some-app", 
          "EnvironmentName": "some-env", 
          "Severity": "INFO", 
          "RequestId": "some-ref-id", 
          "Message": "Created RDS database named: some-db-instance-identifier", 
          "EventDate": "2017-01-30T23:23:37.734Z"
      }, 
      

      然后您可以获取该消息字符串并获取要在此处使用的数据库实例标识符...

      aws rds create-db-snapshot --db-instance-identifier some-db-instance-identifier --db-snapshot-identifier name-of-snapshot
      

      这有点工作。 :)

      【讨论】:

      • 根据文档,此命令最多只能保存 6 周前的事件,这意味着如果环境是在 6 周前创建的,您可能找不到此事件
      猜你喜欢
      • 2015-09-15
      • 2016-11-01
      • 2015-07-04
      • 2018-05-12
      • 2023-03-07
      • 2016-02-15
      • 2016-04-14
      • 2013-11-06
      • 2020-10-23
      相关资源
      最近更新 更多