Amazon-Ec2
Cloud-init 無法在使用者數據中執行 awscli 命令
需要幫助來修復錯誤並使實例能夠執行無問題的使用者數據腳本。
問題: cloud-init 無法執行 awscli 命令。我已經提到了一個自定義腳本(將出現在我的 AMI 創建的實例上)作為使用者數據的一部分執行。自定義腳本在提到 awscli 命令的部分失敗。
**描述:**我正在嘗試在從某個 AMI 創建實例後立即實現應用程序內容的自動部署。為此,我將自定義腳本放在實例上並創建了 AMI,它將作為未來實例的模板。自定義腳本具有非常簡單的部署和管理應用程序服務生命週期(app||web||start||stop||status)的邏輯。當腳本執行 aswcli 命令以從 S3 儲存桶中獲取戰爭或靜態內容時,問題就出現了。它給出以下錯誤:
來自 cloud-init-output.log 的片段:
Mar 12 04:06:06 ip-XXX cloud-init: Deploying Static Content XXX.zip at location /var/www/html Mar 12 04:06:06 ip-XXX cloud-init: /opt/deploy/deployment_V4.sh: line 94: aws: command not found =================== Mar 12 04:06:06 ip-XXX cloud-init: Deploying WAR XXX.war at location /opt/tomcat/webapps Mar 12 04:06:06 ip-XXX cloud-init: /opt/deploy/deployment_V4.sh: line 80: aws: command not found
然而,如果我從實例手動執行相同的自定義部署腳本,它會正確部署內容。此外,如果我在實例上手動執行“使用者數據”腳本,則部署完成且沒有任何錯誤。
片段:
[root@ip-XXX]# cd /var/lib/cloud/instance/scripts/ [root@ip-XXX scripts]# ./part-001 HTTPD Service is Stopped TOMCAT Service is Stopped VERSION is V4 Deploying Static Content XXX.zip at location /var/www/html download: s3://<PATH>/XXX.zip to ../../../../../www/html/XXX.zip Web Deployment Successful VERSION is V4 Deploying WAR XXX.war at location /opt/tomcat/webapps download: s3://<PATH>/XXX.war to ../../../../../../opt/tomcat/webapps/XXX.war App Deployment Successful HTTPD Service is Started TOMCAT Service is Started
使用者數據:
#!/bin/sh VERSION=V4 AD=/opt/deploy #Run auto-deployment script sh /opt/deploy/deployment_${VERSION}.sh stop sh /opt/deploy/deployment_${VERSION}.sh web sh /opt/deploy/deployment_${VERSION}.sh app sh /opt/deploy/deployment_${VERSION}.sh start
筆記:
作業系統為 CentOS7_64Bit
實例在啟動時註冊為 s3 enable 角色。
AWSCLI 安裝在實例上並且是 AMI 的一部分。
aws --version aws-cli/1.11.56 Python/2.7.5 Linux/3.10.0-514.6.2.el7.x86_64 botocore/1.5.19
aws 二進製文件在哪裡?
which aws
我的猜測是 aws 所在的目錄不在路徑中。
感謝@Robo,問題得到解決。
根據他的指示,我添加了“export PATH=~/.local/bin: $ PATH”作為“使用者數據”的一部分,這起到了作用。