我想要在 Amazon Elastic Compute Cloud (Amazon EC2) 執行個體每次重新啟動時利用使用者資料執行指令碼。我該如何操作?
簡短描述
依預設,使用者資料指令碼和 cloud-init 指令僅在 EC2 執行個體啟動時的第一個引導循環期間執行。但是,您可以使用 MIME 多部分檔案設定使用者資料指令碼和 cloud-init 指令。MIME 多部分檔案可讓您的指令碼覆寫在 cloud-init 套件中執行使用者資料的頻率。然後,該檔案執行使用者指令碼。如需 MIME 多部分檔案的詳細資訊,請參閱 cloud-init 網站上的 Mime 多部分封存。
注意: 最佳做法是先建立執行個體的快照,然後再繼續執行下列解決方法。
解決方法
警告: 在開始此程序之前,請檢閱下列項目:
1. 確定最新版本的 cloud-init 已安裝,並在 EC2 執行個體上正常運作。
2. 出於安全原因,制定 IAM 政策以限制可透過 ModifyInstanceAttribute API 新增或移除使用者資料的使用者。
3. 開啟 Amazon EC2 控制台。
4. 停止執行個體。
5. 依序選擇動作、執行個體設定及編輯使用者資料。
6. 將使用者指令碼複製到編輯使用者資料方塊中,然後選擇儲存。
下列範例是將「Hello World」寫入 /tmp 目錄中 testfile.txt 檔案的 Shell 指令碼。
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 內容類型可覆寫使用者資料在 cloud-init 套件中執行的頻率,方法是將 SCRIPTS-USER 參數設定為 ALWAYS。
text/x-shellscript 內容類型提供由 cloud-init cloud_final_modules 模組執行的實際使用者指令碼。在這個範例中,只有一行要執行,就是 /bin/echo "Hello World." >> /tmp/testfile.txt。
注意: 將 /bin/echo "Hello World." >> /tmp/testfile.txt 行替換為您要在執行個體引導期間執行的 Shell 指令碼。
7. 再次啟動 EC2 執行個體,並驗證指令碼是否正確執行。
相關資訊
啟動時在 Linux 執行個體上執行命令
啟動時在 Windows 執行個體上執行命令
AWS Systems Manager Automation
使用者資料格式