我正在使用Digital Ocean和Terraform,并且已经可以自动化域,子域,网络首选项和主机,但是有一个名为User data的部分,看起来像这样:



该字段的说明为Allows the use of Cloud-init to configure your droplet。环顾四周,我找到了文档。

在使用Terraform时如何利用此优势?

#1 楼

Cloud-init文件本质上是引导程序代码,它们在每次启动之前运行,并且可以(其中包括)修改文件,设置服务,创建用户等。 cloud-init,例如,CoreOS使用它自己的实现,并带有非常有限的有效值子集。

要在terraform中使用它,只需在创建小滴的过程中提供cloud-init文件:

main.tf

resource "digitalocean_droplet" "web" {
  image              = "coreos-stable"
  name               = "web"
  region             = "lon1"
  size               = "2gb"
  private_networking = true
  ssh_keys           = ["${digitalocean_ssh_key.dodemo.id}"]
  user_data          = "${file("web.conf")}"
}


web.conf

#cloud-config
coreos:
  units:
    - name: "etcd2.service"
      command: "start"
    - name: "fleet.service"
      command: "start"


例如,这将创建一个液滴,在启动过程中,CoreOS将在其中运行etcd2和Fleet
>

#2 楼

使用Terraform创建Auto Scaling组时,可以指定此ASG创建的实例要使用的user_data。在此处记录-https://www.terraform.io/docs/providers/aws/r/launch_configuration.html#user_data

您还可以创建一个EC2实例,并提供要使用的user_data- https://www.terraform.io/docs/providers/aws/r/instance.html#user_data

AWS EC2文档说明了如何将user_data传递给在大多数Linux上运行的cloud-init服务在AWS上作为AMI可用的发行版-http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/user-data.html#user-data-cloud-init