在 AWS CloudFormation 中,我使用 AWS:: CloudFormation:: Init 在 Amazon Elastic Cloud Compute (Amazon EC2) 執行個體上包含中繼資料。但是,我在執行個體上沒有看到變更。
解決方法
先決條件:將 CloudFormation 堆疊的失敗時還原選項設定為否。
如果將失敗時還原設為否,但仍無法在 EC2 執行個體中包含中繼資料,請執行下列動作。
**注意:**下列解決方法步驟適用於您使用 Linux 執行個體建立的 CloudFormation 堆疊。
確認已安裝 cfn-init 輔助程式指令碼
若要確認您已在設定為傳送訊號至 CloudFormation 資源的執行個體上安裝 cfn-init,請完成下列步驟:
- 使用 SSH 連線到執行個體。
- 確認 cfn-init 或 aws-cfn-bootstrap 套件已安裝在您的目錄中。
若要檢查 cfn-init,請執行下列命令:
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-bootstrap 套件,請執行下列命令:
sudo rpm -q aws-cfn-bootstrapaws-cfn-bootstrap-1.4-34.24.amzn1.noarch
**注意:**上述命令僅適用於使用 RPM 套件管理員的發行版。
依預設,Amazon Linux Amazon Machine Image (AMI) 上已安裝 CloudFormation 協助程式指令碼。
確認執行個體已連線到網際網路
如果執行個體位於 Amazon Virtual Private Cloud (Amazon VPC) 中,則執行個體可以透過下列方法連線到網際網路:
- 私人子網路中的 NAT 裝置
- 公有子網路中的網際網路閘道
若要測試執行個體的網際網路連線,請開啟公有網頁,例如 AWS 首頁。然後,在執行個體上執行 curl 命令。範例:
curl -I https://aws.amazon.com
如果執行個體已連線到網際網路,則命令會傳回 HTTP 200 狀態代碼。
如果您使用介面 VPC 端點,則端點必須與執行個體位於相同的 AWS 區域。此外,連接到介面端點的安全群組必須允許從 Amazon VPC 的私人子網路連接埠 443 傳入連線。
在 cloud-init 或 cfn-init 日誌中搜尋錯誤
若要在 cloud-init 日誌或 cfn-init 日誌中搜尋語法錯誤或不正確的值,請完成下列步驟:
- 使用 SSH 連接至執行個體。
- 若要尋找詳細的錯誤訊息,請在下列日誌中搜尋 error 或 failure 關鍵字:
/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/cloud-init 檔案中字詞 error 或 failure 的所有執行個體,請執行下列命令:
grep -ni 'error\|failure' $(sudo find /var/log -name cfn-init\* -or -name cloud-init\*)
**注意:**上述命令會傳回檔名、行號和錯誤訊息。
- 使用詳細的錯誤訊息來修正錯誤,然後更新堆疊。
如果 cfn-init.log 不存在,則表示 CloudFormation 範本未執運行 cfn-init。
若要確認您已將 UserData 屬性設定為執行 cfn-init,請完成下列步驟:
- 在程式碼編輯器中,開啟堆疊的 CloudFormation 範本。
- 在 UserData 下,檢查是否有錯誤,例如語法錯誤、空格遺失、拼字錯誤和其他錯誤。
- 確認堆疊、資源和區域內容的值正確無誤。
- 對於 UserData 屬性的 Fn::Join 內建函數,請使用 -v 在詳細模式下執行 cfn-init。如需範例輸出,請參閱範例。
相關資訊
CloudFormation VPC 端點的注意事項
AWS::CloudFormation::Init
如何解決 AWS CloudFormation 中的「無法在指定的持續時間內收到 X 個資源訊號」錯誤?