Amazon-Ec2

Cloud-init 無法在使用者數據中執行 awscli 命令

  • July 13, 2018

需要幫助來修復錯誤並使實例能夠執行無問題的使用者數據腳本。

問題: 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

筆記:

  1. 作業系統為 CentOS7_64Bit

  2. 實例在啟動時註冊為 s3 enable 角色。

  3. 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”作為“使用者數據”的一部分,這起到了作用。

引用自:https://serverfault.com/questions/837761