如何解决在Yaml文件中使用CloudFormation Helper脚本安装Nginx时遇到困难
我以前通过在UserData部分中编写命令来安装nginx,但是尝试使用cfn-init和cfn-hup做到这一点非常困难。 yaml文件能够成功执行并创建我的实例,并且可以通过SSH进入该实例,但是Web服务器未安装并显示我(据说)创建的index.html文件。我的问题主要集中在“资源”部分,因为这是应该进行安装的地方。在网上查找yaml信息非常困难,因此希望有人可以指导我正确的方向。我当前的代码如下。
---
Description: Create an Amazon Linux server running nginx web server
Parameters:
KeyName:
Type: AWS::EC2::KeyPair::KeyName
Description: Name of an existing EC2 keypair to enable SSH access to the instance
SSHCIDR:
Type: String
Description: The CIDR block restricting SSH
MinLength: 10
Default: 131.247.0.0/16
AllowedPattern: '(\d{1,3})\.(\d{1,3})/(\d{1,2})'
ConstraintDescription: must be a valid IP CIDR range of the form x.x.x.x/x
Mappings:
Region2AMI:
us-east-1:
AMI: ami-00514a528eadbc95b
us-east-2:
AMI: ami-04fcd96153cb57194
us-west-1:
AMI: ami-023e0c35fc414e78b
us-west-2:
AMI: ami-0528a5175983e7f28
Resources:
EC2Instance:
Type: AWS::EC2::Instance
Metadata:
AWS::CloudFormation::Init:
configSets:
InstallAndConfig:
- Install
- Configure
Install:
packages:
yum:
nginx: []
files:
/usr/share/nginx/index.html:
content: !
"<title>My name</title><h1>My name</h1>"
mode: '000644'
owner: root
group: root
/etc/cfn/cfn-hup.conf:
content: !Sub |
[main]
stack=${AWS::StackId}
region=${AWS::Region}
interval=1
mode: '000400'
owner: root
group: root
/etc/cfn/hooks.d/cfn-auto-reloader.conf:
content: !Sub |
[cfn-auto-reloader-hook]
triggers=post.update
path=Resources.Amazon Linux w/ nginx included.Metadata.AWS::CloudFormation::Init
action=/opt/aws/bin/cfn-init -v --stack ${AWS::StackName} --resource Amazon Linux w/ nginx included --region ${AWS::Region} --configsets InstallAndConfig
runas=root
mode: '00400'
owner: root
group: root
services:
sysvinit:
nginx:
enabled: 'true'
ensureRunning: 'true'
files:
- "/usr/share/nginx/index.html"
sources:
- "/etc/nginx/nginx.conf"
cfn-hup:
enabled: 'true'
ensureRunning: 'true'
files:
- /etc/cfn/cfn-hup.conf
- /etc/cfn/hooks.d/cfn-auto-reloader.conf
Properties:
ImageId: !FindInMap [Region2AMI,!Ref 'AWS::Region','AMI']
InstanceType: t2.micro
SecurityGroups:
- !Ref WebserverSecurityGroup
Tags:
- Key: Name
Value: Amazon Linux w/ nginx included
KeyName: !Ref KeyName
UserData:
'Fn::Base64': |
#!/bin/bash -x
yum update -y aws-cfn-bootstrap
/opt/aws/bin/cfn-init -v --stack ${AWS::StackName} --resource Amazon Linux w/ nginx included --region ${AWS::Region}
WebserverSecurityGroup:
Type: AWS::EC2::SecurityGroup
Properties:
GroupDescription: Allows HTTP
SecurityGroupIngress:
- CidrIp: 0.0.0.0/0
FromPort: 80
ToPort: 80
IpProtocol: tcp
- CidrIp: !Ref SSHCIDR
FromPort: 22
ToPort: 22
IpProtocol: tcp
Outputs:
WebURL:
Description: URL for web page
Value: !Sub 'http://${EC2Instance.PublicIp}'
解决方法
这里可能有很多错误,但显而易见的是:
--resource Amazon Linux w/ nginx included
以上内容在少数地方使用,不正确,应为:
--resource EC2Instance
此外,如果您想使用/opt/aws/bin/cfn-init
,则您的实例缺少CreationPolicy。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。