需要帮助来修复错误并使实例能够运行免费的用户数据脚本。
问题:cloud-init 无法执行 awscli 命令。我提到了一个自定义脚本(它将出现在我的 AMI 创建的实例上)作为用户数据的一部分运行。自定义脚本在提到 awscli 命令的部分失败。
描述:我正在尝试实现从某个 AMI 创建实例后立即自动部署应用程序内容。为此,我在实例上放置了自定义脚本,并创建了将作为未来实例模板的 AMI。自定义脚本具有非常简单的部署逻辑和管理应用程序服务生命周期 (app||web||start||stop||status)。当脚本执行 aswcli 命令以从 S3 存储桶中获取 war 或静态内容时,问题就出现了。它给出以下错误:
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启用角色。
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
答案1
aws 二进制文件在哪里?
which aws
我猜测 aws 所在的目录不在路径中。
答案2
谢谢 @机器人问题已解决。
根据他的指示,我添加了“export PATH=~/.local/bin:\$PATH”作为“用户数据”的一部分,这样就成功了。