#amazon-web-services #nginx #amazon-ec2 #yaml #amazon-cloudformation
#amazon-web-services #nginx #amazon-ec2 #yaml #aws-cloudformation
Вопрос:
Я установил nginx ранее, написав команды в разделе UserData , но попытка сделать это с помощью cfn-init и cfn-hup оказывается чрезвычайно сложной. Файл yaml способен успешно выполнить и создать мой экземпляр, и я могу подключиться к нему по SSH, но веб-сервер не устанавливает и не отображает 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,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}'
Комментарии:
1. вы пробовали решение marcin. дайте нам знать, если вы. все еще сталкиваюсь с проблемой
Ответ №1:
Здесь может быть много ошибок, но одна из них сразу бросается в глаза::
--resource Amazon Linux w/ nginx included
Приведенное выше, используемое в нескольких местах, неверно и должно быть:
--resource EC2Instance
Более того, вам не хватает политики создания для вашего экземпляра, если вы хотите использовать /opt/aws/bin/cfn-init
.