Рубрики
Uncategorized

Создание AWS CodePipeline Stack и устранение неполадок общих проблем

Создание AWS CodePipipeline Stack и устранение неполадок Общие проблемы AWS CDK является относительным … Теги от AWS, React, DevOps, Teadercript.

AWS CDK является относительно новой структурой, которая направлена на более быструю разработку стопок AWS Cloud по сравнению с AWS Cloudformation и AWS SAM. Эта статья представит, как развернуть полный AWS CodePipipeline с использованием AWS CDK и устранить все общие проблемы, которые могут возникнуть в процессе создания приложения CDK. Для получения дополнительной информации о структуре, прочитайте предыдущую статью, названную «Как AWS CDK облегчает процесс разработки AWS Cloud Stacks».

AWS STIPUP

Чтобы создать любое приложение AWS CDK, необходимо установить CDK в машине и обновлен до последней версии. Для этого можно использовать следующую команду:

npm install -g aws-cdk

После этой команды завершит свой процесс, AWS CDK будет обновлен до последней версии. Этот процесс важен из-за постоянного высвобождения обновлений, интегрируя новые функции и решения проблем из предыдущих версий. Чтобы проверить, если текущая установлена версия CDK обновляется, проверьте последнюю версию на ДДК GitHub Repository и сравнить с выходом следующей команды:

cdk --version

Быстрый запуск приложения AWS CDK

Благодаря последней версии AWS CDK установлена, можно запустить проект CDK, который будет генерировать желаемую облачную среду AWS, содержащую все ресурсы, необходимые для данного приложения. Следующая команда необходима для начала проекта:

cdk init app --language=typescript

Вышесказанное команда запускает приложение CDK, используя шаблон приложения, в языке TypeScript. Вопросы, которые могут случиться при использовании этой команды:

  • Неизвестный инициативный шаблон: Важно отметить, что приложение делает не Подставка для имени приложения. Это означает шаблон, который будет использоваться для быстрого запуска приложения. Доступны три шаблона: приложение , либ и Приложение образец И каждый шаблон имеет список поддерживаемых языков. Текущий шаблон по умолчанию — приложение ;

  • Неподдерживаемый язык: Как описано в предыдущем пункте, некоторые языки еще не поддерживаются всеми шаблонами. Приведенная ниже команда укажена все доступные шаблоны, и какие языки поддерживаются ими для установленной текущей версии CDK.

cdk init --list
  • Ни один язык не был выбран: к моменту этой статьи AWS CDK не имеет стандартного языка. Одним из главных целей структуры является позволить разработчикам решить, какие языки программирования они хотят использовать. Благодаря этому событие будет огонь при запуске команды init без указания языка.

  • cdk init Не может быть запущена в непустой каталоге: поскольку он указан только в этой команде, только имя шаблона для использования, AWS CDK зависит от имени папки для создания имени приложения, и он не может быть инициализирован в любой папке Это не пусто. Чтобы решить эту проблему, необходимо создать новую папку, и команда должна использоваться снова в этой новой папке.

AWS CDK конструкции и управление версиями

Основная цель при создании приложений CDK — это легко развернуть облачные ресурсы AWS. Имея в виду каждый ресурс, который будет использоваться в приложении, необходимо установить. Каждый язык имеет свой путь в том, как установить эти пакеты, а документация об этом можно найти в Раздел устранения неполадок и каждое имя модуля постройки можно найти в своем разделе в API Ссылка .

То же самое приложение CDK обычно используется в течение длительных периодов времени, поскольку он определяет всю архитектуру проектов AWS. Это общая необходимость добавлять больше конструкций к стекам, так как проект продолжает расти, что может быть достигнуто, используя Amazon S3 в качестве примера, используя команду ниже:

NPM I @ AWS-CDK/AWS- S3

При этом может появиться проблема: зависимости, которые версии несоответствуют, вызывая ошибку Аргумент типа «Это» не является назначением параметра типа «строить» Отказ Это происходит, когда конструкции не могут взаимодействовать друг с другом, что делает параметр, который будет отмечен как недействительный. Чтобы предотвратить этот вопрос, необходимо обновить зависимости, используя команду Обновление NPM Каждый раз, когда в проекте добавляется новая конструкция или новая версия CDK CDK AWS выделяется.

