问题描述
在我开始让您知道之前,我对整个云形成和总体编码还是很陌生的
我一直在尝试编写云形成模板,以使用单个Zookeeper节点启动实例并逐步进行。 所以我写了我的用户数据来下载Kafka tar并解压缩。
现在而不是使用“ bin / zookeeper-server-start.sh -daemon config / zookeeper.properties”来启动Zookeeper, 我想制作一个名为zookeeper的文件,然后在其上编写一个shell脚本并使其可执行 我该如何在cloudformation中做到这一点?
DAEMON_PATH=/home/ubuntu/kafka/bin
DAEMON_NAME=zookeeper
PATH=$PATH:$DAEMON_PATH
# See how we were called.
case "$1" in
start)
# Start daemon.
pid=`ps ax | grep -i 'org.apache.zookeeper' | grep -v grep | awk '{print $1}'`
if [ -n "$pid" ]
then
echo "Zookeeper is already running";
else
echo "Starting $DAEMON_NAME";
$DAEMON_PATH/zookeeper-server-start.sh -daemon /home/ubuntu/kafka/config/zookeeper.properties
fi
;;
stop)
echo "Shutting down $DAEMON_NAME";
$DAEMON_PATH/zookeeper-server-stop.sh
;;
restart)
$0 stop
sleep 2
$0 start
;;
status)
pid=`ps ax | grep -i 'org.apache.zookeeper' | grep -v grep | awk '{print $1}'`
if [ -n "$pid" ]
then
echo "Zookeeper is Running as PID: $pid"
else
echo "Zookeeper is not Running"
fi
;;
*)
echo "Usage: $0 {start|stop|restart|status}"
exit 1
esac
exit 0
这是我要编写的脚本,因此我可以使用以下命令启动和停止Zookeeper sudo服务zookeeper启动/停止
手动使用CLI,我做了以下操作,然后将脚本粘贴到zookeeper中并保存。
sudo nano /etc/init.d/zookeeper
sudo chmod +x /etc/init.d/zookeeper
sudo chown root:root /etc/init.d/zookeeper
谢谢,希望大家理解我的问题。
解决方法
有几种方法:
- 将文件存储在S3中,并使用
UserData
中的AWS开发工具包下载。 - 直接在
UserData
中创建文件 - 使用AWS::CloudFormation::Init定义文件。
- 使用脚本创建pre-baked AMI并使用AMI启动实例
下面是UserData
的示例,该示例使用bash
中的HEREDOC创建此类文件。
UserData:
Fn::Base64: |
#!/bin/bash -ex
cat >/etc/init.d/zookeeper << 'EOL'
DAEMON_PATH=/home/ubuntu/kafka/bin
DAEMON_NAME=zookeeper
PATH=$PATH:$DAEMON_PATH
# See how we were called.
case "$1" in
start)
# Start daemon.
pid=`ps ax | grep -i 'org.apache.zookeeper' | grep -v grep | awk '{print $1}'`
if [ -n "$pid" ]
then
echo "Zookeeper is already running";
else
echo "Starting $DAEMON_NAME";
$DAEMON_PATH/zookeeper-server-start.sh -daemon /home/ubuntu/kafka/config/zookeeper.properties
fi
;;
stop)
echo "Shutting down $DAEMON_NAME";
$DAEMON_PATH/zookeeper-server-stop.sh
;;
restart)
$0 stop
sleep 2
$0 start
;;
status)
pid=`ps ax | grep -i 'org.apache.zookeeper' | grep -v grep | awk '{print $1}'`
if [ -n "$pid" ]
then
echo "Zookeeper is Running as PID: $pid"
else
echo "Zookeeper is not Running"
fi
;;
*)
echo "Usage: $0 {start|stop|restart|status}"
exit 1
esac
exit 0
EOL
chmod +x /etc/init.d/zookeeper
chown root:root /etc/init.d/zookeeper
请注意,我没有运行此代码,因此无法验证它是否可以直接使用。