Рубрики
Uncategorized

Создание AWS Cross-AccountCodepipeline с Gitflow

При загрузке нашего инженерного мира в Stackhawk мы решили объединить лучшие практики AWS с GI … Tagged with git, AWS, DevOps.

При загрузке нашего инженерного мира в Stackhawk мы решили объединить лучшие практики AWS с Gitflow. Поскольку GitFlow является текущим доминирующим стандартом рабочего процесса для GIT, интеграция сборки и развертывания с несколькими докладами с помощью GitFlow с использованием CodedEploy имела наибольшее смысл.

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

Чтобы правильно реализовать это, нам пришлось разделить учетные записи по вопросам инфраструктуры и развертывания, использовать стеки без серверов по требованию и разработать конвейер CI/CD на основе действий в GitFlow.

Это предлагается как лучшая практика Amazon, поэтому они создали несколько статей по теме, включая Как настроить трубопровод по перекрестному доступу и Как реализовать gitflow с помощью Codepipeline.

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

Разработка счетов

Вместо стандартных Devaccount, ToolsAccount, TestAccount и Prodaccount Identities Amazon использует для трубопроводов по перекрестному доступу, мы сосредоточили наши учетные записи вокруг среды. В каждой среде есть как минимум две учетные записи, инфраструктуру и RuntimeaCcount.

  • InfrastructureAccount: InfrastructureAccount объединяет функции Devaccount и ToolsAccounts Amazon рекомендует организовать непрерывную интеграцию и развертывание.
  • RuntimeaCcount: RuntimeaCcount похож на TestAccount и Prodaccount, где на самом деле работает целевой стек. CodePipeline запускает создание и обновление ресурсов стека из учетной записи инфраструктуры, входя в учетную запись времени выполнения для выполнения работы по мере необходимости.

Мы также используем инструмент с открытым исходным кодом Terraform для предоставления наших ресурсов AWS, переходя от облачной информации Amazon. Стоит отметить, однако, что мы используем CloudFormation для других действий, таких как развертывание Lambda.

Cross-account S3 доступ

Предоставление разрешения на доступ к перекрестному доступу между такими движущимися частями может быть сложным. Наши артефакты сборки нуждаются в доступе S3 Cross-Account, который требует пользовательского ключа KMS, разделенного между учетными записями. Важно уделять пристальное внимание, где Codepipeline создает и обновляет ресурсы стека в RuntimeaCcount из InfrastructureAccount.

Amazon рекомендует постоянные и временные стеки, которые связаны с Gitflow, что хорошо связано с нашей концепцией среды. Мы развертываем нашу разработку филиала в нашу среду Preprod, а затем Master Deploy в нашу среду Prod.

Кроме того, мы хотели, чтобы разработка и мастер -филиалы автоматически создавали и тестировали каждый PR, но развернулись только на подключаемых толках/слияниях. У нас есть защита филиала в GitHub, так что, по крайней мере, один другой человек должен одобрить заданный PR, и эти чеки должны пройти до завершения слияний.

Одной из проблем, с которыми мы столкнулись с кодепипелинами, является их уровень специфичности отрасли. Проще говоря, кодепипелина не имеет такой большой специфичности филиала для своих webhooks Github, как и кодовая строительство. Это затрудняет различие между запросами на вытягивание против толчков и слияний, поэтому нам пришлось создать кодовую машину для каждого типа с помощью собственных веб -крючков. Кодепипелины запускаются событием Push/Merge, написанием артефакта сборки для S3.

Заключительные мысли

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

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

Разделив учетные записи инфраструктуры и времени выполнения для каждой среды и интегрируя их с помощью Gitflow в наш трубопровод CI, у нас есть более изолированный и гибкий механизм для получения функций для наших пользователей!

Оригинал: «https://dev.to/clamey/building-an-aws-cross-accountcodepipeline-with-gitflow-4f7i»