有一种方法可以设置EC2机器在启动时执行Kafka启动脚本吗? 我也使用java Aws SDK,所以我接受在EC2实例上运行命令的程序java的解决方案和在启动时运行kafka脚本的bash脚本模式的解决方案。
答案 0 :(得分:2)
可以在用户数据属性中传递脚本。
如果您使用的是Amazon Linux AMI,并且脚本的第一行以#!
开头,则脚本将在第一次启动实例时执行。< / p>
有关详细信息,请参阅:Running Commands on Your Linux Instance at Launch
答案 1 :(得分:1)
EC2实例的操作系统是什么?
您可以在实例启动时使用userdata脚本。请记住,这只是一次性活动
如果您需要每次重启EC2实例时启动脚本,那么您可以在操作系统启动时加载的Linux实例上使用public String toString() {
String output = matrixOne.toString().replace("[", "").replace("]", "");
return output;
}
文件。
答案 2 :(得分:0)
如果您正在运行Windows EC2,则需要阅读:https://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/ec2-windows-user-data.html
示例:
<script>
echo Current date and time >> %SystemRoot%\Temp\test.log
echo %DATE% %TIME% >> %SystemRoot%\Temp\test.log
</script>
答案 3 :(得分:0)
在CloudFormation中的 User Data 下添加脚本仅运行一次,恰好在启动实例时执行,而在重启实例时不执行,这是我的用例所需要的。我使用了上面和here所评论的 rc.local 方法。实际上,以下内容将我的脚本附加到rc.local
文件中并按预期执行:
Resources:
VM:
Type: 'AWS::EC2::Instance'
Properties:
[...]
UserData:
'Fn::Base64': !Sub |
#!/bin/bash -x
echo 'INSTANCEID="$(curl -s http://169.254.169.254/latest/meta-data/instance-id)"' >> /etc/rc.local
#echo 'INSTANCEID=$(ls /var/lib/cloud/instances)' >> /etc/rc.local
echo 'echo "aws ec2 stop-instances --instance-ids $INSTANCEID --region ${AWS::Region}" | at now + ${Lifetime} minutes' >> /etc/rc.local
其他提示:您可以按照以下说明使用AWS控制台检查用户数据(当前脚本)并对其进行修改:View and update the instance user data。