我正在为一个自动伸缩组创建一个启动配置。
WebAppLaunchConfig:
Type: AWS::AutoScaling::LaunchConfiguration
Properties:
UserData: !Base64 |
#!/bin/bash
exec > >(tee /var/log/user-data.log|logger -t user-data -s 2>/dev/console) 2>&1
sudo su
apt-get update -y
apt-get install unzip awscli -y
apt-get install apache2 -y
systemctl start apache2.service
cd /var/www/html
aws s3 cp s3://udacity-demo-1/udacity.zip .
unzip -o udacity.zip
/bin/echo "Hello World" >> /tmp/testfile.txt
IamInstanceProfile:
Ref: "ProfileWithRolesForOurApp"
KeyName: UdacityCFNEC2Key
ImageId: ami-005bdb005fb00e791
SecurityGroups:
- Ref: WebServerSecGroup
InstanceType: t3.medium
BlockDeviceMappings:
- DeviceName: "/dev/sdk"
Ebs:
VolumeSize: '10'
我把服务器放在一个公共子网中,以便简单地ssh进入并确认Apache是否启动,我可以看到它没有启动。当我试图运行启动命令时,我得到一个错误,即httpd.conf文件不存在。
我到底做错了什么?
我找到的最接近的问题是。在Cloudformation中使用userdata 他们在讨论ami的类型,我已经能够成功地将用户数据日志导出到控制台,我使用的是ubuntu ami,所以我认为这不是一个类似的问题。
我相信在你的脚本中缺少这个命令
-> systemctl enable httpd
下面是AWS文档中的一个例子。
我发现确定问题的最好方法是启动一个配置相同的新主机,并使用面向公众的ip和允许ssh的安全组。 然后ssh进入机器,逐一运行每个命令,确认是哪个命令导致了故障。
最后我简单的我发现,通过从我所在地区的启动实例列表中选择不同的建议AMI,我能够成功的让用户数据脚本成功完成。