繁体   English   中英

CDK:如何使用/导入一个堆栈中定义的 s3 到另一个堆栈(在不同的文件中)?

[英]CDK: How to use/import s3 defined in one stack to another stack (in a different file)?

我正在尝试在一个堆栈中定义 s3 存储桶并在另一个堆栈中使用该存储桶。 两个堆栈都在不同的文件中。 如何在pipeline.ts存储桶中访问bucket.ts的 s3 存储桶。

我正在寻找一个解释这个概念的答案,以便我也对其他堆栈重复它。

桶.ts

    import * as cdk from 'aws-cdk-lib';
    import * as s3 from 'aws-cdk-lib/aws-s3';
    import { Construct } from 'constructs';
    
    export class PipelineSourceBucket extends cdk.Stack {
        constructor(scope: Construct, id: string, props?: cdk.StackProps) {
    
            super(scope, id, props);
    
            const sourceBucket = new s3.Bucket(this, 'pipelineSourceBucket', {
                versioned: true, // a Bucket used as a source in CodePipeline must be versioned
            });
        }
    }

管道.ts

    import * as cdk from 'aws-cdk-lib';
    import { Construct } from 'constructs';
    import * as codepipeline from 'aws-cdk-lib/aws-codepipeline';
    import * as codepipeline_actions from 'aws-cdk-lib/aws-codepipeline-actions';
    
    
    export class PipelineStack extends cdk.Stack {
      constructor(scope: Construct, id: string, props?: cdk.StackProps) {
    
        super(scope, id, props);
    
        const pipeline = new codepipeline.Pipeline(this, 'CodePipeline', {
          pipelineName: 'jatin-ci-cd',
          crossAccountKeys: false, // not required as it wont be cross account deployment
        })
        const sourceAction = new codepipeline_actions.S3SourceAction({
          actionName: 'S3Source',
          bucket: sourceBucket,  //how to access the bucket from other stack?
          bucketKey: 'path/to/file.zip',
          output: sourceOutput,
        });
      }
    }

aws-cdk-examples存储库有几个多堆栈示例,展示了将变量从一个构造 class 传递到另一个构造的模式。 步骤是:

依赖生产者声明一个公共字段来导出引用。

export class PipelineSourceBucket extends cdk.Stack {
    readonly sourceBucket: s3.Bucket

    constructor(scope: Construct, id: string, props?: cdk.StackProps) {
        super(scope, id, props);
        this.sourceBucket = new s3.Bucket(this, 'pipelineSourceBucket');
    }
}

依赖消费者在其道具中需要一个桶。

interface PipelineStackProps extends cdk.StackProps {
    bucket: s3.Bucket
}

app.ts中实例化两者并将存储桶变量从生产者传递给消费者:

const { sourceBucket } = new PipelineSourceBucket(app, "SourceStack", {...etc})

new PipelieStack(app, "PipelineStack", {bucket: sourceBucket, ...etc})

在幕后,CDK 会将此依赖项合成为 CloudFormation 导入和导出跨堆栈引用

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM