Amazon EC2 인스턴스를 다시 시작할 때마다 사용자 데이터를 활용하여 스크립트를 자동으로 실행하려면 어떻게 해야 합니까?
최종 업데이트 날짜: 2020년 4월 16일
Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스를 다시 시작할 때마다 사용자 데이터를 사용하여 스크립트를 실행하려고 합니다. 어떻게 해야 합니까?
간략한 설명
기본적으로 사용자 데이터 스크립트 및 cloud-init 명령은 EC2 인스턴스가 시작될 때 첫 부팅 주기 중에만 실행됩니다. 그러나 MIME 멀티파트 파일을 사용하여 사용자 데이터 스크립트 및 cloud-init 명령을 구성할 수도 있습니다. MIME 멀티파트 파일을 사용하면 cloud-init 패키지에서 사용자 데이터를 실행하는 빈도를 재정의할 수 있습니다. 그런 다음, 파일에서 사용자 스크립트를 실행합니다. MIME 멀티파트 파일에 대한 자세한 내용은 cloud-init 웹 사이트의 MIME 멀티파트 아카이브를 참조하십시오.
해결 방법
경고: 이 절차를 시작하기 전에 다음 사항에 검토하십시오.
- 인스턴스를 중지하고 시작하면 인스턴스 스토어 볼륨에 있는 데이터가 모두 지워집니다. 따라서 인스턴스 스토어 볼륨에서 유지하려는 데이터를 모두 백업해야 합니다. 자세한 내용은 AMI의 루트 디바이스 유형 결정을 참조하십시오.
- 인스턴스를 중지하고 다시 시작하면 인스턴스의 퍼블릭 IP 주소가 변경됩니다. 외부 트래픽을 인스턴스로 라우팅할 때에는 퍼블릭 IP 주소 대신, 탄력적 IP 주소를 사용하는 것이 모범 사례입니다.
1. cloud-init의 최신 버전이 EC2 인스턴스에 설치되어 있고 올바르게 작동하는지 확인합니다.
2. 보안을 위해 ModifyInstanceAttribute API를 통해 사용자 데이터를 추가하거나 제거할 수 있는 사용자를 제한하도록 IAM 정책을 생성합니다.
3. Amazon EC2 콘솔을 엽니다.
4. 인스턴스를 중지합니다.
5. [작업]을 선택하고 [인스턴스 설정]을 선택하고 [사용자 데이터 보기/변경]을 선택합니다.
6. 사용자 스크립트를 [사용자 데이터 보기/변경] 상자에 복사하고 [저장]을 선택합니다.
다음 예제에서는 "Hello World"를 /tmp 디렉터리의 testfile.txt 파일에 작성하는 쉘 스크립트입니다.
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
--//
기본적으로 cloud-init에서는 사용자 데이터에서 한 번에 하나의 콘텐츠 유형만 허용합니다. 그러나 이 예제에서는 MIME 멀티파트 파일의 text/cloud-config 및 text/x-shellscript 콘텐츠 유형 모두를 보여줍니다.
text/cloud-config 콘텐츠 유형은 SCRIPTS-USER 파라미터를 ALWAYS로 설정하여 cloud-init 패키지에서 사용자 데이터를 실행하는 빈도를 재정의합니다.
text/x-shellscript 콘텐츠 유형은 cloud-init cloud_final_modules 모듈에서 실행할 실제 사용자 스크립트를 제공합니다. 이 예제에서는 다음과 같은 하나의 줄만 실행됩니다. /bin/echo "Hello World." >> /tmp/testfile.txt.
참고: /bin/echo "Hello World." >> /tmp/testfile.txt 줄을 인스턴스 부팅 중에 실행할 셸 스크립트로 바꿉니다.
7. EC2 인스턴스를 다시 시작하고 스크립트가 올바르게 실행되는지 확인합니다.