Сценарий пользовательских данных не выполняется в шаблоне AWS CloudFormation - PullRequest
0 голосов
/ 31 января 2019

Я пытаюсь создать стек CloudFormation со скриптом UserData для установки приложений java, tomcat, httpd и java при запуске экземпляра EC2.Тем не менее, стек успешно создается со всеми ресурсами, но когда я подключаюсь к экземпляру EC2 для проверки конфигурации вышеперечисленных приложений, я не нахожу их.Мой вариант использования - раскрутить экземпляр со всеми вышеуказанными приложениями / программным обеспечением, которые должны быть установлены с помощью автоматизации.

UserData:
   Fn::Base64: 
    Fn::Join: 
    - ' '
    - - '#!/bin/bash -xe\n'

      - 'sudo yum update && install pip && pip install https://s3.amazonaws.com/cloudformation-examples/aws-cfn-bootstrap-latest.tar.gz\n'
      - 'date > /home/ec2-user/starttime\n'
      - 'sudo yum update -y aws-cfn-bootstrap\n'

        # Initialize CloudFormation bits\n
      - ' ' 
      - '/opt/aws/bin/cfn-init -v\n'
      - '             --stack\n'
      - '!Ref AWS::StackName\n'
      - '             --resource LaunchConfig\n'
      - 'ACCESS_KEY=${HostKeys}&SECRET_KEY=${HostKeys.SecretAccessKey}\n'

       # Start servers\n
      - 'service tomcat8 start\n'
      - '/etc/init.d/httpd start\n'

      - 'date > /home/ec2-user/stoptime\n'
Metadata: 
 AWS::CloudFormation::Init:
  config: 
   packages: 
    yum:
    - java-1.8.0-openjdk.x86_64: []   
    - tomcat8: []
    - httpd: []
   services:
    sysvinit:
     httpd:
      enabled: 'true'
      ensureRunning: 'true'
  files: 
  - /usr/share/tomcat8/webapps/sample.war:
    - source: https://s3-eu-west-1.amazonaws.com/testbucket/sample.war
    - mode: 000500
    - owner: tomcat
    - group: tomcat
   CfnUser:
    Type: AWS::IAM::User
    Properties: 
     Path: '/'  
     Policies: 
     - PolicyName: Admin
       PolicyDocument: 
        Statement:
        - Effect: Allow
          Action: '*'
          Resource: '*'
   HostKeys:
    Type: AWS::IAM::AccessKey
    Properties: 
      UserName: !Ref CfnUser

1 Ответ

0 голосов
/ 31 января 2019

Проблема в том, как вы отформатировали свои UserData.Я бы предложил запустить экземпляр EC2 и вручную протестировать скрипт.В нем есть ряд проблем.

Попробуйте отформатировать свои UserData следующим образом:

UserData:
  Fn::Base64:
    !Sub |
      #!/bin/bash -xe

      # FIXME. This won't work either.
      # sudo yum update && install pip && pip install https://s3.amazonaws.com/cloudformation-examples/aws-cfn-bootstrap-latest.tar.gz

      date > /home/ec2-user/starttime
      sudo yum update -y aws-cfn-bootstrap

      # Initialize CloudFormation bits
      /opt/aws/bin/cfn-init -v \
        --stack ${AWS::StackName} \
        --resource LaunchConfig

      # FIXME. Not sure why these are here.
      # ACCESS_KEY=${HostKeys}
      # SECRET_KEY=${HostKeys.SecretAccessKey}

      # Start servers\n
      service tomcat8 start
      /etc/init.d/httpd start

      date > /home/ec2-user/stoptime

На заметку:

  • Вы не можете интерполировать здесьиспользуя запись !Ref.Обратите внимание, что я изменил его на ${AWS::StackName} и заметил, что весь блок находится внутри !Sub.
  • Как показывают мои комментарии, в строке обновления yum есть недопустимые команды.
  • Как отмечено вкомментарии, это плохая практика вводить ключи доступа.Кроме того, кажется, что ключи не требуются для чего-либо в этом сценарии.

Обратите также внимание на то, что раздел файлов указан неверно в метаданных, так как массивы вместо ключей хеш-функции.

должно быть:

  files: 
    /usr/share/tomcat8/webapps/sample.war:
      source: https://s3-eu-west-1.amazonaws.com/testbucket/sample.war
      mode: '000500'
      owner: tomcat
      group: tomcat
...