【问题标题】:Need terraform entry to change hostname of newly created EC2 instance - using 'remote-exec'需要 terraform 条目来更改新创建的 EC2 实例的主机名 - 使用“remote-exec”
【发布时间】:2021-05-18 03:00:13
【问题描述】:

我的目标是在 terraform 计划中加入一个条目,以使用我正在编写的任何环境(即 dev/qa/staging/etc)重命名实例

即:

sm--nodejs-1

目的是修改 /etc/hosts 文件以反映新名称 - 使用 remote_exec 函数。我在下面的条目使用了我之前在计划中指定的变量(即密码和命名约定)

"echo ${var.anspassword} | sudo -S -k echo sm-${var.namingenv}-nodejs-1 > /etc/hosts",

正在寻找能够使其工作的正确线路。

【问题讨论】:

  • 你没有解释当前行的问题到底是什么,甚至没有指定你正在使用的操作系统以及你如何运行remote-exec

标签: terraform


【解决方案1】:

如果您使用的是与 cloud-init 兼容的云提供商和安装了 cloud-init 的 Linux 发行版映像(大多数官方映像和官方派生映像都可以),那么您可以通过传递一个 cloud- 以声明方式设置系统主机名使用the Set Hostname module的初始化配置。

例如,如果您使用 AWS,则可以在直接或间接启动 EC2 实例的各种资源类型之一中设置 user_data

  user_data = <<-EOT
    #cloud-config
    ${yamlencode(
      hostname = "sm-${var.namingenv}-nodejs-1"
    )}
  EOT

此示例使用yamlencode 构造一个 YAML 文档供 cloud-init 读取。特殊的 #cloud-config 前缀告诉 cloud-init 将其解释为配置文件,而不是作为要执行的脚本。 Cloud-init 的 Set Hostname 模块会处理这个并采取行动来设置主机名,所以你不需要自己写出特定的 shell 命令。

您可以在 Terraform 文档部分 Provisioners are a Last Resort 中找到有关此方法的更多信息,其中包括支持将此类任意元数据传递给实例的云平台列表,并包含有关如何在每个平台的提供者。

在这个特定用例中使用 cloud-init 的另一个优点是 cloud-init 将在启动过程的早期处理 Set Hostname 模块,而最早的 remote-exec配置程序可以在系统启动到足以让 SSH 服务器运行之后采取行动,这通常是在许多其他服务已经运行并且可能已经使用原始主机名之后。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-12
    • 2021-11-17
    • 2021-08-19
    相关资源
    最近更新 更多