Невозможно развернуть приложение на экземпляре EC2 с помощью шаблона AWS CloudFormation с помощью сценария cfn-init и сценария UserData - PullRequest
0 голосов
/ 04 февраля 2019

Я пытаюсь развернуть приложение sample.war на экземпляре EC2 во время запуска.То есть при запуске экземпляра приложение должно автоматически развертываться на нем с использованием cfn-init и Metadata.Я добавил пользователя с политикой и аутентификацией без удачи.Если я wget с путем S3, файл загружается.Ниже мой сценарий.Чего мне не хватает в этом, или есть ли другой способ сделать это?

---
AWSTemplateFormatVersion: 2010-09-09
Description: Test QA Template
Resources:
  MyInstance:
    Type: AWS::EC2::Instance
    Properties:
      ImageId: !Ref AMIIdParam
      InstanceType: !Ref InstanceType
    Metadata:
      AWS::CloudFormation::Init:
        config:
          packages:
            yum:
              java-1.8.0-openjdk.x86_64: []
              tomcat: []
              httpd.x86_64: []
          services:
            sysvinit:
              httpd:
                enabled: true
                ensureRunning: true
          files:
            /usr/share/tomcat/webapps/sample.zip:
              source: https://s3.amazonaws.com/mybucket/sample.zip
              mode: '000500'
              owner: tomcat
              group: tomcat
              authentication: S3AccessCreds
      AWS::CloudFormation::Authentication:
        S3AccessCreds:
          type: 'S3'
          accessKeyId: !Ref HostKeys
          secretKey: Fn::GetAtt:
            - HostKeys
            - SecretAccessKey
          buckets: !Ref BucketName
  CfnUser:
    Type: AWS::IAM::User
    Properties:
      Path: '/'
      Policies:
        - PolicyName: 'S3Access'
          PolicyDocument:
           Statement:
             - Effect: 'Allow'
               Action: s3:*
               Resource: '*'
  HostKeys:
    Type: AWS::IAM::AccessKey
    Properties:
      UserName: !Ref CfnUser

1 Ответ

0 голосов
/ 05 февраля 2019

Мне не удалось воспроизвести это с использованием следующего шаблона:

---
AWSTemplateFormatVersion: 2010-09-09
Description: Test QA Template
Resources:
  MyInstance:
    Type: AWS::EC2::Instance
    Properties:
      ImageId: ami-08589eca6dcc9b39c
      InstanceType: t2.micro
      KeyName: default
      UserData:
        Fn::Base64: !Sub |
          #!/bin/bash -xe
          /opt/aws/bin/cfn-init -s ${AWS::StackId} --resource MyInstance --region ${AWS::Region}
    Metadata:
      AWS::CloudFormation::Init:
        config:
          packages:
            yum:
              java-1.8.0-openjdk.x86_64: []
              tomcat: []
              httpd.x86_64: []
          services:
            sysvinit:
              httpd:
                enabled: true
                ensureRunning: true
          files:
            /usr/share/tomcat/webapps/sample.zip:
              source: https://s3.amazonaws.com/mybucket/sample.zip
              mode: '000500'
              owner: tomcat
              group: tomcat

(Другими словами, использование вышеуказанного шаблона позволило мне установить файл sample.zip с помощью cfn-init.)

Таким образом, есть кое-что, связанное с правами доступа в том, как вы получаете доступ к корзине S3.

Достаточно сказать, что использование ключей доступа является плохой практикой.Взгляните на этот документ, содержащий рекомендации по назначению роли IAM для экземпляра EC2, а затем к добавлению политики корзины, предоставляющей соответствующий доступ к этой роли.

...