Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Amazon web services AWS EC2-yum update在自动缩放LaunchConfig UserData中不起作用_Amazon Web Services_Amazon Ec2_Startup_Yum - Fatal编程技术网

Amazon web services AWS EC2-yum update在自动缩放LaunchConfig UserData中不起作用

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

当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 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,我想保留这个作为公认的答案。