将 terraform 的输出作为 bash 脚本的输入变量

Dev*_*ner 4 bash shell terraform terraform-provider-aws

我正在编写一个脚本,负责运行 terraform 文件并创建基础设施。我有一个要求,我需要将 terraform 的输出放入同一脚本中以创建数据库架构。我需要获取端点、用户名、密码和数据库名称,并将其作为脚本的输入来登录数据库并创建架构。我需要从已创建的 terraform 中获取 aws_db_instance 的输出,并将其作为输入推送到 bash 脚本中。任何有关我们如何实现这一目标的帮助将不胜感激。提前致谢。下面是我将在脚本中使用的架构代码,并且需要来自 terraform 的这些输入。

RDS_MYSQL_USER="Username";
RDS_MYSQL_PASS="password";
RDS_MYSQL_BASE="DB-Name";

mysql -h $RDS_MYSQL_ENDPOINT -P $PORT -u $RDS_MYSQL_USER -p $RDS_MYSQL_PASS -D $RDS_MYSQL_BASE -e 'quit';```
Run Code Online (Sandbox Code Playgroud)

Mar*_*ins 11

从 Terraform 配置导出特定值的常用方法是声明Output Values。

在您的情况下,您似乎想从 导出几个结果属性aws_db_instance,您可以在根模块中使用如下声明来执行此操作:

output "mysql_host" {
  value = aws_db_instance.example.address
}

output "mysql_port" {
  value = aws_db_instance.example.port
}

output "mysql_username" {
  value = aws_db_instance.example.username
}

output "mysql_password" {
  value     = aws_db_instance.example.password
  sensitive = true
}

output "mysql_database_name" {
  value     = aws_db_instance.example.name
}
Run Code Online (Sandbox Code Playgroud)

运行后,terraform apply您应该会看到 Terraform 报告每个值的最终值,密码隐藏在后面,(sensitive value)因为我用sensitive = true.

完成后,您可以使用该terraform output命令及其-raw选项以更方便在 shell 脚本中使用的方式检索这些值。例如,如果您使用类似 Bash 的 shell:

MYSQL_HOST="$(terraform output -raw mysql_host)"
MYSQL_PORT="$(terraform output -raw mysql_port)"
MYSQL_USERNAME="$(terraform output -raw mysql_username)"
MYSQL_PASSWORD="$(terraform output -raw mysql_password)"
MYSQL_DB_NAME="$(terraform output -raw mysql_database_name)"
Run Code Online (Sandbox Code Playgroud)

每次运行都terraform output需要从您配置的后端检索最新的状态快照,因此如果您选择的后端具有较长的往返时间,则运行五次可能会很慢。您可以通过安装单独的软件(例如jq解析terraform output -json结果以从单个命令检索所有值)来优化此功能。还有一些进一步的示例terraform output:在自动化中使用。