如何解決在雲形成中包含 EC2 實例上的元數據的問題?

上次更新日期:2022 年 4 月 12 日

我使用 AWS። CloudFormation። Init 在亞馬遜彈性雲計算 (Amazon EC2) 實例上包含元數據,但我沒有看到實例上的更改。

簡短描述

AWS CloudFormation 堆棧中的 EC2 實例元數據的問題可能是由於以下原因造成的:

  • cfn-init 幫助程序腳本未安裝在 CloudFormation 堆棧的一個或多個實例上。若要解決此問題,請完成 驗證是否已安裝 cfn-init 幫助程序腳本 部分中的步驟。
  • 實例未連接到互聯網。若要解決此問題,請完成 驗證實例已連接到 Internet 部分中的步驟。
  • 雲形成模板包含語法錯誤或不正確的值。若要解決此問題,請完成在 雲 init 或 cfn-init 日誌部分中搜索錯誤中 的步驟。

重要提示: 在完成以下解決方案之前,請將 CloudFormation 堆棧的「 故障時回滾 」選項設置為「」。

注意: 以下分辨率特定於使用 Linux 實例創建的雲形成堆棧。

解決方案

驗證是否已安裝 cfn-init 幫助程序腳本

要確認已配置為向 CloudFormation 資源發送信號的實例上安裝 cfn-init,請執行以下操作:

1.    使用 SSH 連線至執行個體

2.    運行以下命令之一,以驗證 cfn-init 或 aws-cfn-引導程序包是否已安裝在您的目錄中。

CFN-基因:

$ sudo find / -name cfn-init
/opt/aws/bin/cfn-init
/opt/aws/apitools/cfn-init
/opt/aws/apitools/cfn-init-1.4-34.24.amzn1/bin/cfn-init
/var/lib/cfn-init

-或-

aws-cfn 引導程序包:

$ sudo rpm -q aws-cfn-bootstrap
aws-cfn-bootstrap-1.4-34.24.amzn1.noarch

重要提示: 前面的命令僅適用於使用 RPM 包管理器的分發。

注意:預設情況下,CloudFormation 協助程式腳本安裝在 Amazon Linux Amazon Machine Image (AMI) 上。如果未安裝 CloudFormation 幫助程序腳本,請參閲 CloudFormation 幫助程序腳本參考 ,瞭解有關如何安裝這些腳本的説明。

驗證實例是否已連接到互聯網

如果實例位於 Amazon Virtual Private Cloud (Amazon VPC) 中,則可以透過以下方式連接到網路:

  • 私有子網中的 NAT 設備
  • 公有子網中的互聯網網關

要測試實例的互聯網連接,請訪問公共網頁(如 AWS ),然後在實例上運行 curl 命令。例如:

curl -I https://aws.amazon.com

注意: 如果實例連接到互聯網,則該命令將返回 HTTP 200 狀態代碼。

如果您使用的是接口 VPC 終端節點,則終端節點必須與實例位於同一 AWS 區域中。此外,連接到接口終端節點的安全組必須允許來自 Amazon VPC 私有子網的端口 443 上的傳入連接。

在雲啟動或 cfn-init 日誌中搜索錯誤

要在雲啟動日誌或 cfn-init 日誌中搜索錯誤,請執行以下操作:

1.    使用 SSH 連線至您的執行個體

2.    通過在以下日誌中搜索關鍵字「錯誤」或「失敗」來查找詳細的錯誤或失敗消息:

  • /var/log/cloud-init-output.log
  • /var/log/cloud-init.log
  • /var/log/cfn-init.log
  • /var/log/cfn-init-cmd.log

要解析 /var/log/ cfn 或 /var/log/ 雲d-init 文件中單詞「錯誤」或「失敗」的所有實例, 請運行以下命令:

grep -ni 'error\|failure' $(sudo find /var/log -name cfn-init\* -or -name cloud-init\*)

注意: 前面的命令返回文件名、行號和錯誤消息。

查找 cfn-init.log 。如果你找不到它,那麼 cfn-init 沒有運行。您還必須檢查 cloud-init-output.log cloud-init.log 以查看運行用户數據時是否出現故障。確定錯誤後,根據錯誤消息修復它,然後重新創建堆棧。

如果 cfn-init.log 存在,則運行 cfn-init,但發生了失敗。檢查 cfn-init.log 以查看出現了什麼問題,並根據錯誤消息修復它。

要確認已將 用户數據 屬性配置為運行 cfn-init,請完成以下步驟:

  1. 在代碼編輯器中,打開堆棧的 AWS CloudFormation 模板,然後找到 用户數據 屬性部分。
  2. 檢查錯誤,包括語法錯誤、缺少空格、拼寫錯誤和其他拼寫錯誤。
  3. 確認堆棧、資源和區域屬性的值是否正確。
  4. 對於 UserData 屬性的 Fn። 連接 內部函數 ,請使用 -v 選項在詳細模式下運行 cfn-init。請參閲 JSON 和 YAML 示例模板