터미널에서 cloud-init이 설치되어있는지 확인한다.
(재시작마다 실행시키는 경우가 아니라면 쉘스크립트만으로 가능하다.)
(Red Hat / CentOS) yum list installed cloud-init
( Debian / Ubuntu) apt-cache search cloud-init
설치되어있지 않다면, 다음 명령어로 설치해주자!
(Red Hat / CentOS) yum install cloud-init
( Debian / Ubuntu) apt-get install -y cloud-init
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
--//
위 예제는 인스턴스를 재시작할때마다 자동으로 "hello world"가 적혀있는 testfile.txt를 생성한다.
cd /tmp
tmp 디렉토리에 접근하여 파일이 생성되었는지 확인한다.
/var/log/cloud-init-output.log
또는 위 로그파일에서 cloud-init 로그를 확인할 수 있다.
나는 재시작마다 웹서버를 자동으로 구동해주는 기능이 필요해서 다음과 같이 코드를 수정해보았다.
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
$(./home/ubuntu/startup.sh)
--//
인스턴스를 재시작 후 확인해보니 잘 동작했다! ^o^
코드를 작성할 때 유의할 점
참고: 인스턴스의 사용자 데이터를 수정하는 경우 ModifyInstanceAttribute API 작업을 사용합니다. AWS Identity and Access Management(IAM) 정책을 생성하여 이 작업을 제한할 수 있습니다.