Также важно отметить, что использование некоторых ресурсов может потребовать добавления некоторых зависимостей, поскольку случай AWS CodePipipeline, который может потребовать присутствующих функций в AWS-CDK/AWS-CodePipipeline-действия Отказ Осознание тех случаев могут быть полезны для предотвращения проблем и задержек в разработке стека.

Разработка AWS CodePipipeline Stack с AWS CDK

AWS CodePipeline — это облачный ресурс, который предоставляет услуги CI/CD в среде AWS. В этом разделе проходит прохождение о том, как создать кодовую обработку с использованием AWS CDK в Teamecript, а также решение некоторых вопросов, которые могут быть представлены при этом. Для этого примера конвейер, который автоматизирует развертывание приложения REVENTJS, присутствующую в репозитории GitHUB, который будет размещен на ведре Amazon S3.

Кодыпопулины состоят из этапов, которые представляют действия, которые будут выполняться на артефактах, используемых в качестве источника. Трубопровод, который используется в качестве примера для этой статьи, имеет три этапа:

  1. Источник: На этом этапе код приложений REVENTJS будет собран через WebHook, который будет использоваться в качестве ввода для трубопровода;

  2. Build: этот этап будет нести ответственность за создание артефактов, приходящих с предыдущего этапа в экземпляре CodeBuild;

  3. Развертывание: последний этап этого примера трубопровода, он будет нести ответственность за развертывание проведенного сайта S3 в сети.

Инициализация среды кодовой обработки

Чтобы определить стандартизацию всех ресурсов, существующих в облачной среде, это хорошая практика для установки имени ресурсов с префиксом, указывающим, как они принадлежат. Сделать это, недвижимость по имени окружающая среда будет установлен в cdk.json Файл и импортируемый в файл контекста с другими переменными среды. Приложение может потребоваться. Это как файл JSON должен выглядеть так, как установить свойство:

{
    "app": "npx ts-node bin/aws-cdk-example.ts",
    "context": {
        "@aws-cdk/core:enableStackNameDuplicates": "true",
        "aws-cdk:enableDiffNoFail": "true",
        "environment": "aws-cdk-example"
    }
}

Помимо того, что имущество просто установлено, весь файл остается такой же, как оно было создано с помощью команды init. Проблема, которая может произойти при изменении этого файла или структуры проекта, является Не могу найти модуль Ошибка, вызываемая при наборе файла в приложение Собственность отсутствует в данном пути, обычно происходящее после того, как файл был переименен или перемещен, чтобы лучше соответствовать узору команды разработки. Чтобы решить его, измените значение свойства с помощью правильного пути к файлу, где синтезируются стеки.

Чтобы получить эти значения, рекомендуется функция контекста, импортируя все переменные контекста, используемые в приложении. Следующий фрагмент — это функция, и его интерфейс, требующий переменной от файла JSON и возвращая его при вызове:

import { Construct } from '@aws-cdk/core';

interface IContext {
    environment: string
};

function getContext(app: Construct): IContext {
    return {
        environment: app.node.tryGetContext('environment')
    }
}

export default getContext;

Важно отметить, что строка внутри trygetcontext Вызов должен соответствовать ключу от объекта JSON, который в противном случае приведет к неопределенному значению и возможным генерациям ошибок в зависимости от использования переменной.

Инициализация хостингового ведра

Это ведро будет служить хостом, в котором приложение REVENTJS будет храниться и подавать в Интернете. Для этого примера сценарий, в котором все пользователи смогут получить доступ к проведенному веб-сайту, используя правила CORS и общественный доступ для чтения, чтобы разрешить его использование. Следующий фрагмент демонстрирует, как определить ведро S3 для размещения приложения REVENTJS, используя AWS-S3 Модуль от AWS CDK:

const corsRules: [CorsRule] = [{
    allowedOrigins: ['*'],
    allowedMethods: [HttpMethods.GET]
}];

