디버그 요령 / 테라폼 요령 /
terraform 에서 ebs block 을 추가하고, user_data 사용하는 예시
data "template_file" "my_user_data" {
# template = file("../../scripts/init-fish.yml")
template = templatefile(
"../../scripts/init-fish.tftpl",
{
bashrc = "${indent(6, file("../../scripts/.bashrc"))}"
}
)
}
output "debug_user_data_output" {
value = data.template_file.my_user_data.rendered
}
resource "aws_instance" "stage_a" {
...
user_data = data.template_file.my_user_data.rendered
}
resource "aws_ebs_volume" "stage_a" {
availability_zone = "ap-northeast-2a"
size = 10 # GB
iops = 3000
type = "gp3"
}
resource "aws_volume_attachment" "ebs_att" {
device_name = "/dev/sdf"
volume_id = aws_ebs_volume.stage_a.id
instance_id = aws_instance.stage_a.id
}
#cloud-config
packages:
- curl
# .bashrc file
write_files:
- path: /home/admin/.bashrc
content: |
"${bashrc}"
- path: /home/admin/.profile
content: |
if [ -n "$BASH_VERSION" ]; then
# include .bashrc if it exists
if [ -f "$HOME/.bashrc" ]; then
. "$HOME/.bashrc"
fi
fi
bootcmd:
# format 하고
- test -z "$(blkid /dev/nvme1n1)" && mkfs -t ext4 -L home_admin /dev/nvme1n1
- mkdir -p /home/myuser
mounts:
# mount
- [ "/dev/nvme1n1", "/home/myuser", "ext4", "defaults,nofail", "0", "2" ]
runcmd:
# set .bashrc
- cp -f /home/bashrc_template_by_cloud_init /home/myuser/.bashrc
- chown admin:admin /home/admin/.bashrc
# .bashrc, ${}를 사용하려면 $${} 를 사용해야 한다. terraform 에서도 ${} 를 사용하기 때문에. 나머지 $ 들은 괜찮다.
if [ -n "$force_color_prompt" ]; then
if [ -x /usr/bin/tput ] && tput setaf 1 >&/dev/null; then
# We have color support; assume it's compliant with Ecma-48
# (ISO/IEC-6429). (Lack of such support is extremely rare, and such
# a case would tend to support setf rather than setaf.)
color_prompt=yes
else
color_prompt=
fi
fi
if [ "$color_prompt" = yes ]; then
PS1='$${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$$ '
else
PS1='$${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '
fi
data template 의 output 을 확인
다음 처럼 output 을 추가하고, terraform plan
을 하면
output 이 template_file이 어떤 모습으로 생성되는지 확인할 수 있다.
...
output "debug_user_data_output" {
value = data.template_file.my_user_data.rendered
}
aws cloud init debug
- aws management console 에서 stop instance 를 한 후
Actions -> Instance settings -> Edit user data
를 하자. - 수정후 start instance
cat /var/log/cloud-init-output.log
/var/log/cloud-init-output.log
aws 에서 cloud init 에 대한 log는
/var/log/cloud-init-output.log
에서 확인할 수 있다.
댓글 없음:
댓글 쓰기