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