cloud-init

https://cloudinit.readthedocs.io/

Cloud-init is the defacto multi-distribution package that handles early initialization of a cloud instance.


format : https://cloudinit.readthedocs.io/en/latest/topics/format.html

설정가능한 것 : https://cloudinit.readthedocs.io/en/latest/topics/modules.html


terraform 의 cloud-init : ec2의 user 이용하여 cloud-init 실행 가능함.

https://www.terraform.io/docs/providers/aws/r/instance.html#user_data

https://www.terraform.io/docs/providers/template/d/cloudinit_config.html


cloud-init을 이용하면 hostname 같은 것을 OS 시작하면서 설정을 할 수 있어서 장점이 있다.

그런데 cloud-init 설정파일에 runcmd에 설정을 한 경우 template_cloudinit_config 에서 다른 shellscript 가 있으면 다른 shellscript 를 모두 실행한 후 runcmd를 실행한다.

원래 이렇게 작동을 하는것인지 cloud-init에서 순서가 어떻게 되는지는 정확히는 모르겠다. 그래서 runcmd 에는 다른 스크립트에 의존하는 부분을 넣으면 안된다.


terraform에서 여러개의 스크립트를 지정하는 경우 filename 에 지정한 순서대로 스크립트가 실행이 된다.

data "template_cloudinit_config" "config" {
  gzip          = true
  base64_encode = true

  part {
    content_type = "text/cloud-config"
    content      = "${data.template_file.cloudinit.rendered}"
  }
  part {
    filename     = "common-init.sh"
    content_type = "text/x-shellscript"
    content      = "${data.template_file.common.rendered}"
  }
  part {
    filename     = "deploy.sh"
    content_type = "text/x-shellscript"
    content      = "${data.template_file.service.rendered}"
  }
}

위에서 설정한 스크립트는 Ubuntu 16.04의 경우 /var/lib/cloud/instance/scripts 에서 볼 수 있다.