我正在使用Digital Ocean和Terraform,并且我已经可以自动执行域,子域,网络首选项和主机的操作,但是有一个名为以下部分User data
:
该字段的描述说Allows the use of Cloud-init to configure your droplet
。环顾四周,我找到了文档。
我的问题是,在使用Terraform时如何利用此优势?
我正在使用Digital Ocean和Terraform,并且我已经可以自动执行域,子域,网络首选项和主机的操作,但是有一个名为以下部分User data
:
该字段的描述说Allows the use of Cloud-init to configure your droplet
。环顾四周,我找到了文档。
我的问题是,在使用Terraform时如何利用此优势?
Answers:
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
使用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-数据云初始化