cloud-init 자료

cloud-init 22.4.2 documentation

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

 

format : User-Data Formats - cloud-init 22.4.2 documentation

설정가능한 것 : Module Reference - cloud-init 22.4.2 documentation

 

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

https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/instance#user_data

https://registry.terraform.io/providers/hashicorp/template/latest/docs/data-sources/cloudinit_config

 

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

 

 

 

cloud-init 예제

#cloud-config users: - name: "operation" shell: /bin/bash sudo: ALL=(ALL) NOPASSWD:ALL ssh-authorized-keys: - "ssh-rsa AAAAB3NzaXXXL ssh key for devops" - "ssh-rsa AAAAB3NzaC1yXXXXw==" packages: - python-minimal - postfix package_upgrade: true write_files: - path: /etc/systemd/system/pang.mount content: | [Unit] Description=Mount /pang [Mount] What=/dev/xvdb Where=/pang Type=ext4 [Install] WantedBy=multi-user.target runcmd: - [ /sbin/wipefs, -f, /dev/xvdb ] - [ /sbin/mkfs.ext4, -F, /dev/xvdb ] - [ /bin/systemctl, start, pang.mount ] - [ /bin/systemctl, enable, pang.mount ] - [ sed, -i, 's/^\(Defaults[[:blank:]]*requiretty\)/#\1/g', /etc/sudoers ] - [ /bin/systemctl, disable, postfix ] - [ sed, -i, -e, 's/^\(lp\|uucp\|adm\|sync\|mail\|news\|list\|irc\|operator\|games\|gopher\|ftp\):/#\1:/g', /etc/passwd ] - test -f /etc/redhat-release && echo overlay > /etc/modules-load.d/overlay.conf