Разверните код непосредственно в AWS экземпляре EC2 с помощью действий Github. - PullRequest
4 голосов
/ 29 мая 2020

Как сказано в заголовке, я пытаюсь развернуть свое приложение Laravel - Angular непосредственно из Github в AWS EC2 экземпляр, используя Действия Github .

В моем приложении есть 3 Angular 8 + проектов, которые необходимо собрать перед развертыванием. Где as laravel не требует сборки.

Доступные решения предлагают использовать AWS Elasti c Beanstalk для развертывания кода. Но если это нужно сделать, то как прикрепить beanstalk elasti c к существующему экземпляру недостаточно ясно.

Есть ли способ развернуть код на AWS EC2 без использования Elasti c Beanstalk ?

Вот мои Действия Github build.yml:

name: Build Develop Branch

on:
  push:
    branches: [ develop ]
  pull_request:
    branches: [ develop ]

jobs:
  build:

    runs-on: ubuntu-latest

    strategy:
      matrix:
        node-version: [14.x]

    steps:
    - name: Code Checkout
      uses: actions/checkout@v2
    - name: Use Node.js ${{ matrix.node-version }}
      uses: actions/setup-node@v1
      with:
        node-version: ${{ matrix.node-version }}
    - name: App 1 npm install
      run: npm install
      working-directory: angular-app-1
    - name: App 1 Build
      run: npm run build:staging
      working-directory: angular-app-1
    - name: App 2 npm install
      run: npm install
      working-directory: angular-app-2
    - name: App 2 Build
      run: node node_modules/@angular/cli/bin/ng build --configuration=staging
      working-directory: angular-app-2
    - name: App 3 npm install
      run: npm install
      working-directory: angular-app-3
    - name: App 3 Build
      run: node node_modules/@angular/cli/bin/ng build --configuration=staging
      working-directory: angular-app-3

1 Ответ

3 голосов
/ 30 мая 2020

Перед тем, как начать:

Это неполный ответ. Не полное пошаговое руководство, но много подсказок и некоторый код, который поможет вам настроить определенные AWS вещи, такие как ALB и ваши файлы в репозитории, чтобы это работало. Этот ответ больше похож на несколько подсказок, собранных вместе из моего спринта, пытающегося заставить ECS работать прошлой ночью.

У меня также недостаточно очков, чтобы ни комментировать, ни болтать так ... вот лучшее, что я могу предложение.

Быстрые ссылки (хотя вам, вероятно, следует просто пропустить эти два пункта):

  1. Проверьте это: https://docs.aws.amazon.com/codedeploy/latest/userguide/instances-ec2-configure.html
  2. У меня недостаточно очков, чтобы прокомментировать или поговорить ... Это тоже не будет полный ответ, поскольку я пытаюсь сначала завершить sh развертывание ECS из GH, прежде чем перейти к EC2 от GH. В любом случае ...
  3. Последнее изменение: это будет звучать как маркетинговый ход, но правильная реализация с действиями GitHub и workflow_dispatch находится в репозитории GitHub * Donate Anything . Вы найдете ту же работу ECS, расположенную ниже. Обратите внимание, что я изменил действие GitHub на использование Docker Hub, поскольку он был бесплатным (и для меня дешевле, если вы собираетесь использовать ECS, поскольку AWS ECR стоит дорого).

Изменить : Развертывание ECS сейчас работает. Скоро начну работу над развертыванием EC2.

Редактировать 2: Я добавил репозиторий Donate Anything. Кроме того, я не уверен, жизнеспособно ли прямое развертывание EC2, по крайней мере для меня, поскольку сценарии установки были бы странными. Однако я все еще не нашел времени, чтобы добраться до EC2. Опять же, если кто-то желает поделиться своим временем, пожалуйста, сделайте это и внесите свой вклад!

Я хочу предупредить всех, что ГРУППЫ БЕЗОПАСНОСТИ очень важны. Это забивало меня на долгое время, так что убедитесь, что вы понимаете их правильно. В учебнике ECS я научу вас, как я это делаю.

Полный неполный ответ:

Я работаю над этой проблемой прямо сейчас в этом репозитории и другом для ECS здесь с помощью действий GitHub. Я не слишком далеко начинал работу с EC2, но базовое c краткое изложение для тестирования таково:

CRUCIAL

  • You сначала нужно попробовать выполнить развертывание из AWS CLI. Это связано с тем, что AWS Actions еще не имеет специального действия для развертывания в EC2.
  • Запишите каждый из этих операторов. Они нам понадобятся позже для действия GitHub.

