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

pup*_*eno 0 amazon-web-services aws-cdk

我正在使用 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"],
                },
            ),
        })
    }
}
Run Code Online (Sandbox Code Playgroud)

该堆栈创建了一个 S3 存储桶,当我删除该存储桶时,该堆栈不会随之删除。我搜索了选项,但找不到任何可以控制该行为的选项。是否可以将 S3 存储桶标记为cdk.RemovalPolicy.DESTROY或类似的内容?

gsh*_*hka 8

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

myPipeline.buildPipeline();
const artifactBucket = myPipeline.pipeline.artifactBucket;
artifactBucket.applyRemovalPolicy(cdk.RemovalPolicy.DESTROY);
Run Code Online (Sandbox Code Playgroud)

文档:

虽然这并不能解决存储桶非空且无法删除的问题。为了正确解决这个问题,您需要使用自己Pipeline创建的存储桶来创建自己的存储桶,并将其传递给属性CodePipeline中的构造函数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, ...});
Run Code Online (Sandbox Code Playgroud)