amazon-web-services - 启动 EC2 时,我可以在 user_data 字段中包含一个带参数的脚本文件吗?

标签 amazon-web-services terraform

启动 EC2 时,我可以在 user_data 字段中包含带参数的脚本文件吗? 如: user_data = "${file("install_software.sh"), user_name pass_word}"

此外,我可以在 user_data 字段中包含多个脚本文件吗?如: user_data = "${file("install_software1.sh","install_software2.sh")}"

我还没有看到他们的任何例子,所以我不知道格式是什么。如果我不能使用 user_data 做到这一点,那该怎么做?我应该使用 remote-exec 还是 sth。还有吗?

=============更新: 感谢 KOE 回复我。在这里,我发布了完整的答案以防万一。否则需要。我已经对它们进行了测试。

+++++++++++ 如何在 user_data 字段中包含参数:

userdata_arguments_test.tf:

data "template_file" "user_data_test" {
      template = "${file("userdata_arg_test.tfl")}"
      vars {
        myuser = "${var.myuser}"
        mypassword = "${var.mypassword}"
      }
}
resource "aws_instance" "user_data_test" {
......
  user_data = "${data.template_file.user_data_test.rendered}"
}

用户数据_arg_test.tfl

#!/bin/bash
echo ${myuser}, ${mypassword} >/tmp/my_info.log

+++++++++++ 如何在 user_data 字段中包含多个文件:

用户数据_mfiles_test.tf:

 data "template_file" "user_data_common" {
  template = "${file("userdata_arg_test.tfl")}"
  vars {
    myuser = "${var.myuser}"
    mypassword = "${var.mypassword}"
  }
}
data "template_file" "user_data_master" {
  template = "${file("userdata_arg_test2.tfl")}"
  vars {
    myuser2 = "${var.myuser}"
    mypassword2 = "${var.mypassword}"
  }
}
data "template_cloudinit_config" "master" {
  gzip          = true
  base64_encode = true

 part {
   content_type = "text/x-shellscript"
   content      = "${data.template_file.user_data_common.rendered}"
 }

  part {
    content_type = "text/x-shellscript"
    content      = "${data.template_file.user_data_master.rendered}"
  }
}
resource "aws_instance" "user_data_test" {
  ....
  user_data     = "${data.template_cloudinit_config.master.rendered}"
}

用户数据_arg_test.tfl

#!/bin/bash
echo ${myuser}, ${mypassword} >/tmp/my_info.log

用户数据_arg_test2.tfl

#!/bin/bash
echo ${myuser2} + ${mypassword2} >/tmp/my_info2.log

最佳答案

你要使用的是template_file

data "template_file" "user_data" {
  template = "${file("script1.sh.tpl")}"

  vars {
    var1 = "foo"
    var2 = "bar"
  }
}

如果您想在 user_data 中使用多个脚本,您需要遵循 cloud-init 多部分格式并将其放入一个或多个文件 *.tpl,然后使用 terraform 标准插值或内联模板将它们组合起来。

引用:

https://www.terraform.io/docs/providers/template/d/file.html http://cloudinit.readthedocs.io/en/latest/topics/format.html#mime-multi-part-archive https://github.com/ukayani/cloud-init-example/blob/master/SampleUserData

关于amazon-web-services - 启动 EC2 时,我可以在 user_data 字段中包含一个带参数的脚本文件吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47745528/

相关文章:

terraform - 如何使用 terraform 添加 EMR 步骤

amazon-web-services - 控制从我的应用程序对 AWS S3 文件的访问

python - Build/CodeBuild 不能有超过 5 个输入工件

amazon-web-services - EC2实例没有公共(public)DNS

amazon-web-services - AWS lambda 使用私有(private) Hostzone DNS 连接到内部 ELB

amazon-web-services - 亚马逊机器学习模型重建的可能性

chef-infra - Terraform:配置 Chef

amazon-web-services - Terraform for_each - every.key 在哪里定义?

aws-lambda - terraform:local_file 与 null_resource 的依赖性导致:没有这样的文件或目录

kubernetes - 如何通过 terraform 修复新配置的 EKS 集群上的 kubernetes_config_map 资源错误?