amazon-web-services - 如何将 RDS 实例的主机名放入 EC2 中的环境变量中?

标签 amazon-web-services amazon-ec2 aws-cloudformation rds

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

最佳答案

我假设“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>

关于amazon-web-services - 如何将 RDS 实例的主机名放入 EC2 中的环境变量中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52978197/

相关文章:

amazon-web-services - Marklogic 使用云形成模板在 EC2 中缩小规模

amazon-web-services - ECS 中 EFS 挂载 "Failed to resolve"

amazon-web-services - 使用IAM限制对特定Cloudfront发行版的访问

python - AWSCLI 和 AWSEBCLI 有什么区别?

node.js - Socket.io 无法在带有 Nodejs 的 aws 上工作

networking - 如何连接到 ec2 上的 c# 聊天服务器

java - Java模式的优势,其中方法将对象作为参数而不是单个参数

amazon-web-services - 获取错误配置选项 :\377\376h

linux - EC2 ssh 权限被拒绝(公钥、gssapi-keyex、gssapi-with-mic)

amazon-web-services - 启用 Amazon S3 存储桶以使用 SAM 触发 Lambda 函数