24

I am working with Digital Ocean and Terraform and I already can automate the domain, subdomain, network preferences and the host but there is a section called User data that looks like this:

User data

The description of that field says Allows the use of Cloud-init to configure your droplet. Looking around I found the documentation.

My question is, how to take advantage of this while using Terraform?

21

Cloud-init files are essentially bootstrap codes, that run before each startup, and can - among others - modify files, set up services, create users, etc.

Not all types of droplets support all functionalities of cloud-init, for example CoreOS uses it's own implementation, with a very limited subset of valid values.

To use this in terraform, simply provide the cloud-init file during droplet creation:

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"

This will for example create a droplet, where CoreOS will run etcd2 and fleet during startup

You can find some more examples in this repository, where I show how one can use these configuration options to set up some simple docker based services on CoreOS

5

When you create an Auto Scaling group with Terraform, you can specify the user_data to be used by instances created by this ASG. Documented here - https://www.terraform.io/docs/providers/aws/r/launch_configuration.html#user_data

You can also create a single EC2 instance, and provide user_data to be used - https://www.terraform.io/docs/providers/aws/r/instance.html#user_data

The AWS EC2 documentation explains how user_data is passed to the cloud-init service which is running on most Linux distributions available as AMIs on AWS - http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/user-data.html#user-data-cloud-init

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.