const bucketName = `${environment}-bucket`
const bucket = new Bucket(this, bucketName, {
    bucketName: bucketName,
    publicReadAccess: true,
    cors: corsRules,
    websiteIndexDocument: "index.html",
    websiteErrorDocument: "index.html",
    removalPolicy: RemovalPolicy.DESTROY
});

Обратите внимание, что окружающая среда Присутствующие в коде представляют переменную контекста, ранее установленные в cdk.json Файл, позволяющий облачным ресурсам иметь имена после того же образца. Вопросы, которые могут быть представлены при создании таких ведров S3:

  • Запретный статус При входе на сайт: этот вопрос происходит, когда не устанавливает PublicReadAccess Свойство для ведра S3, как для целей безопасности, значение по умолчанию для этого поля установлено как ложь Отказ Решить эту проблему, PublicReadAccess Свойство должно быть установлено как правда предоставление доступа к чтению для всех в сети, доступа к URL-адресу ведра;

  • Страница не найдена: эта проблема, как правило, генерируется при создании веб-сайтов с inventjs и аналогичными карками, генерируется из-за того, что Websermordocument указывает на несуществующий файл. Поскольку ReactJS строит не генерировать error.html Файл для выполнения страницы перенаправления, когда маршрут не найден. Решить эту проблему, оба WebseerRordocument. и WASTEDINDEXDocument должен быть установлен как index.html в качестве параметров при создании конструкции ресурсов;

  • Имя ведра уже принято: ведра Amazon S3 имеют одно правило для их именования: они должны быть уникальными во всем мире. Это означает, что созданное имя ведро должно быть хорошо выбрано и очень конкретно, предотвращая ошибку BucketAlreadyexists быть сгенерированным при развертывании CDK.

Что касается ПередачаПолиция Свойство в создании ведра, установлено, чтобы уничтожить, чтобы позволить удалению этого ведра при запуске CDK Уничтожить Команда, переопределенная по умолчанию Сохранить ценность. Это позволяет удалить данное ведро, если то же самое пустое, когда используется команда, хотя все равно нуждается в ручной очистке и удалении, если ведро содержит какие-либо данные на нем.

Строительство сайта с AWS CodeBuild

Следующий шаг после создания ведра, на котором будет проведен веб-сайт, создает проект CodeBuild, который построит веб-сайт с кодом, исходящим из репозитория GitHUB. Первым шагом к достижению этой цели является создание роли AWS IAM. Проект CodeBuild будет предоставлен ему разрешения на выполнение действий по другим облачным ресурсам AWS, таких как ведро веб-сайта. Следующий фрагмент кода показывает, как создать эту роль:

const codebuildRoleName = `${environment}-codebuild-role`;

const codebuildRole: Role = new Role(this, codebuildRoleName, {
    roleName: codebuildRoleName,
    assumedBy: new ServicePrincipal('codebuild.amazonaws.com')
});

codebuildRole.addToPolicy(new PolicyStatement({
    effect: Effect.ALLOW,
    actions: [
        "logs:CreateLogGroup",
        "logs:CreateLogStream",
        "logs:PutLogEvents",
        "s3:*"
    ],
    resources: [artifactsBucket.bucketArn]
}));

Определение роли имеет одно важное свойство: предположительно . Эта недвижимость отвечает за то, чтобы сообщить об окружающей среде AWS, на которой эта роль будет работать, чтобы быть здесь назначенным codebuild.amazonaws.com , который представляет AWS CodeBuild. Важно убедиться, что указано правильное имя руководителя обслуживания, так как будет создать доверенное лицо AWS IAM, будет использовать для того, чтобы дать ресурсу основные разрешения для работы. Если значение не установлено правильно, ошибка, такая, будет дана при запуске трубопровода: Ошибка вызова STARTBUILD: CodeBuild не авторизован для выполнения: STS: PuriseRole Отказ Чтобы решить это, просто установите ServicePrincipal к правильному значению желаемого облачного ресурса AWS.

