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 에서 볼 수 있다.