我想要在 Amazon Elastic Compute Cloud (Amazon EC2) 執行個體每次重新啟動時使用使用者資料執行指令碼。
簡短說明
預設情況下,當您啟動 EC2 執行個體時,使用者資料命令和 cloud-init 指令僅在第一次開機循環期間執行。若要覆寫此組態,請使用多用途網際網路郵件延伸標準 (MIME) 多段檔案來設定您的使用者資料命令和 cloud-init 指令。如需更多資訊,請參閱 cloud-init 網站上的 MIME multi-part archive (MIME 多段封存)。然後,將檔案新增至您的執行個體。
**注意:**您可以檢視任何執行個體執行個體使用者資料,但若要更新執行個體使用者資料,您必須停止您的執行個體。
解決方法
設定您的執行個體以停止和啟動
**注意:**當您停止和啟動執行個體時,該執行個體的公有 IP 位址也會變更。最佳實務是使用彈性 IP 位址,將外部流量路由至執行個體,而不是使用公共 IP 位址。如果您使用 Amazon Route 53,則在公共 IP 位址變更時,您可能需要更新 Route 53 DNS 記錄。停止再啟動與執行個體重新開機不同。如需更多資訊,請參閱 How EC2 instance stop and start works (EC2 執行個體停止再啟動的運作方式)。
在您停止並啟動執行個體之前,請執行以下動作:
設定執行個體以在每次重新啟動時執行指令碼
請完成下列步驟:
- 請確保您已在您的執行個體上安裝最新版 cloud-init。若要檢視最新的 cloud-init 版本,請參閱 GitHub 網站上的 Releases canonical/cloud-init (發行版本 canonical/cloud-init)。
- 確認適用於您使用者或角色的 AWS Identity and Access Management (IAM) 政策是否具有 ec2:ModifyInstanceAttribute 權限。如需修改您的 IAM 政策的步驟,請參閱 Edit IAM policies (console) (編輯 IAM 政策 (主控台))。
- 停止您的執行個體。
- 開啟 Amazon EC2 主控台。
- 選擇 Instances (執行個體),然後選擇您的執行個體。
- 選擇 Actions (動作),然後選取 Instance settings (執行個體設定)。
- 選擇 Edit user data (編輯使用者資料),然後以 MIME 多段檔案輸入您的使用者命令:
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="cloud-config.txt"
#!/bin/bash
/bin/echo "Hello World" >> /tmp/testfile.txt
--//--
**注意:**請將 /bin/echo "Hello World" >> /tmp/testfile.txt 部分替換為您要在執行個體啟動時執行的 Shell 命令。上述命令範例將 Hello World 寫入 /tmp 目錄中的 testfile.txt 檔案。透過 MIME 多段檔案,您可以同時將多個內容類型新增至使用者資料。上述命令同時使用 text/cloud-config 和 text/x-shellscript 內容類型。請將 scripts-user 參數設為 always,讓 text/cloud-config 內容類型能覆寫使用者資料在 cloud-init 套件中的執行頻率。text/x-shellscript 內容類型會提供用來執行 cloud-init cloud_final_modules 模組的使用者命令。
- 選擇 Save (儲存)。
- 啟動您的執行個體,然後驗證您的指令碼是否執行。
**注意:**如果您的指令碼未如預期執行,請檢查 /var/log/cloud-init-output.log 檔案,以取得可用來偵錯指令碼的資訊。如需更多資訊,請參閱 cloud-init 網站上的 How to debug cloud-init (如何對 cloud-init 進行偵錯)。
相關資訊
Run commands when you launch an EC2 instance with user data input (使用使用者資料輸入啟動 EC2 執行個體時執行命令)
How do I run a command on a new EC2 Windows instance at launch? (如何在啟動時於新的 EC2 Windows 執行個體上執行命令?)
當我重新啟動或啟動執行個體時,如何在現有 EC2 Windows 執行個體上執行命令?
cloud-init 網站上的 User-data formats (使用者資料格式)