Что касается следующего раздела кода, он управляет политиками, которые предоставляются ранее созданной роли. IAM Политики позволяют AWS облачных ресурсов для выполнения действий по другим ресурсам в окружающей среде. Это Потребность. это обычно содержит эффект , Действия , Ресурсы и Условия , хотя этот проект CodeBuild не нуждается в условиях, которые необходимо установить, следовательно, это свойство не используется. Очень распространено проблемы в этом разделе приложений CDK, так как нет простого способа определить, какие свойства должны будут работать ресурс. Со временем и опытом архитектурирующие проекты AWS содействуют определению того, какие разрешения будут потребоваться каждый ресурс, снижая время, потраченное на испытание и методы ошибок для создания ресурсов.

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

Следующим шагом на создании ресурса CodeBuild является создание самого ресурса, используя AWS-CodeBuild Модуль от AWS CDK. Следующий фрагмент демонстрирует, как объявить конструкцию CodeBuild:

const codebuildProjectName = `${environment}-codebuild`;

const codebuildProject = new PipelineProject(this, codebuildProjectName, {
    environment: {
        buildImage: LinuxBuildImage.STANDARD_2_0,
        computeType: ComputeType.SMALL
    },
    role: codebuildRole,
    projectName: codebuildProjectName
});

Метод CodeBuild, используемый для создания настоящего ресурса, является использованием PipelyProject Конструкция, которая облегчает использование ресурса, когда он используется внутри проекта кодепипровода, как используется в этом примере. Эта конструкция состоит из большого количества свойств, но только некоторые из них необходимо установить, а для этого проекта окружающая обстановка , роль и ProjectName используются. Свойство окружающей среды устанавливает спецификации экземпляра CodeBuild, используемой для создания данного проекта, и ему необходимо поддерживать в своей среде, язык, который используется в проекте, который будет построен. Это Ссылка CodeBuild Рассказывает обо всех изображениях и его особенностях, которые предотвратит кодовую гильзу для создания ошибки, информирующей о том, что версия выполнения не поддерживается выбранным изображением сборки.

Еще одно свойство, не используемое в этом проекте из-за того, что его значение по умолчанию является правильным, это BuildSpec Отказ Файл BuildSpec содержит информацию, которая будет использоваться ресурсом для создания исходного кода, с пошаговыми инструкциями для CodeBuild на том, как следует выполнить компиляция. Отсутствие файла с именем buildspec.yml В корне проекта будет построена или на заказ, если значение установлено в свойство, приведет к ошибке, помеченной как YAML_FILE_ERROR Сообщение: YAML-файл не существует Отказ Чтобы решить его, этот файл должен быть создан, содержащий шаги для создания приложения, следуя шаблону, присутствующую в AWS Docs. .

Создание кодовой подготовки AWS

Кодепейлина — это то, где все, что было создано до сих пор вместе. Как требуется также кодовыйБизнес, трубопровод также должен иметь свой собственный IAM Роль Чтобы успешно управлять необходимыми разрешениями, и его определение, которое будет использовать Трубопровод построить из AWS-CodePipipeline Модуль присутствует на AWS CDK. Определение трубопровода последует шаблон как фрагмент ниже:

const codepipelineName = `${environment}-pipeline`;
const codepipeline: Pipeline = new Pipeline(this, codepipelineName, {
    artifactBucket: artifactsBucket,
    pipelineName: codepipelineName,
    role: pipelineRole,
});

const outputSource = new Artifact();
const outputBuild = new Artifact();

Этот короткий фрагмент должен объявить трубопровод. Единственный параметр, который еще не указан в этой статье, является Artifactbucket , который необходимо получить ведро S3, который будет использоваться для хранения артефактов, которые будут переданы с сцены на этап. Это необязательный параметр, который был установлен с целью стандартизации имен ведра, когда он не устанавливает, приведет к созданию ведра с именем по умолчанию. Кроме того, Артефакт Созданные предметы собираются служить артефактами, удерживающими файлы, которые будут переданы на конвейере с стадии к другому.

