Serverless API с CDK (2 серии деталей)
Современные программные проекты будут сложными для развития и обслуживания без автоматизации. Самым сложным способом будет создание трубопровода для проекта для поиска, строительства и развертывания новых изменений. Эта статья продолжает предыдущий, который рассказывал о развертывании Public Serverless API. Здесь мы будем делать дальнейшую автоматизацию.
Какой был проект? Это дает возможность хранить, получать, редактировать и удалять книги из API отдыха. Если вы собираетесь следовать инструкциям, это будет стоить к клонированию Git Repository. Он расположен здесь Отказ Во-первых, крайне важно иметь общий словарный запас.
Глоссарий
Используемые условия:
- Код реализации — основное приложение, расположенное в корневой папке
- Стек в реализации — тот, который имеет инфраметр для лямбдаса, API GW и
- Стек трубопровода — волшебный, который имеет логику CI/CD в нем, включая самоутацию.
Обзор ручных шагов
В двух словах есть пара ручных шагов для последующего успеха. Однако, в конце концов, мы создадим трубопровод, который будет получать изменения и проверять их в инфраструктуре и реализации обоих. Они здесь:
- Создание соединения GitHub с использованием AWS CodeStar
- Предоставление cdktoolkit (новый или обновленный)
- Предоставление кодепопении из CLI
Подключите GitHub как источник
Начнем с самого начала процесса строительства проекта. Трубопровод должен иметь возможность получить код из репозитория GitHUB. В старые времена следует хранить секрет веб-капуста GitHub. Теперь есть вторая версия этого.
Для использования этого мы будем создавать соединение. Это, специфичная для региона обслуживание, расположенная в «Разработчик Инструменты -> Соединения» Отказ Следует нажать «Создать соединение». На этом этапе есть три варианта: BitBucket, GitHub, AWS Connector для GitHub.
Соединение требует установки разъема AWS для GitHub. Есть варианты, чтобы выбрать все репозитории из учетной записи или выбранных.
После следующего экрана есть arn этой связи. Следует записать его, потому что первый этап трубопровода будет использовать его. От опыта, лучше сохранить его в магазин параметров SSM здесь Отказ Путь к секрете может быть похож на /serverless-api/git/connection-arn
Отказ
Подготовка стека трубопровода
Традиционный подход к созданию проектов Codepipipieline состоит в том, чтобы иметь каждую стадию, описанную как источник, здание и развертывание. Основная проблема заключалась в том, что все вроде выходных артефактов и ролей выполнения будут описаны с нуля.
Однако инструменты IAC развиваются. CDK имеет концепцию «постройки», которая в основном является группой ресурсов. Есть новый под названием AWS-CDK-Lib/трубопроводы.
Это решает вышеупомянутые проблемы обеспечения дополнительных ресурсов вручную.
const connectionArn = ssm.StringParameter.valueForStringParameter( this, '/serverless-api/git/connection-arn', 1 ); const pipeline = new CodePipeline(this, 'Pipeline', { pipelineName: 'ServerlessAPI-Pipeline', synth: new ShellStep('Build', { input: CodePipelineSource.connection( 'Grenguar/aws-cdk-api-workshop', 'main', { connectionArn: connectionArn, }), commands: [ 'npm ci', 'npm run build', 'cd infra', 'npm ci', 'npm run build', 'npx cdk synth', 'mv cdk.out ../' ] }), selfMutation: true, }); pipeline.addStage(new MyPipelineAppStage(this, "Deploy"));
Опция Synth — это первое, что мы можем начать обсуждать. Это в основном наш этап сборки все в одной остановке. SSM хранит соединение ARN. Это всеобъемлющая практика безопасности для внесения его в управляемую услугу для секретов. Первый аргумент для входного соединения — <владелец>/
Отказ Это будет работать с корпоративными счетами.
Вариант команд в основном замена для BuildSpec. Это последовательность команд, которые будут выполнены построителем. В CDK он реализован как массив строк. Это может быть удобно для параметризации. Важно отметить, что в первую очередь проект WebPack должен иметь дело. Только после этого будет будет Код
папка с нашими лямбдасами. Без этого инфраструктура потерпит неудачу.
Самотатация дает возможность изменять трубопровод самостоятельно. Ранее было больно изменить его настройки. Теперь есть две стеки: внедрение и трубопровод. Оба они будут проверены и развернуты. « MyPipelineAppSpstage ‘- это стек, который имеет Gateway API, Lambdas и Dynamodb.
Выбор основного стека
Ранее был только один стек CloudFormation — Apistack. Теперь наш первичный стек становится трубопроводом один. В этом случае стек внедрения становится сценой. Это устройство, которое имеет одну или несколько стеков, которые будут развернуты вместе. В этом случае infra/bin/infra.ts
это запись приложения. У него будет только один стек для обеспечения трубопровода (Pipelinestack), тогда как реализация будет упакована в качестве этапа для Shellstep. Пример кода здесь здесь.
export class MyPipelineAppStage extends Stage { constructor(scope: Construct, id: string, props?: StageProps) { super(scope, id, props); new ApiStack(this, 'APIStack'); } }
Предоставление инструментов CDK
Если кто-то хочет использовать CDK, необходимо предоставить cdktoolkit. Для этого есть команда одностроек. Однако есть несколько версий этих инструментов. Когда я готовлю эту статью, мой случай был проблемным. Развертывание не было успешным из-за недостаточно прав на облачность для предоставления ресурсов. Для этого я создал Устранение неполадок часть этой статьи. Обратитесь к нему, прежде чем иметь проблемы с развертыванием. Для первых типов:
export CDK_NEW_BOOTSTRAP=1 npx cdk bootstrap aws://$ACCOUNT/REGION
Почему мы используем NPX
? Короче говоря: он будет запускать CDK без необходимости иметь его глобально. От NPX Docs:
Executeseither from a local node_modules/.bin, or from a central cache, installing any packages needed in order for to run.
Время построить и развернуть
Мы почти закончили. Теперь единственное, что нужно запустить команду для обеспечения трубопровода из Инфрау
папка. Это было бы:
npx cdk deploy
Вот и все! Теперь мы можем расслабиться и ждать пару минут, чтобы трубопровод добиться успеха. Изображение показывает конвейер, созданный после этого.
Это источник кода из последнего коммитария Git. После этого он создает код в соответствии с инструкциями в ShellSteP. Третий этап проверяет изменения в самом трубопроводе. Следующий интересен, потому что у него есть две группы артефактов. Один для кода реализации Lambdas. Другой является обработчиком для пользовательского ресурса лямбда для создания групп журнала и политики удержания. Этап развертывания проверит изменения созданного проекта CloudFormation.
В этой статье я представил современный способ создания конвейеров CI/CD. Смертный регистр использования без сервеса является наиболее естественным для меня. Однако можно использовать эти выводы для предоставления экземпляров EC2 или кластеров ECS.
Исправление проблем
Если стек на этапе развертывания не удается. Возможно, у вас есть проблемы с «cdktoolkit». Вам нужно будет делать эти действия.
Итак, что я сделал:
- Нашел «cdktoolkit» в CFN. Там я отметил ведро S3.
- Удалил стек инструментария.
- Удалил ведро
- Точно так же, как было сказано в руководстве:
npx cdk bootstrap aws:///eu-west-1 --profile \ --cloudformation-execution-policies arn:aws:iam::aws:policy/AdministratorAccess \ aws:// /
- Потом, делал
npx cdk deploy
- На последнем этапе трубопровода: проверил, что роль IAM для стека развертывания CFN имела политику администратора в роли.
Ресурсы
Serverless API с CDK (2 серии деталей)
Оригинал: «https://dev.to/aws-builders/how-to-automate-the-deployment-with-cdk-pipelines-2fn5»