如何利用使用者資料在每次重新啟動 Amazon EC2 Linux 執行個體時自動執行腳本程序?

1 分的閱讀內容
0

我想要在 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-configtext/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

使用者資料格式

AWS 官方
AWS 官方已更新 2 年前