Amazon web services AWS EC2-yum update在自动缩放LaunchConfig UserData中不起作用
当ssh连接到我的EC2实例时,我可以成功运行Amazon web services AWS EC2-yum update在自动缩放LaunchConfig UserData中不起作用,amazon-web-services,amazon-ec2,startup,yum,Amazon Web Services,Amazon Ec2,Startup,Yum,当ssh连接到我的EC2实例时,我可以成功运行sudo-yum-update。但是,当我将相同的命令附加到启动配置的userData时,我看到以下错误(在/var/log/cloud init output.log): 我的剧本: #!/bin/bash echo "launch script.." sudo yum update -y sudo yum install java-1.8.0 -y aws s3 cp s3://bucket/app.jar ./app.jar java -jar
sudo-yum-update
。但是,当我将相同的命令附加到启动配置的userData时,我看到以下错误(在/var/log/cloud init output.log
):
我的剧本:
#!/bin/bash
echo "launch script.."
sudo yum update -y
sudo yum install java-1.8.0 -y
aws s3 cp s3://bucket/app.jar ./app.jar
java -jar app.jar >> out.log
如何在EC2实例启动时运行yum命令?确保您确实拥有从EC2实例到internet的路由。这通常意味着您的VPC中有一个公共IP或到NAT实例/网关的路由,以及一个Internet网关 可能是userdata脚本在建立连接之前开始运行。在脚本运行yum update之前,您可能需要验证实例是否具有出站网络访问权限,例如:
#!/bin/bash
echo "launch script.."
until ping -c1 www.google.com &>/dev/null; do
echo "Waiting for network ..."
sleep 1
done
yum update -y
# other things here
还有其他选项等待网络(和)
还请注意,用户数据脚本是以root用户身份执行的,因此您不需要sudo。确保您确实拥有从EC2实例到internet的路由。这通常意味着您的VPC中有一个公共IP或到NAT实例/网关的路由,以及一个Internet网关 可能是userdata脚本在建立连接之前开始运行。在脚本运行yum update之前,您可能需要验证实例是否具有出站网络访问权限,例如:
#!/bin/bash
echo "launch script.."
until ping -c1 www.google.com &>/dev/null; do
echo "Waiting for network ..."
sleep 1
done
yum update -y
# other things here
还有其他选项等待网络(和)
还要注意,用户数据脚本是以root用户身份执行的,因此您不需要sudo。您可以共享您的用户数据脚本吗?我的猜测是,您没有在中设置-y标志!你的脚本行。我更新了我的问题。一开始我确实错过了-y标志,但问题仍然存在。请尝试更改-y标志的位置。我发现ec2可能非常特殊。下面是一个我成功运行的引导脚本示例:#/bin/bash yum install-y git yum groupinstall-y“开发工具”yum install-y gcc yum install build-essential-y g++在脚本运行yum update之前验证实例是否具有出站网络访问权限。比如:直到ping-c1 www.google.com&>/dev/null;do:;完成。还要注意,用户数据脚本是以root用户的身份执行的,因此您不需要sudo。@jarmod,启动时大约一分钟内确实没有Internet连接。创建一个类似于您的循环可以解决问题-如果您将此信息作为答案来写,我将接受它作为正确答案。有没有更优雅的解决方案?感觉有点黑。你能分享你的用户数据脚本吗?我的猜测是,您没有在中设置-y标志!你的脚本行。我更新了我的问题。一开始我确实错过了-y标志,但问题仍然存在。请尝试更改-y标志的位置。我发现ec2可能非常特殊。下面是一个我成功运行的引导脚本示例:#/bin/bash yum install-y git yum groupinstall-y“开发工具”yum install-y gcc yum install build-essential-y g++在脚本运行yum update之前验证实例是否具有出站网络访问权限。比如:直到ping-c1 www.google.com&>/dev/null;do:;完成。还要注意,用户数据脚本是以root用户的身份执行的,因此您不需要sudo。@jarmod,启动时大约一分钟内确实没有Internet连接。创建一个类似于您的循环可以解决问题-如果您将此信息作为答案来写,我将接受它作为正确答案。有没有更优雅的解决方案?这感觉有点不对劲。经过更多的研究,我意识到这不是正确的答案。正确的解决方案是将公共IP分配给EC2实例。您的解决方案之所以有效,是因为我分配了一个弹性IP,以便通过SSH登录并验证该解决方案。这个问题讨论的是同一个主题:是的,您显然需要到yum repos的出站路由。这意味着公共IP或到NAT实例/网关和Internet网关的路由。很高兴你找到了答案。@nagy.zsolt.hun嗨,我会在这个答案中添加你的根本原因,以帮助未来的读者,如果你想把这个作为公认的答案,或者拒绝它,我都可以。谢谢@jarmod,我想保留这个作为公认的答案。经过更多的研究,我意识到这不是正确的答案。正确的解决方案是将公共IP分配给EC2实例。您的解决方案之所以有效,是因为我分配了一个弹性IP,以便通过SSH登录并验证该解决方案。这个问题讨论的是同一个主题:是的,您显然需要到yum repos的出站路由。这意味着公共IP或到NAT实例/网关和Internet网关的路由。很高兴你找到了问题的症结所在。@nagy.zsolt.hun嗨,我会将你的根本原因添加到这个答案中,以帮助未来的读者,如果你想把这个作为公认的答案,或者拒绝它,我都可以。谢谢@jarmod,我想保留这个作为公认的答案。