CDK 的 CodePipeline 或 CodeBuildStep 留下了一个 S3 存储桶,有没有办法自动删除它?

CDK's CodePipeline or CodeBuildStep are leaving an S3 bucket behind, is there a way of automatically removing it?

我正在使用 CDK 创建 CloudFormation 堆栈,代码大致如下:

export class PipelineStack extends cdk.Stack {
    constructor(scope: Construct, id: string, props: PipelineStackProps) {
        super(scope, id, props)
        new pipelines.CodePipeline(this, id, {
            pipelineName: id,
            synth: new pipelines.CodeBuildStep("Synth", {
                    input: pipelines.CodePipelineSource.connection(props.githubRepo, props.repoBranch, {connectionArn: props.repoConnectionArn}),
                    installCommands: ["npm install -g aws-cdk"],
                    commands: ["npm ci", "npx cdk synth"],
                },
            ),
        })
    }
}

并且该堆栈创建了一个 S3 存储桶,当我删除该堆栈时,它并没有被删除。我搜索了选项,但找不到任何可以控制该行为的选项。是否可以将该 S3 存储桶标记为 cdk.RemovalPolicy.DESTROY 或类似的东西?

我假设您指的是工件桶。可以通过 CodePipeline.pipeline.artifactBucket 访问它。您需要在定义整个管道并调用 myPipeline.buildPipeline();

后执行此操作
myPipeline.buildPipeline();
const artifactBucket = myPipeline.pipeline.artifactBucket;
artifactBucket.applyRemovalPolicy(cdk.RemovalPolicy.DESTROY);

文档:

虽然这不能解决存储桶 non-empty 并且无法删除的问题。要正确解决此问题,您需要使用自己创建的存储桶创建自己的 Pipeline,并将其传递给 codePipeline 属性:[=19 中的 CodePipeline 的构造函数=]

const artifactBucket = new s3.Bucket(this, 'artifactBucket', {autoDeleteObjects: true});
artifactBucket.applyRemovalPolicy(cdk.RemovalPolicy.DESTROY);

const underlyingPipeline = aws_codepipeline.Pipeline(this, 'underlyingPipeline', {artifactBucket: artifactBucket});

const pipeline = pipelines.Codepipeline(this, 'myPipeline', {codePipeline:underlyingPipeline, ...});