После того, как все настроено, все, что осталось сделать, это объявить поэтапные пасицы в трубопровод, где все действия произойдут. Как указано ранее, будут созданы три этапа: источник, сборка и развертывание, а следующие разделы будут указывать, как создать эти этапы, используя AWS-CodePipipeline-действия Модуль от AWS CDK.

Добавление этапов: Источник

Этот этап отвечает за сбор кода из репозитория GitHUB, который будет использоваться в качестве источника для сборки с использованием CodeBuild. Этот этап может быть добавлен с помощью фрагмента ниже:

const { repo, owner, oauthToken } = github;
codepipeline.addStage({
    stageName: 'Source',
    actions: [
        new GitHubSourceAction({
            actionName: 'Source',
            oauthToken: new SecretValue(oauthToken),
            output: outputSource,
            owner,
            repo,
        })
    ]
});

Github Объект будет установлен в cdk.json файл и выбран так же, как окружающая среда был ранее сделан. Важно отметить, что объект, содержащий эту информацию, должен быть идентичным, как объект, определенный в Context.ts Интерфейс, позволяющий trygetcontext получить свою ценность без проблем. Если шаблон не соблюдается, ошибка будет запущена, так как одно или несколько свойств будут иметь свои значения как undefined Из-за того, что значения не присутствуют в файле JSON.

В основном каждый этап будет содержать Стаганка и Действия быть выполненным. В этом случае его имя будет определено как Источник И это будет выполнять GithubsourCeation , который будет собирать код в репозитории GitHub, указанный в его параметрах. Некоторые проблемы могут быть созданы при создании этого этапа:

  • Аутентификация терпит неудачу с GitHub Oauthtoken: GitHub предоставляет разработчикам токен, который должен быть передан в трубопровод, чтобы предоставить доступ к репозиториям GitHub. Чтобы решить эту проблему, в профиле владельца хранилища должен быть сгенерирован эт. Админ: repo_hook и репо Отказ Этот генерированный токен должен быть передан в трубопровод как новый Secretvalue , который представляет собой безопасный способ хранения секретной стоимости, создаваемой в SecretsManager AWS, в Открытие имущество; Неверный репозиторий/владелец: Эта проблема обычно происходит, когда имя репозитория и/или владелец не отображается в контексте-файле, поэтому генерируя неверную ссылку, которую CodePipipeline не может найти, или если предоставленная крышка не имеет необходимых разрешений для визуализации репозитория. Этот вопрос маркируется на кодепеипоне, как

  • Либо репозиторий GitHUB «REPO-Name» не существует, либо данный токен GitHub Access имеет недостаточные разрешения для доступа к репозитории Отказ

Добавление этапов: Строить

Этот этап отвечает за использование ранее определенного ресурса AWS CodeBuild Resource для создания кода, исходящего с предыдущего этапа. Чтобы определить этот этап, приведенный ниже фрагмент пример:

codepipeline.addStage({
    stageName: 'Build',
    actions: [
        new CodeBuildAction({
            actionName: 'Build',
            project: codebuildProject,
            outputs: [outputBuild],
            input: outputSource
        })
    ]
});

Этот этап гораздо проще, чем Источник Этап, поскольку ресурс CodeBuild уже был создан в этом приложении. Это будет использовать Ongysource Артефакт, который содержит исходный код, исходящий из репозитория, как показано в Источник Степень фрагмент, создать сборку приложения. На этом этапе появятся все вопросы CodeBuild, так как это происходит, когда ресурс будет использоваться для использования, поэтому для отладки этих возможных проблем необходимо открыть проект CodeBuild в консоли AWS и проверить журналы операции здания Отказ Этот процесс здания, если успешно, затем генерируют скомпилированное приложение, которое будет отправлено на routebuild Артефакт будет использоваться на следующем этапе.

Добавление этапов: Развертывать

Этот этап отвечает за доставку сайта через Amazon S3, используя ранее созданное ведро для этого. Это потребует использования S3DOWOLDANCE Из модуля трубопроводных действий, как показано в фрагменте ниже:

