跳至內容

如何使用使用者資料在 Amazon EC2 Linux 執行個體每次重新啟動時自動執行指令碼?

2 分的閱讀內容
0

我想要在 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 執行個體停止再啟動的運作方式)。

在您停止並啟動執行個體之前,請執行以下動作:

設定執行個體以在每次重新啟動時執行指令碼

請完成下列步驟:

  1. 請確保您已在您的執行個體上安裝最新版 cloud-init。若要檢視最新的 cloud-init 版本,請參閱 GitHub 網站上的 Releases canonical/cloud-init (發行版本 canonical/cloud-init)。
  2. 確認適用於您使用者或角色的 AWS Identity and Access Management (IAM) 政策是否具有 ec2:ModifyInstanceAttribute 權限。如需修改您的 IAM 政策的步驟,請參閱 Edit IAM policies (console) (編輯 IAM 政策 (主控台))。
  3. 停止您的執行個體
  4. 開啟 Amazon EC2 主控台
  5. 選擇 Instances (執行個體),然後選擇您的執行個體。
  6. 選擇 Actions (動作),然後選取 Instance settings (執行個體設定)。
  7. 選擇 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-configtext/x-shellscript 內容類型。請將 scripts-user 參數設為 always,讓 text/cloud-config 內容類型能覆寫使用者資料在 cloud-init 套件中的執行頻率。text/x-shellscript 內容類型會提供用來執行 cloud-init cloud_final_modules 模組的使用者命令。
  8. 選擇 Save (儲存)。
  9. 啟動您的執行個體,然後驗證您的指令碼是否執行。
    **注意:**如果您的指令碼未如預期執行,請檢查 /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 (使用者資料格式)

AWS 官方已更新 6 個月前