【问题标题】:Taking output of terraform to bash script as input variable将 terraform 输出到 bash 脚本作为输入变量
【发布时间】:2021-11-11 11:12:15
【问题描述】:

我正在编写一个脚本,负责运行 terraform 文件并创建基础设施。我有一个要求,我需要将 terraform 的输出转换为同一个脚本来为 DB 创建模式。我需要获取端点、用户名、密码和数据库名称,并将其作为脚本的输入来登录数据库并创建模式。我需要从已经创建的 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';```

【问题讨论】:

  • 有什么理由不使用mysql Terraform provider 创建架构?
  • 我可能错过了添加完整的详细信息。 Aurora DB 已经在我的云环境中创建了,我只需要将这些用户名、密码、DBName 从 terraform 调用到脚本中
  • 是的,但为什么不使用 Terraform 管理架构呢?
  • 这是我在数据库方面的第一次尝试,所以不知道该怎么做,任何建议我如何实现它们
  • 感谢提供者选项使创建模式变得更容易,之前我试图通过脚本使用它,但是一旦通过 terraform 实现就更好了。

标签: bash shell terraform terraform-provider-aws


【解决方案1】:

从 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
}

在运行terraform apply 之后,您应该会看到 Terraform 报告其中每一个的最终值,密码隐藏在 (sensitive value) 后面,因为我使用 sensitive = true 声明了它。

完成后,您可以使用the terraform output command 及其-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)"

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

【讨论】:

    猜你喜欢
    • 2019-08-30
    • 2019-11-19
    • 2020-07-10
    • 1970-01-01
    • 2015-07-24
    • 2019-06-13
    • 2012-04-03
    • 2019-01-25
    • 2012-08-16
    相关资源
    最近更新 更多