IT/AWS

[AWS] EC2 Linux 인스턴스 재부팅시에도 UserData 실행하기

반응형

Intro

기본적으로 UserData는 EC2생성시에 한 번만 실행되도록 설정되어있습니다. 이는 cloud-init의 cloud_final_modules에서 기본값으로 once로 설정이 되어있기 때문입니다. 실제 EC2에 SSH로 접속하여 아래 경로를 확인해보면 config_scripts_user.once 파일이 기본적으로 구성이 되어있는것을 확인할 수 있습니다.

/var/lib/cloud/sem/config_scripts_user.once

재부팅시에도 UserData 실행하기

EC2가 초기에 생성될 때 뿐만아니라 재시작 될때도 UserData를 동작시키는 방법은 비교적 간단한데요. UserData에 아래와 같이 입력하면됩니다.( #!/bin/bash 에 원하는 bash 스크립트를 작성하면됩니다.)

UserData

Content-Type: multipart/mixed; boundary="//"
MIME-Version: 1.0

--//                                       ##--------------- ①
Content-Type: text/cloud-config; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment; filename="cloud-config.txt"

#cloud-config
cloud_final_modules:
- [scripts-user, always]

--//                                       ##--------------- ②                                     
Content-Type: text/x-shellscript; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment; filename="userdata.txt"

#!/bin/bash
/bin/echo "Hello World" >> /tmp/testfile.txt
--//--                                     ##--------------- final

위에서 보여드린 스크립트를 상세하게 설명해보겠습니다.
Content-Type이 multipart/mixed 이고 boubdary가 // 입니다.
즉, 파일과 텍스트가 혼합되어있는 형태라는 것이고 multipart의 구분을 //로 하겠다는 것입니다.
--// 부분은 멀티 파트 1번, 그 다음 --// 은 멀티파트2 번, 마지막 --//-- 은 끝남을 의미합니다.

중간에 cloud_final_modules 부분이 키 포인트인데요 scripts-user를 always 로 설정하여 재부팅시에도 UserData를 실행할 수 있도록 할 수 있게 되는 것입니다.

(Content-Type에 대해 궁금하시다면 다음 포스팅을 참고 하시기 바랍니다.)
https://kim-dragon.tistory.com/221

만약에 이미 생성되어있는 EC2에 1번만 UserData를 동작하도록 하고 싶다고 하면 아래와 같이 명령어를 입력하여 user-data.txt와 cloud-config.txt를 초기화하고 config_scripts_user.once파일을 삭제하여 1번만 다시 UserData가 동작하도록 구성할 수 있습니다.

# cat /dev/null > /var/lib/cloud/instances/i-*/user-data.txt
# cat /dev/null > /var/lib/cloud/instances/i-*/cloud-config.txt
# rm -rf /var/lib/cloud/sem/config_scripts_user.once
반응형