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

How to Create and save a script on AWS, using Cloudformation ? trying to launch kafka - zookeeper node

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

我一直在尝试编写一个云形成模板来启动一个具有单个 zookeeper 节点的实例并逐步进行。 所以我写了我的用户数据来下载 Kafka tar 并解压缩。

现在不再使用“bin/zookeeper-server-start.sh -daemon config/zookeeper.properties ”来 start 动物园管理员, 我想创建一个名为 zookeeper 的文件,然后在上面写一个 shell 脚本并使其可执行 我如何在 cloudformation 中执行此操作??

 DAEMON_PATH=/home/ubuntu/kafka/bin
 DAEMON_NAME=zookeeper
 
 PATH=$PATH:$DAEMON_PATH
 
 # See how we were called.
 case "" in
   start)
         # Start daemon.
         pid=`ps ax | grep -i 'org.apache.zookeeper' | grep -v grep | awk '{print }'`
         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)
         [=10=] stop
         sleep 2
         [=10=] start
         ;;
   status)
         pid=`ps ax | grep -i 'org.apache.zookeeper' | grep -v grep | awk '{print }'`
         if [ -n "$pid" ]
           then
           echo "Zookeeper is Running as PID: $pid"
         else
           echo "Zookeeper is not Running"
         fi
         ;;
   *)
         echo "Usage: [=10=] {start|stop|restart|status}"
         exit 1
 esac
 
 exit 0

这是我正在尝试编写的脚本,因此我可以 start 并停止使用 zookeeper sudo 服务动物园管理员 start/stop

我手动使用 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 SDK 下载它
  • 直接在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 "" in
                start)
                      # Start daemon.
                      pid=`ps ax | grep -i 'org.apache.zookeeper' | grep -v grep | awk '{print }'`
                      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)
                      [=10=] stop
                      sleep 2
                      [=10=] start
                      ;;
                status)
                      pid=`ps ax | grep -i 'org.apache.zookeeper' | grep -v grep | awk '{print }'`
                      if [ -n "$pid" ]
                        then
                        echo "Zookeeper is Running as PID: $pid"
                      else
                        echo "Zookeeper is not Running"
                      fi
                      ;;
                *)
                      echo "Usage: [=10=] {start|stop|restart|status}"
                      exit 1
              esac

              exit 0
              EOL

              chmod +x /etc/init.d/zookeeper
              chown root:root /etc/init.d/zookeeper

请注意,我没有 运行 这个代码,因此我无法验证它是否可以开箱即用。