首页 > 解决方案 > 如何将 RDS 实例的主机名放入 EC2 中的环境变量中?

问题描述

我有一个 CloudFormation 模板,可以在同一个堆栈下创建 RDS 和 EC2。我的问题是,如何将 RDS 主机名放入我的 EC2 中的环境变量之一,而无需安装 AWS cli 和添加凭证?

标签: amazon-web-servicesamazon-ec2amazon-cloudformationrds

解决方案


我假设“RDS 主机名”是您的 RDS 端点?

您可以添加到您的 EC2 用户数据,如下面的代码。我不太习惯 linux,所以不确定这是否是设置环境变量的方法,但你明白了。

Resources:
  Rds:
    Type: 'AWS::RDS::DBInstance'
    Properties:
      ...

  Ec2:
    Type: 'AWS::EC2::Instance'
    Properties:
      ...
      UserData: !Base64 
        'Fn::Sub': 
          - |-
            <script>
            export DB_CONNECTION="${RdsEndpoint}"
            </script>
          - { RdsEndpoint: !GetAtt Rds.Endpoint.Address }

更新

在这种特殊情况下,您需要使用长语法Fn::Sub,因为您的引用需要使用Fn::GetAtt. 如果您想要的信息是通过简单的 检索到的Fn::Ref,您可以使用简短的语法:

      UserData: !Base64 
        'Fn::Sub': 
          <script>
          export DB_CONNECTION="${Rds}" # <-- this will get the DBInstanceIdentifier
          </script>

更新 2:正如 Josef 所指出的,您仍然可以使用短语法,无论源是 !Ref 还是 !GetAtt。所以这是有效的:

  UserData: !Base64 
    'Fn::Sub': |-
      <script>
      export DB_CONNECTION="${Rds.Endpoint.Address}"
      </script>

推荐阅读