Amazon Elastic Compute Cloud(Amazon EC2) Linux RHEL 7 또는 RHEL 8 인스턴스 부트스트랩 문제를 해결하려고 합니다. 사용자 데이터 호출을 로깅한 다음 콘솔 로그로 전송하고 싶습니다.
간략한 설명
EC2 인스턴스 부트스트랩의 문제를 해결하려면 모든 출력을 /var/log/user-data.log 및 /dev/console로 리디렉션하는 코드를 사용자 데이터 bash 스크립트에 추가하세요. 이 조치는 SSH를 통해 해당 인스턴스에 액세스할 수 없는 경우에도 수행할 수 있습니다. 코드를 실행하면 콘솔에 사용자 데이터 간접 호출 로그가 표시됩니다.
참고: 이 해결 방법은 RHEL 7 및 RHEL 8에만 해당됩니다. Amazon Linux 및 Amazon Linux 2에 대해 자세히 알아보려면 Amazon Linux 또는 Amazon Linux 2를 실행하는 EC2 인스턴스에서 사용자 데이터 출력을 콘솔 로그로 보내려면 어떻게 해야 하나요?를 참조하세요.
해결 방법
-
Amazon EC2 콘솔을 엽니다.
-
새 인스턴스를 시작하고 SSH를 해당 인스턴스에 연결합니다.
-
/etc/default/grub에서 GRUB_CMDLINE_LINUX 줄을 수정하고 "console=ttyS0,115200n8 console=tty0"을 "console=tty1 console=ttyS0"으로 변경합니다.
RHEL 7
# cat /etc/default/grub
GRUB_TIMEOUT=1
GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
GRUB_DEFAULT=saved
GRUB_DISABLE_SUBMENU=true
GRUB_TERMINAL_OUTPUT="console"
GRUB_CMDLINE_LINUX="console=tty1 console=ttyS0 net.ifnames=0 rd.blacklist=nouveau crashkernel=auto"
GRUB_DISABLE_RECOVERY="true"
RHEL 8
# cat /etc/default/grub
GRUB_TIMEOUT=1
GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
GRUB_DEFAULT=saved
GRUB_DISABLE_SUBMENU=true
GRUB_TERMINAL_OUTPUT="console"
GRUB_CMDLINE_LINUX="console=tty1 console=ttyS0 net.ifnames=0 rd.blacklist=nouveau nvme_core.io_timeout=4294967295 crashkernel=auto"
GRUB_DISABLE_RECOVERY="true"
GRUB_ENABLE_BLSCFG=true
-
/boot/grub2/grub.cfg 파일을 다시 생성합니다.
RHEL 7
# grub2-mkconfig -o /boot/grub2/grub.cfg
Generating grub configuration file ...
Found linux image: /boot/vmlinuz-3.10.0-1062.1.2.el7.x86_64
Found initrd image: /boot/initramfs-3.10.0-1062.1.2.el7.x86_64.img
Found linux image: /boot/vmlinuz-0-rescue-026767dbe06a4910a5ce3bd0def903c0
Found initrd image: /boot/initramfs-0-rescue-026767dbe06a4910a5ce3bd0def903c0.img
done
RHEL 8
# grub2-mkconfig -o /boot/grub2/grub.cfg
Generating grub configuration file ...
done
-
인스턴스를 중지합니다.
-
수정된 인스턴스에서 새 AMI를 생성합니다.
-
새 AMI에서 새로운 인스턴스를 시작합니다.
-
사용자 데이터 출력 콘솔을 리디렉션하려면 다음 명령을 입력합니다.
#!/bin/bash -xe
exec > >(tee /var/log/user-data.log|logger -t user-data -s 2>/dev/console) 2>&1
yum -y update
echo "Hello from user-data!"
다음 줄은 사용자 데이터 출력을 리디렉션합니다.
exec > >(tee /var/log/user-data.log|logger -t user-data -s 2>/dev/console) 2>&1
다음 예시와 유사한 콘솔 출력이 표시됩니다.
RHEL 7:
subscription-manager.x86_64 0:1.24.26-3.el7_8
subscription-manager-rhsm.x86_64 0:1.24.26-3.el7_8
subscription-manager-rhsm-certificates.x86_64 0:1.24.26-3.el7_8
sudo.x86_64 0:1.8.23-9.el7
systemd.x86_64 0:219-73.el7_8.8
systemd-libs.x86_64 0:219-73.el7_8.8
systemd-sysv.x86_64 0:219-73.el7_8.8
teamd.x86_64 0:1.29-1.el7
tuned.noarch 0:2.11.0-8.el7
tzdata.noarch 0:2020a-1.el7
util-linux.x86_64 0:2.23.2-63.el7
yum.noarch 0:3.4.3-167.el7
yum-utils.noarch 0:1.1.31-54.el7_8
Replaced:
iwl7265-firmware.noarch 0:22.0.7.0-72.el7
Complete!
+ echo 'Hello from user-data!'
Hello from user-data!
RHEL 8:
Installed:
grub2-tools-efi-1:2.02-82.el8_2.1.x86_64
kernel-4.18.0-193.13.2.el8_2.x86_64
kernel-core-4.18.0-193.13.2.el8_2.x86_64
kernel-modules-4.18.0-193.13.2.el8_2.x86_64
linux-firmware-20191202-97.gite8a0f4c9.el8.noarch
Complete!
+
echo 'Hello from user-data!'
Hello from user-data!
참고: 콘솔에서 사용자 데이터를 볼 수 있으므로, 전송하는 데이터에 기밀 정보가 포함되지는 않았는지 확인하세요.
관련 정보
시작 시 Linux 인스턴스에서 명령 실행