【问题标题】:Adding keys to EC2 instance using terraform automation使用 terraform 自动化向 EC2 实例添加密钥
【发布时间】:2020-07-15 10:43:38
【问题描述】:

我在 EC2 实例上实现了自动化 - 使用凭据和密钥加载不同的应用程序。 我不想对密钥进行硬编码 - 需要一种使用 terraform 运行自动化的方法。 到目前为止我的想法:

1) 在本地创建 bash 脚本并使用配置器“file”将脚本上传到 terrafom 中

provisioner "file" {
source      = "keys.sh"
destination = "keys.sh"

** bash 脚本包含 EXPORT 到环境变量**

#!/bin/bash
#PLEASE ADD GOT .GITIGNORE


export REPO_SECRET=SoMeRepOSceRt

cat << EOF > /home/ubuntu/.ssh/privatekey
----KEY-RSA---STARS--HERE
AjsdhKKKSSL
--END--Key
EOF

问题是我无法使用“remote-exec inline source ./file”获取文件 - 找不到错误源。

provisioner "remote-exec" {

    inline = [
    "chmod +x /home/ubuntu/keys.sh",
    "source /home/ubuntu/keys.sh",
    ]

使用(点)。 ./script 也不起作用。

aws_instance.TestBashEnv (remote-exec): /tmp/terraform_1852118673.sh: 1: source: not found

所以我需要一种在创建 EC2 实例时自动获取文件的方法,以便应用 bash 脚本中的 env 变量。

**P.S - 如果有一个功能可以检查 bash 文件 keys.sh 在 terraform 应用设置期间是否上传(文件是否存在?)

【问题讨论】:

  • 不应该用remote-exec 运行脚本满足您的需要吗?它应该运行脚本中的命令并使环境变量和私钥可用,因此在这种情况下您不需要使用source

标签: bash terraform hashicorp-otto


【解决方案1】:

这就是我如何处理这个问题。

provisioner "file" {
  source      = "keys.sh"
  destination = "/home/ubuntu/keys.sh"
}

接着是:

provisioner "remote-exec" {
  inline = [
    "chmod +x /home/ubuntu/keys.sh",
    "/home/ubuntu/keys.sh",
  ]
}

这在 remote-exec 的 Terraform 文档中有更详尽的解释。

【讨论】:

  • 我在#!/bin/bash 中有export REPO_SECRET=SoMeRepOSceRt - 我需要获取它来设置环境变量
  • 不要将其作为常规 shell 脚本运行,而是尝试添加一个 .在前面,即:. ./home/ubuntu/keys.sh.
【解决方案2】:

我试过的方法行不通。 每个想要使用密钥的 bash 脚本都需要在文件开头指定 keys.sh

【讨论】:

    猜你喜欢
    • 2016-12-03
    • 2021-05-21
    • 1970-01-01
    • 2018-04-02
    • 2011-03-16
    • 2020-06-22
    • 2020-10-07
    • 2020-03-10
    • 1970-01-01
    相关资源
    最近更新 更多