Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스를 다시 시작할 때마다 사용자 데이터를 사용하여 스크립트를 실행하려고 합니다. 어떻게 해야 하나요?
간략한 설명
기본적으로 사용자 데이터 스크립트 및 cloud-init 명령은 EC2 인스턴스가 시작될 때 첫 부팅 주기 중에만 실행됩니다. 그러나 MIME 멀티파트 파일을 사용하여 사용자 데이터 스크립트 및 cloud-init 명령을 구성할 수도 있습니다. mime 멀티파트 파일을 사용하면 cloud-init 패키지에서 사용자 데이터를 실행하는 빈도를 스크립트로 재정의할 수 있습니다. 그런 다음 파일에서 사용자 스크립트를 실행합니다. MIME 멀티파트 파일에 대한 자세한 내용은 cloud-init 웹 사이트의 MIME 멀티파트 아카이브를 참조하세요.
참고: 다음 해결 방법을 진행하기 전에 인스턴스의 스냅샷을 생성하는 것이 가장 좋습니다.
해결 방법
경고: 이 절차를 시작하기 전에 다음 사항에 검토하십시오.
1. cloud-init의 최신 버전이 EC2 인스턴스에 설치되어 있고 올바르게 작동하는지 확인합니다.
2. 보안을 위해 ModifyInstanceAttribute API를 통해 사용자 데이터를 추가하거나 제거할 수 있는 사용자를 제한하도록 IAM 정책을 생성합니다.
3. Amazon EC2 콘솔을 엽니다.
4. 인스턴스를 중지합니다.
5. [작업]을 선택하고 [인스턴스 설정]을 선택한 다음 [사용자 데이터 편집]을 선택합니다.
6. 사용자 스크립트를 [사용자 데이터 편집] 상자에 복사하고 [저장]을 선택합니다.
다음은 /tmp 디렉터리의 testfile.txt 파일에 "Hello World"라는 텍스트를 쓰는 셸 스크립트의 예입니다.
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 인스턴스를 다시 시작하고 스크립트가 올바르게 실행되는지 확인합니다.
관련 정보
시작 시 Linux 인스턴스에서 명령 실행
시작 시 Windows 인스턴스에서 명령 실행
AWS Systems Manager Automation
User-Data Formats