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