通过用户数据在 EC2 实例上安装 CodeDeploy 代理

Installing CodeDeploy Agent on EC2 Instance via User Data

我希望在 EC2 实例上安装 CodeDeploy 代理,并通过 CloudFormation 部署用户数据。 Here is the script I'm using from AWS

但是,当我将脚本放在 CloudFormation 中我的 EC2 实例的 UserData 属性 中时,我从 linter 中收到此错误:

E1019 Parameter PLAT for Fn::Sub not found at Resources/Server/Properties/UserData/Fn::Base64/Fn::Sub

这是片段:

UserData:
        'Fn::Base64': !Sub |
          #!/bin/bash -xe

          ## Code Deploy Agent Bootstrap Script##


          exec > >(tee /var/log/user-data.log|logger -t user-data -s 2>/dev/console) 2>&1
          AUTOUPDATE=false

          function installdep(){

          if [ ${PLAT} = "ubuntu" ]; then

            apt-get -y update
            # Satisfying even ubuntu older versions.
            apt-get -y install jq awscli ruby2.0 || apt-get -y install jq awscli ruby



          elif [ ${PLAT} = "amz" ]; then
            yum -y update
            yum install -y aws-cli ruby jq

          fi

          }

          function platformize(){

          #Linux OS detection#
          if hash lsb_release; then
            echo "Ubuntu server OS detected"
            export PLAT="ubuntu"


          elif hash yum; then
            echo "Amazon Linux detected"
            export PLAT="amz"

          else
            echo "Unsupported release"
            exit 1

          fi
          }


          function execute(){

          if [ ${PLAT} = "ubuntu" ]; then

            cd /tmp/
            wget https://aws-codedeploy-${REGION}.s3.amazonaws.com/latest/install
            chmod +x ./install

            if ./install auto; then
              echo "Instalation completed"
                if ! ${AUTOUPDATE}; then
                      echo "Disabling Auto Update"
                      sed -i '/@reboot/d' /etc/cron.d/codedeploy-agent-update
                      chattr +i /etc/cron.d/codedeploy-agent-update
                      rm -f /tmp/install
                fi
              exit 0
            else
              echo "Instalation script failed, please investigate"
              rm -f /tmp/install
              exit 1
            fi

          elif [ ${PLAT} = "amz" ]; then

            cd /tmp/
            wget https://aws-codedeploy-${REGION}.s3.amazonaws.com/latest/install
            chmod +x ./install

              if ./install auto; then
                echo "Instalation completed"
                  if ! ${AUTOUPDATE}; then
                      echo "Disabling auto update"
                      sed -i '/@reboot/d' /etc/cron.d/codedeploy-agent-update
                      chattr +i /etc/cron.d/codedeploy-agent-update
                      rm -f /tmp/install
                  fi
                exit 0
              else
                echo "Instalation script failed, please investigate"
                rm -f /tmp/install
                exit 1
              fi

          else
            echo "Unsupported platform ''${PLAT}''"
          fi

          }

          platformize
          installdep
          REGION=$(curl -s 169.254.169.254/latest/dynamic/instance-identity/document | jq -r ".region")
          execute

我在这里错过了什么?当通过控制台创建实例时,此脚本在用户数据中运行良好。提前致谢!

感谢@jordanm 的评论。这解决了我的问题。