如何在Python版CDK中使用已有Amazon S3桶存储Artifacts
使用现有S3桶存储CodePipeline构件的实现方法
你当前定义的source_artifact和cloud_assembly_artifact是CodePipeline的逻辑占位对象,实际的存储位置由Pipeline全局配置决定,不需要修改Artifact实例的声明,只需按以下步骤调整即可:
- 首先导入S3模块,引用你已经创建好的S3桶
from aws_cdk import aws_s3 as s3 # 填入你的现有S3桶名称,同账号同区域场景可直接使用该方法 existing_artifact_bucket = s3.Bucket.from_bucket_name( self, id="ExistingArtifactBucket", bucket_name="替换为你的现有S3桶名称" )
如果是跨账号、跨区域的桶,建议使用s3.Bucket.from_bucket_arn方法导入,同时提前配置好桶策略,允许当前AWS账号的CodePipeline服务角色读写桶内资源。
- 第二步在
CdkPipeline的构造参数中添加artifact_bucket配置,传入上面导入的桶实例即可,完整修改后的代码如下:
from aws_cdk import aws_s3 as s3 import aws_cdk.aws_codepipeline as codepipeline import aws_cdk.aws_codepipeline_actions as cpactions import aws_cdk.pipelines as pipelines import aws_cdk.aws_codecommit as codecommit from aws_cdk import Stack, App import constructs # 其他代码逻辑保持不变 source_artifact = codepipeline.Artifact() cloud_assembly_artifact = codepipeline.Artifact() # 导入现有S3桶 existing_artifact_bucket = s3.Bucket.from_bucket_name( self, id="ExistingArtifactBucket", bucket_name="替换为你的现有S3桶名称" ) pipeline = pipelines.CdkPipeline(self, 'Pipeline', cloud_assembly_artifact=cloud_assembly_artifact, pipeline_name='testPipeline', # 新增配置:指定现有桶作为构件存储桶 artifact_bucket=existing_artifact_bucket, source_action = cpactions.CodeCommitSourceAction( repository=codecommit.Repository.from_repository_name( self, id="cicd_pipeline", repository_name="repo-name" ), branch='master', action_name='CodeCommit', trigger=cpactions.CodeCommitTrigger.POLL, output=source_artifact, ), synth_action=pipelines.SimpleSynthAction( source_artifact=source_artifact, cloud_assembly_artifact=cloud_assembly_artifact, install_command='npm install -g aws-cdk && pip install -r requirements.txt', build_command='pytest unittests', synth_command='cdk synth'))
注意:如果你的现有S3桶开启了KMS加密,还需要给CodePipeline执行角色、Synth动作执行角色授予对应KMS密钥的加密、解密权限,避免读写构件时报权限错误。
内容的提问来源于stack exchange,提问作者Sameed Usmani
相关产品推荐
相关产品推荐

