如何使用Cloudformation在AWS上创建和保存脚本?尝试启动卡夫卡-Zookeeper节点

问题描述

在我开始让您知道之前,我对整个云形成和总体编码还是很陌生的

我一直在尝试编写云形成模板,以使用单个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

请注意,我没有运行此代码,因此无法验证它是否可以直接使用。