amazon-web-services - 如何将 RDS 实例的主机名放入 EC2 中的环境变量中?
问题描述
我有一个 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>
推荐阅读
- c# - 如何使用 for 语句打印以下模式?
- flutter - 我如何使用 StateNotifier Riverpod 来跟踪枚举值的变化
- mysql - MySQL - 如何使用 order by 优化查询
- r - 如何使用 R 以编程方式定位我的 Google Drive 文件夹?
- javascript - 翻转相机倒置three.js
- scala - 如何使用等于忽略大小写来实现字符串包含以过滤数据框的内容?
- progressive-web-apps - 如何在 PWA 应用程序中重定向
- r - 是否可以在数据之前先绘制轴线?
- angular - 更新 cli 版本后创建新的 Angular 项目时出错
- git - 如何将我的 CSGitLab 存储库与我的 GitHub 存储库同步?