codepipeline.addStage({
    stageName: 'Deploy',
    actions: [
        new S3DeployAction({
            actionName: 'Deploy',
            bucket: bucket,
            input: outputBuild
        })
    ]
});

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

Расположенный артефаксбукет и кодепейн

Теперь, работая в прямом классе, который расширяет стек CDK, конвейеры и его ведро артефакты будут созданы, как и последний шаг перед развертыванием трубопровода. Следующий фрагмент кода представляет это создание:

const artifactsBucketName = `${environment}-artifacts-bucket`;

const artifactsBucket: Bucket = new Bucket(this, artifactsBucketName, {
    removalPolicy: RemovalPolicy.DESTROY,
    bucketName: artifactsBucketName
});

new CDKExamplePipeline(this, `${environment}-stack`, {
    artifactsBucket
});

Это довольно простой шаг, учитывая, что ведро S3 уже создано, и ArtifactsBucket гораздо менее сложный ресурс, поскольку ему не нужно проводить сайт. Как уже упоминалось, использование этого ведра, описанного в этом фрагменте, является необязательным, поскольку CodePipipeline уже создает ведро по умолчанию, но вспомнить, что это ведро по умолчанию, наверняка, наверняка не будет следовать за шаблонами, используемыми в стеке. Что касается самой трубопровода, ведро проходит как параметр, принимая во внимание, что класс CodePipipeline только что создан имеет интерфейс, такой как фрагмент ниже:

interface ICDKExamplePipelineProps {
    artifactsBucket: Bucket
}

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

Проблемы после развития

Развитие приложения может быть самой сложной частью, но проблемы могут случиться даже после того, как код полностью правильно. Вопросы, которые проводятся после разработки приложения, могут включать в себя:

  • Бутструп требуется: когда проблема Шаблон слишком большой для развертывания («Bootstrap CDK» требуется) Появится, это означает, что ваше приложение CDK сгенерировало шаблон CloudFation, превышающий максимальный принятый, который составляет 50 kib. Эта проблема довольно проста для решения, поскольку все необходимое для выполнения команды Bootstrap, приведенную в терминале, содержащую Ведро Арн В котором приложение CDK будет загружено и импортировано в AWS CloudBation, как только команда развертывания снова используется;

  • Превышение предела ресурсов: поскольку AWS CDK-приложения преобразуются в шаблоны облачных деформаций, у них одинаковые ограничения. Одним из этих ограничений является жесткая крышка на величине ресурса, присутствующего в одном стеке: 200. Хотя это может показаться много, конструкции CDK обычно генерируют более одного ресурса в стеке для создания. Чтобы решить эту проблему, отделяя приложение в нескольких стеках, является рекомендуемой опцией, позволяя разработчикам организовать облачную среду в нескольких частях, которые подключены при развертывании;

  • Ресурсы не удаляются после CDK уничтожает : CDK Уничтожить Команда имеет целью удаления данного стека и всех его ресурсов. Хотя AWS блокирует удаление некоторых ресурсов, которые могут содержать данные, такие как Amazon Dynamodb и Amazon S3, оставляя данный ресурс в облачной среде даже после того, как весь стек уничтожен. Указание ПередачаПолиция. Уничтожить В определении конструкции позволит CDK уничтожить все пустые ресурсы. Для ресурсов, которые не пустые, работает CDK Уничтожить Сгенерирует исключение для непустых ресурсов, и эти ресурсы должны быть очищены и удалены вручную через консоль AWS.

Заключение В этой статье указывали на наиболее распространенные проблемы, которые могут произойти во время разработки облачных сред, использующих AWS CDK, и как их легко исправить, является бесплатной статьей для « Как AWS CDK облегчает процесс разработки AWS Cloud Stacks », который вводит Инструмент и дает обзор в том, как он может быть использован. В качестве структуры развиваются эти вопросы AWS и сообществом, улучшая содействующий инструмент и жизнь каждого разработчика AWS.

Марк Авди.

CТО |. Westpoint.io |. Любитель всего безртных

Оригинал: «https://dev.to/mavdi/creating-an-aws-codepipeline-stack-and-troubleshooting-common-issues-3kp5»