Я хочу запустить синтез AWS CDK из репозитория Git с помощью AWS CodeBuild - т.е. если я обновляю код приложения CDK в репо, я хочу, чтобы стеки CloudFormation обновлялись автоматически. Каковы рекомендации по настройке разрешений на сборку ролей?
Как настроить выполнение приложения AWS CDK в AWS CodeBuild?
Ответы (2)
Для репозитория GitHub вашей роли CodeBuild не требуются дополнительные разрешения, но она должна иметь доступ к oauthToken
для доступа к GitHub.
Для репозитория CodeCommit создайте или import
объект codecommit.Repository
и используйте объект CodeCommitSource
в качестве параметра source
, и разрешения роли сборки будут настроены автоматически (в частности, разрешения, которые будут добавлены, будут на _ 6_ из указанный репозиторий).
См. здесь.
Вас также может заинтересовать приложение CDK- доставка пакета. Однако он не просто создает проект CodeBuild, он использует CodePipeline для извлечения, сборки и развертывания приложения CDK, так что это может быть больше, чем вы ищете.
AWS выпустила месяц назад новый класс для пакета CDK под названием pipelines, который включает в себя несколько утилит, облегчающих настройку самомодифицирующихся конвейеров. Кроме того, есть codepipeline-actions, который включает конструкции для подключения вашего конвейера к CodeCommit, GitHub, BitBucket и т. д.
Вот полный пример a > (подробно из связанного сообщения в блоге) с использованием 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
// ...
}
}