Возникли трудности при установке nginx с использованием вспомогательных скриптов CloudFormation в файле yaml

#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 .