Amazon web services AWS cloudformation json脚本在ec2实例上运行bash脚本

Amazon web services AWS cloudformation json脚本在ec2实例上运行bash脚本,amazon-web-services,amazon-cloudformation,Amazon Web Services,Amazon Cloudformation,我已经创建了一个cloudformation脚本,它创建了一个ec2实例,以及一些基于其他特性的卷。初始化ec2实例后,我希望它自动运行bash脚本,将脚本中创建的卷(不是根卷)装载到/var/www/vhosts。但现在它创建了目录,所以我知道它正在运行bash脚本,但没有成功执行其他命令。这是我的云形成脚本。当我分别运行下面列出的3个命令时,当ssh连接到ec2实例时,它们工作正常,并且卷已装载到正确的位置 "Ec2Instance": { "Type": "AWS::EC2::

我已经创建了一个cloudformation脚本,它创建了一个ec2实例,以及一些基于其他特性的卷。初始化ec2实例后,我希望它自动运行bash脚本,将脚本中创建的卷(不是根卷)装载到/var/www/vhosts。但现在它创建了目录,所以我知道它正在运行bash脚本,但没有成功执行其他命令。这是我的云形成脚本。当我分别运行下面列出的3个命令时,当ssh连接到ec2实例时,它们工作正常,并且卷已装载到正确的位置

    "Ec2Instance": {
  "Type": "AWS::EC2::Instance",
  "Properties": {
    "ImageId": {
      "Ref": "ImageIdentification"
    },
    "AvailabilityZone" : "eu-west-1a",
    "InstanceType": {
      "Ref": "InstanceType"
    },
    "SecurityGroupIds" : [
       {
         "Ref": "SecurityGroup"
       }
    ],
    "DisableApiTermination" : "true",
    "KeyName": {
      "Ref": "keyPairName"
    },
    "Tags" : [
      {"Key" : "Name", "Value" : { "Ref" : "EC2InstanceName"}}
    ],
    "UserData" : {"Fn::Base64" : {"Fn::Join" : ["", [
     "#!/bin/bash -v\n",
      "sudo mkdir -p /var/www/vhosts\n",
      "sudo mkfs -t ext4 /dev/xvdh\n",
      "sudo mount /dev/xvdh /var/www/vhosts\n"
    ]]}}
  }
},

谢谢你的帮助

要在CloudFormation中运行bash脚本,您需要在用户数据部分指定远程链接,或者在用户数据中逐个写下命令

Tags:
    - Key: Name
      Value: test
  UserData:
    Fn::Base64: !Sub |
      #!/bin/bash -xe
      cd /var/tmp
      wget https://raw.githubusercontent.com/installer/cloudformation/install.sh
      sudo bash /var/tmp/install.sh 4  '${CORE.PrivateIp}'

运行用户数据脚本的服务称为
cloudinit
。查看服务器上的cloud init日志以了解问题所在:@MarkB感谢您的帮助。这对于故障排除非常有效。对于阅读本文的任何人,我运行命令“vim/var/log/cloud init output.log”来查看日志。我还向bash脚本添加了sleep命令,并向ec2实例添加了volume属性。