如何在Terraform中使用cloud-init?


24

我正在使用Digital Ocean和Terraform,并且我已经可以自动执行域,子域,网络首选项和主机的操作,但是有一个名为以下部分User data

用户数据

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

我的问题是,在使用Terraform时如何利用此优势?

Answers:


21

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"

例如,这将创建一个droplet,CoreOS将在启动期间运行etcd2和fleet

您可以在此存储库中找到更多示例,在此我演示如何使用这些配置选项在CoreOS上设置一些基于docker的简单服务


5

使用Terraform创建Auto Scaling组时,可以指定user_data此ASG创建的实例要使用的。此处记录-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传递给cloud-init在大多数Linux发行版上运行的服务,该发行版可作为AWS上的AMI使用-http: //docs.aws.amazon.com/AWSEC2/latest/UserGuide/user-data.html#user-数据云初始化

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.