GitHub Actions - CICD Pipeline Flask приложения в AWS.Пример задания на интервью для DevOps Engineer
HTML-код
- Опубликовано: 5 сен 2024
- #devops #githubactions #pipeline #девопс
GitHub Actions - CI CD Pipeline Flask приложения в AWS ElasticBeanstalk
Create AWS IAM user with Access Key and Secret Key
Create AWS S3 Bucket
Create AWS ElasticBeanstalk Application and Environment
GitHub Actions - Git Clone
GitHub Actions - Use of Secrets
GitHub Actions - Configure AWS Credentials
GitHub Actions - Deploy Flask application to AWS ElasticBeanstalk
Если помог, поддержите парой баксов, хотябы Канадских :) www.paypal.me/...
Спасибо!
Спасибо тебе!
Здравствуйте, Денис! Прелесть этого урока в том, что он довольно практичный. Было бы супер выпускать и далее подобные уроки, изменяя технологию. Например, Github Actions поменять на Jenkins, AWS - на Docker, добавить во всё это Ansible и так далее. Количество просмотров и подписок возрастёт к тому же, думаю. Спасибо вам.
Спасибо за ваши труды, очень интересно
Спасибо большое, все ваши курсы очень полезны. Чёткое и понятное объяснение, все по существу. Не раз помогало мне в работе.
Кстати, очень актуальная тема. Недавно курсы прошел на девопса, где мейн таск была задеплоить аппку Spring-petclinic с гита через дженкинс в AWS ECS Cluster з апплоадбалансером, скейлингами, алертами и рдс для аппки. Ручками в дженкинсе оно то легко делается, но вот всю часть по АВС делали клаудформешеном. Видосы твои помогали по кластеру и балансерам как могли, но вот по клаудформешену одного мало было. Пришлось серфить, как боженька)) Очень на челлендж твой похоже.
Да тема крутая, меня попросили на английском эти же два урока записать.
Вот только перезаписал, опубликую тут скоро
@@ADV-IT Ну тогда ждем с нетерпением))
А какие курсы проходил, не эти? - otus.ru/lessons/devops-praktiki-i-instrumenty/
@@vagifk2864 Нет. Проходил вот-такие, но в Украине. www.epam-group.ru/careers/epam-devops
@@killer_nokia оффлайн?
Спасибо большое, дающий знания нуждающимся, и от меня 400й лайк))
Большое спасибо Денис.
Отличная инструкция!!! Подписка
Спасибо мужик. Очень хорошо зашло, все понятно! я начинающий , всегда работал в менеджменте, закончил курсы QA , доучиваюсь по твоему каналу. Последние два видоса из курса GitHub были для меня из серии очень интересно, но ничего не понятно!)) вернусь к ним еще раз позже! ))
Вернулся, пересмотрел, все круто зашло, все получиолсь! )))
Cпасибо, Денис.
Ребята, имейте ввиду что нужно обязательно первым делом иметь готовый MyFlask и MyFlask-env, то есть создать вручную(так проще, либо посмотрите туториал Дениса по Flask) А то новички не поймут почему --create-application-version и update-environment падают.
Спасибо Денис! Лучший! Очень все доступно !)))
огромное спасибо, всё понятно, даже начинающему
Спасибо! Все действительно выглядит очень просто...когда делает профи)
ОГРОМНОЕ спасибо за этот ролик!!!!!
Годный контент. Спасибо огромное!
одним кликом теперь beanstalk не создать, теперь авс требует чтоб сами добавляли сервис роль и EC2 instance profile (роль), в остальном все актуально, спасибо.
Спасибо за урок!
очень классное обьяснение! супер! лайк и подписка - продолжай в том же духе!
Спасибо, все получилось! Крутой курс!
Este es excelente u estupendamente. Gracias don Denis !
Супер! Спасибо!!!
Супер!
Отличная работа.
Урок просто супер. Спасибо!
Как обычно объяснение материала на высоте.)
Good knowledge, thank you.
Glad it was helpful!
Спасибо! Просто офигенно
Спасибо Спасибо Спасибо Денис !!!
Благодарю от души!!!
Круто! Супер!
Бомба
Круто!
что-то мне подсказывает, что если креды пропустить через base64 то вполне эти креды можно прочитать
спасибо ден за твои труды, ты реально очень много головняка убираешь) и еще такой вопрос лучше переспросить) все что ты делал в aws в этом уроке это бесплатно ? я спрашиваю потому что боюсь что снимет мои последние 100 шекелей))))) а то помню поднял виртуалки и вижу как с карточки улетели мои родные ))
бесплатно если ec2 размера t2.micro и диск не больше 30GB
@@ADV-IT спасибо большое за ответ ☺️
Спасибо за очень крутой урок !!! Интересно, что думаешь про GitLab CI CD ? Что лучше на твой взгляд?
И то и то хорошо,
если твой код на GitLab то используй GitLab CICD
если твой код на GitHub то используй GitHub Actions
Супер! Спасибо за видео!
Не приходилось сталкиваться с такой задачей - отдельный деплой под отдельный пулл реквест ? чтобы потом можно было отдельно открывать приложения под отдельный ПР аля my-app.com/PR-number/main для проверки отдельной фитчи например? Если да - как бы вы это организовали на AWS в кратции ? :)
Спасибо, очень круто! А гитхаб каждый раз новую виртуальную машину создаёт, или привязывает её к аккаунту? Можно ли деплоить на голый линукс-сервер по ssh?
1. Каждый запуск новый Runner запускается.
2. Можно, даже уже есть скрипты деплоя по ssh готовые
Все получилось, но не понял зачем application.py и requirements.txt, за что они отвечают? Без них ничего не работает
Не получается все сделать по уроку. Видимо появились какие то изменения в GitHub и AWS. 1. название основного branch не master, а main
2. при создании bucket c названием adv-it-flask-application-packages ошибка, так как он видимо не может быть таким же названием даже у разных пользователей. создал с названием adv-it-flask-application2-packages. В AWS почему то нет сверху значков быстрой навигации.
3. Когда запускаю скрипт, появляется ошибка Run aws elasticbeanstalk create-application-version \
An error occurred (InvalidParameterValue) when calling the CreateApplicationVersion operation: Application Version Ver-&{{ github.sha }} already exists.
Error: Process completed with exit code 255.
Всё тоже самое, просто надо знать чуть чуть aws
@@ADV-IT В bucket удалось zip закинуть, а страницу нет, а вообще все остальное по теме GitHub получилось сделать. Денис, большое спасибо за уроки!
@@ADV-IT Сервер так побежал, что не могу его догнать и удалить, его s3 bucket вновь и вновь создает, а сам bucket не могу удалить из-за ошибки
Insufficient permissions to delete bucket
After you or your AWS admin have updated your IAM permissions to allow s3:DeleteBucket, choose delete bucket. Learn more about Identity and Access Management in Amazon S3
API response
Access Denied
Хотя я root... Написал в службу поддержки.
Помогла инструкция
Navigate to S3 Console.
Select the bucket that you have lost access to. You will get an "Access Denied" error message. Ignore the the error message and click on the 'Permissions' tab.
Next click on 'Bucket Policy' tab and choose 'Delete'.
Класс. Спасибо ) Скинул пару баксов за труды ) Не могли бы подсказать как сюда же включить еще и PostgreSQL (приложение на Flask использует PostgreSQL)? Ну и на самом AWS как поднять приложение Flask с PostgreSQL как?
Спасибо за ваш курс очень интересно. А возможно таким же образом развернуть приложение docker compose и не понимаю имеет ли смысл мне это делать, так как для приложения необходимо много видеопамяти, а информацию по характеристикам серверов на которых деплоится приложение я не нашел
Интересно, но пока сложно для меня. Что изучить, чтоб проще было понимать как писать и что писать в yaml? Спасибо
Ansible
Hey! Denis, How I can know, where do I need write sign equal and quotes? When I try repeat the command -> (aws elasticbeanstalk create-application-version --application-name ${{ env.EB_APPLICATION_NAME }} --source-bundle S3Bucket="${{ env.EB_PACKAGE_S3_BUCKET_NAME }}",S3Key="${{ env.DEPLOY_PACKAGE_NAME}}" --version-label "Ver-${{ github.sha }}" --description "CommitSHA-${{ github.sha }}") I catch a lot of syntax errors.
1. In documentation.
2. Check my example on GitHub
разобрался почти до конца, но тут уперся).. какая-то ошибка в part2 -cd у меня - (Parameter validation failed:
Unknown parameter in SourceBundle: "S3bucket", must be one of: S3Bucket, S3Key
Unknown parameter in SourceBundle: "S3key", must be one of: S3Bucket, S3Key), вроде все правильно в коде, моу скинуть скрин...
Сравни с моим github.com/adv4000/github-actions-part-2-cicd-to-aws/blob/master/.github/workflows/main.yml
ADV-IT блин)) bucket с маленькой был
Привет, Дэн) подскажи, при создании в beanstalk аппки , под health написано no data и минус в круге! Что за фигня?))
аппка не подаёт признаков жизни
secret_key github для паблик репозиториев если кто нибудь делает форк скопируются ?
Нет, попробуй сделай fork на мой, увиишь что там нету SECRETS
An error occurred (InvalidParameterValue) when calling the CreateApplicationVersion operation: No Application named 'MyFlask' found.
Error: Process completed with exit code 254.
У меня такая проблема, что не делаю, она не фиксится. Можете подсказать в чем проблема?
Application named 'MyFlask' found.
Сделай Elastic Beanstalk application с названием MyFlask
Денис, подскажите, пожалуйста.
Где во всей этой конфигурации прописано на каком порту должно быть запущено flask-приложение и что, собственно, его запускает?
Пока не изменил application.py с явным указанием application.run(host='0.0.0.0', port=8000) и пока на ЕС2-машинке не его вручную не запустил, nginx выдавал 502-ю ошибку (bad gateway)
По умолчанию порт 80 везде
ruclips.net/video/q4y51GN1tqc/видео.html
@Hank Rearden так у тебя не получилось найти решения тоже?сижу ломаю голову(
А где брали команды Run, которые идут после Create new EB..?
В документации AWS
ты настраивал кластеры? у нас к примеру corosync/pacemaker. пользовался ли ты DRBD,Ceph,Gluster. в можно ли aws bean приложение в EKS использовать
DRBD,Ceph,Gluster. не пользовался и даже никогда не слышал такие матюки
@@ADV-IT а как тогда кластер строишь?)
Кластеры чего?
@@ADV-IT серверов. Linux HA. К примеру мульти Клауд отказоустойчивый
@@El18Cucuy Terraform
А есть возможность соединить с GitLabom?
У GitLab по другому
Вопрос оффтоп: ruclips.net/video/JUzhx3TWoJw/видео.html я один слышу как на заднем плане плачет ребенок?
Так и есть :)
Делюсь опытом-может кому то поможет! Не работало изначально. Мои грабли, на которые наступил: 1. Elastic Beanstalk был у меня создан по умолчанию в другом регионе, отличном от s3 (github actions ругался что такого аппликации (Flask) нет. Перенёс в один регион. Деплой из Github actions - всё ок, говорит,теперь. 2. AWS Elastic Beanstalk ругается: HEALTH:Degraded , WARN (Environment health has transitioned from Degraded to Severe. 100.0 % of the requests are failing with HTTP 5xx. ELB processes are not healthy on all instances. Application update completed 71 seconds ago and took 67 seconds. ELB health is failing or not available for all instances. Impaired services on all instances.) и WARN (Environment health has transitioned from Ok to Degraded. Application update in progress. 1 out of 1 instance completed (running for 58 seconds). Impaired services on all instances.) . Пофиг-перехожу по ссылке- блокировка сервиса провайдером (мобильный оператор РФ) - ошибка-мол низя сюда-иди нафиг,мол. Открыл через другого провайдера - ошибка(502 Bad Gateway).
3. -Ставил разные коды примеры FLASK в файл --application.py-- - гружу вручную - такая же ошибка (502)- . Что помогло: добавил в файл requirements.txt зависимости: "
click==8.0.3
Flask==1.1.2
itsdangerous==2.0.1
Jinja2==3.0.3
MarkupSafe==2.0.1
Werkzeug==2.0.2
"
Особо не парился-возможно хватит какой то одной строки, суть что с этим начало работать.
После загрузки проекта с поправленным requirements.txt , статус сменился на HEALTH : warning , немного так постоял, секунд через 30 - HEALTH : OK .
Самое интересное!!! если грузить туда же в этот AWS ElasticBeanstalk старые версии - с requirements.txt в котором лишь Flask==1.1.1 , работает нормально. Если сделать новый Beanstalk - повторяется та же ошибка до момента, пока один раз ему не скормишь поправленный requirements.txt , после этого читает любые версии. ( Этого комментария мне здесь не хватало, когда искал в чём же ошибка может быть)
Update: *3 пункт неактуален*
Да, видать изменили docs.aws.amazon.com/elasticbeanstalk/latest/dg/create-deploy-python-flask.html
PR Merged!
А почему в bucket скопировался .zip файл ведь команда была
run: aws s3 cp ${{ env.DEPLOY_PACKAGE_NAME}} s3://${{ env.EB_PACKAGE_S3_BUCKET_NAME }}/
по идеи должна же быть ошибка что такого файла нет и команда должна выглядеть так:
run: aws s3 cp ${{ env.DEPLOY_PACKAGE_NAME}}.zip s3://${{ env.EB_PACKAGE_S3_BUCKET_NAME }}/
простите если туплю но можете обьянснить?
DEPLOY_PACKAGE_NAME : "flask_app_${{ github.sha }}.zip"
тут есть .zip
github.com/adv4000/github-actions-part-2-cicd-to-aws/blob/master/.github/workflows/main.yml#L14
@@ADV-IT спасибо Денис! я была не внимательна
Добрый вечер, повторил все как на видео, пол дня ковыряю уже, в GitHub все ок, отработало, все зеленое. Но по факту сайт не работает. Elastic Beanstalk выдает ошибку.
"Service:Amazon S3, Message:Access Denied: S3Bucket=elasticbeanstalk-eu-west-3-650049487807, S3Key=resources/environments/e-auzni9hnup/_runtime/_embedded_extensions/MyFlask/8145d188696b3cd1850ab318360cb6de"
P.S. У юзера AmazonS3FullAccess поставил.
А у меня все работает. Ищи ошибки.
Encryption проверь тоже
Спасибо за ваши уроки! Очень помогают!