AWS EC2 Cloud-init & Shell Script 로 재시작마다 명령어 자동 실행하기 ! 💻

김우유·2020년 10월 15일
1

AWS

목록 보기
1/1

1. Cloud-init 설치 확인

터미널에서 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

2. 사용자 데이터 설정

  1. EC2 콘솔에 접속하여 인스턴스를 중지한다.
  2. [작업]-[인스턴스 설정]-[edit user data]를 선택한다.
  3. 다음의 예제 스크립트를 복사하여 [사용자 데이터] 필드에 붙여넣기 후 저장시작한다.
  4. 인스턴스를 재시작한다.
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를 생성한다.

3. 확인

cd /tmp

tmp 디렉토리에 접근하여 파일이 생성되었는지 확인한다.

/var/log/cloud-init-output.log

또는 위 로그파일에서 cloud-init 로그를 확인할 수 있다.

4. 응용

나는 재시작마다 웹서버를 자동으로 구동해주는 기능이 필요해서 다음과 같이 코드를 수정해보았다.

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^

코드를 작성할 때 유의할 점

  • root 권한으로 실행되므로 sudo 명령어를 사용하지 말 것
  • 대화형으로 실행되지 않으므로 -y 등 적절한 옵션 사용이 필요

참고: 인스턴스의 사용자 데이터를 수정하는 경우 ModifyInstanceAttribute API 작업을 사용합니다. AWS Identity and Access Management(IAM) 정책을 생성하여 이 작업을 제한할 수 있습니다.

profile
#ML #DL #Web #Data

0개의 댓글