Как настроить выполнение приложения AWS CDK в AWS CodeBuild?

Я хочу запустить синтез AWS CDK из репозитория Git с помощью AWS CodeBuild - т.е. если я обновляю код приложения CDK в репо, я хочу, чтобы стеки CloudFormation обновлялись автоматически. Каковы рекомендации по настройке разрешений на сборку ролей?


person Lite    schedule 23.12.2018    source источник


Ответы (2)


Для репозитория GitHub вашей роли CodeBuild не требуются дополнительные разрешения, но она должна иметь доступ к oauthToken для доступа к GitHub.

Для репозитория CodeCommit создайте или import объект codecommit.Repository и используйте объект CodeCommitSource в качестве параметра source, и разрешения роли сборки будут настроены автоматически (в частности, разрешения, которые будут добавлены, будут на _ 6_ из указанный репозиторий).

См. здесь.

Вас также может заинтересовать приложение CDK- доставка пакета. Однако он не просто создает проект CodeBuild, он использует CodePipeline для извлечения, сборки и развертывания приложения CDK, так что это может быть больше, чем вы ищете.

person rix0rrr    schedule 03.01.2019
comment
Спасибо, пакет доставки приложений выглядит как то, что мне нужно. - person Lite; 04.01.2019

AWS выпустила месяц назад новый класс для пакета CDK под названием pipelines, который включает в себя несколько утилит, облегчающих настройку самомодифицирующихся конвейеров. Кроме того, есть codepipeline-actions, который включает конструкции для подключения вашего конвейера к CodeCommit, GitHub, BitBucket и т. д.

Вот полный пример (подробно из связанного сообщения в блоге) с использованием github в качестве источника, который развертывает лямбда-выражение через CodePipeline:

Создайте сцену из своего стека

import { CfnOutput, Construct, Stage, StageProps } from '@aws-cdk/core';
import { CdkpipelinesDemoStack } from './cdkpipelines-demo-stack';

/**
 * Deployable unit of web service app
 */
export class CdkpipelinesDemoStage extends Stage {
  public readonly urlOutput: CfnOutput;
  
  constructor(scope: Construct, id: string, props?: StageProps) {
    super(scope, id, props);

    const service = new CdkpipelinesDemoStack(this, 'WebService');
    
    // Expose CdkpipelinesDemoStack's output one level higher
    this.urlOutput = service.urlOutput;
  }
}

Создайте стек с вашим конвейером

import * as codepipeline from '@aws-cdk/aws-codepipeline';
import * as codepipeline_actions from '@aws-cdk/aws-codepipeline-actions';
import { Construct, SecretValue, Stack, StackProps } from '@aws-cdk/core';
import { CdkPipeline, SimpleSynthAction } from "@aws-cdk/pipelines";

/**
 * The stack that defines the application pipeline
 */
export class CdkpipelinesDemoPipelineStack extends Stack {
  constructor(scope: Construct, id: string, props?: StackProps) {
    super(scope, id, props);

    const sourceArtifact = new codepipeline.Artifact();
    const cloudAssemblyArtifact = new codepipeline.Artifact();
 
    const pipeline = new CdkPipeline(this, 'Pipeline', {
      // The pipeline name
      pipelineName: 'MyServicePipeline',
      cloudAssemblyArtifact,

      // Where the source can be found
      sourceAction: new codepipeline_actions.GitHubSourceAction({
        actionName: 'GitHub',
        output: sourceArtifact,
        oauthToken: SecretValue.secretsManager('github-token'),
        owner: 'OWNER',
        repo: 'REPO',
      }),

       // How it will be built and synthesized
       synthAction: SimpleSynthAction.standardNpmSynth({
         sourceArtifact,
         cloudAssemblyArtifact,
         
         // We need a build step to compile the TypeScript Lambda
         buildCommand: 'npm run build'
       }),
    });

    // This is where we add the application stages
    // ...
  }
}
person whtlnv    schedule 29.08.2020