Некоторые подсказки при тестировании этой AWS настройки:

  • Перед использованием CodeDeploy вам понадобится экземпляр EC2 , Application Load Balancer (вы найдете его в Elasti c Load Balancer) и целевой группы (которую вы создаете ВО ВРЕМЯ установки ALB). Go для целевых групп, щелкните группу правой кнопкой мыши и зарегистрируйте свой экземпляр.
  • Для развертывания из CodeDeploy создайте новое приложение. Создайте новую группу развертывания. Я думаю, что для вашей настройки вам следует использовать тип развертывания на месте, а не тип развертывания Blue / Green.
  • Наконец, при тестировании в интерфейсе командной строки вы должны запустить код, который вы видите здесь: https://docs.aws.amazon.com/codedeploy/latest/userguide/tutorials-wordpress-deploy-application.html#tutorials -wordpress-deploy-application-create-deployment-cli
    • Обратите внимание, вы можете начать отсюда (используя S3 как место для хранения вашего последнего кода. Вы можете удалить его в любом случае, поскольку я считаю, что запросы DELETE не влекут за собой плату): https://docs.aws.amazon.com/codedeploy/latest/userguide/tutorials-wordpress-upload-application.html Я лично не знаю, работает ли эта интеграция GitHub OAuth. Я пробовал однажды раньше (правда, очень любитель, т.е. понятия не имел, что делал раньше), и ничего не произошло, так ... Я бы просто придерживался этого руководства.

Как будет выглядеть ваше тестовое изложение:

  • Для моего репозитория ECS я потратил целых 10 часов, пытаясь настроить все правильно, шаг за шагом, как действие GitHub. Для вас вы должны сделать то же самое. Представьте, что вы - код: выясните, откуда вам нужно начать.
  • Ага! Я, наверное, сначала должен разобраться в CodeDeploy. Давайте исправим приложение c. yaml файл первым! Файл appspe c - это то, как CodeDeploy будет работать с хуками для всего. К сожалению, я сейчас сталкиваюсь с этой проблемой здесь , но это потому, что синтаксис EC2 и ECS для файлов AppSpe c отличается. К счастью, в EC2 нет особых областей. Просто исправьте свои файлы и зацепки. Пример из моего теста:
version: 0.0
os: linux

files:
  - source: /
    destination: /code

hooks:
  BeforeInstall:
    - location: aws_scripts/install_dependencies
      timeout: 300
      runas: root
  ApplicationStop:
    - location: aws_scripts/start_server
      runas: root

Действие GitHub:

Что вам понадобится как минимум:

jobs:
  deploy:
    name: Deploy
    runs-on: ubuntu-latest

    steps:
    - name: Checkout
      uses: actions/checkout@v2

    - name: Configure AWS credentials
      uses: aws-actions/configure-aws-credentials@v1
      with:
        aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
        aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
        # TODO Change your AWS region here!
        aws-region: us-east-2

Проверка кода необходимо ... ну ... получить код.

Для настройки AWS учетных данных вам нужно добавить AWS_ACCESS_KEY_ID и AWS_SECRET_ACCESS_KEY в свои секреты GitHub с правильным IAM учетные данные. Для этого я считаю, что единственная роль IAM необходима для полного материала CodeDeploy.

Развертывание кода:

Это когда тот тестовый код, который вы должны были попробовать, прежде чем перейти на этот шаг, предназначен для . Теперь, когда ваш рабочий процесс настроен, давайте вставим код из интерфейса командной строки в ваше действие.


    - name: Deploying with CodeDeploy
      id: a-task
      env:
        an-environment-variable: anything you want
      run: |
        echo "Your CLI code should be placed here"

Извините, если это сбивает с толку, а не то, что вы ищете, или вам нужно полное руководство. Я тоже на самом деле не заставил это работать, но прошло некоторое время с тех пор, как я последний раз пытался, и в последний раз, когда я пытался, я даже не знал, что такое экземпляр EC2 ... Я только что сделал автономный EC2 instance и использовал rsyn c для передачи моих файлов. Надеюсь, что то, что я написал, было несколькими подсказками, которые помогут вам очень легко найти решение.

Если вы заставили его работать, поделитесь им здесь: https://github.com/Andrew-Chen-Wang/cookiecutter-django-ec2-gh-action, чтобы не было еще один должен страдать от AWS развертывания ...

...