【问题标题】:How to set environment variable for ec2 user_data with terraform templatefile如何使用 terraform 模板文件为 ec2 user_data 设置环境变量
【发布时间】:2021-05-04 04:03:39
【问题描述】:

我想使用 terraform 模板文件运行 myscript.sh。我在 EC2 中将变量 password 设置为环境变量。但是,当我启动实例时,脚本无法正常工作。

这是我写的文件。在 user_data 下传递环境变量的方法是否正确?

  • myscript.sh
#! /bin/bash
echo $password
# Continue to some procedures
  • 我的地形模板
resource "aws_instance" "web" {
  ami           = data.aws_ssm_parameter.amzn2_ami.value
  instance_type = "t2.micro"
  key_name      = aws_key_pair.key_pair.key_name
  user_data     = templatefile("./scripts/myscript.sh", {
    password = "********"
  })
}

【问题讨论】:

    标签: amazon-web-services amazon-ec2 terraform user-data


    【解决方案1】:

    您的myscript.sh 缺少#!/bin/bash 并且要引用传递的变量,您应该使用${password}。所以应该是:

    #!/bin/bash
    echo ${password} > /tmp/test.txt
    

    还可以通过将echo 保存到例如/tmp/test.txt 中来测试它。否则你想看到任何输出。但是使用/tmp/test.txt,您可以登录到实例并检查/tmp/test.txt 是否存在。

    脚本也没有设置任何环境变量。

    【讨论】:

    • myscript.sh 是虚拟脚本,真正的有#! /bin/bash。我会修复它。我很感激。顺便说一句,您猜测 terraform 声明中是否有任何错误的地方?
    • @SteaveStark 如果您提供实际脚本会更好,因为您的虚拟脚本不能代表您的问题。
    【解决方案2】:

    试试

      resource "aws_instance" "web" {
          ami           = data.aws_ssm_parameter.amzn2_ami.value
          instance_type = "t2.micro"
          key_name      = aws_key_pair.key_pair.key_name
          user_data_base64     = base64encode(templatefile("./scripts/myscript.sh", {
            password = "********"
          }))
        }
    

    【讨论】:

    • 您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center
    猜你喜欢
    • 1970-01-01
    • 2018-11-22
    • 2020-09-15
    • 1970-01-01
    • 2021-11-08
    • 2016-01-26
    • 1970-01-01
    • 1970-01-01
    • 2015-04-22
    相关资源
    最近更新 更多