![](/img/trans.png)
[英]How to import an existing S3 bucket exported by a stack, into another stack via CloudFormation YAML
[英]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.