AWS Cloudformation JSON脚本在EC2实例上运行bash脚本

时间:2018-07-06 15:12:51

标签: amazon-web-services amazon-cloudformation

我已经创建了一个cloudformation脚本,该脚本创建了一个ec2实例,在其他功能上也有一些卷。初始化ec2实例后,我希望它自动运行bash脚本以将在脚本中创建的卷(而不是根卷)安装到/ var / www / vhosts。但是此刻它创建了目录,所以我知道它正在运行bash脚本,但没有成功执行其他命令。这是我的cloudformation脚本。当我在ssh到ec2实例时分别运行下面列出的3条命令时,它们可以正常工作,并且卷已安装到正确的位置。

    "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"
    ]]}}
  }
},

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

在 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}'