使用AWS CDK Pipelines时,应在哪里存储环境变量?
CDK Pipeline中安全传递自定义环境变量的解决方案
推荐存储与配置方式
1. AWS Secrets Manager/Systems Manager Parameter Store(首选)
这是AWS官方推荐的集中式配置/敏感数据存储方案,无需手动修改CodeBuild动作,通过CDK代码即可完成集成:
- 第一步:在AWS控制台创建对应存储条目:
- 普通配置(如OU ID):用Systems Manager Parameter Store创建String类型参数,例如路径
/my-pipeline/ou-id,值填入目标OU ID。 - 敏感数据:用Secrets Manager创建Secret存储敏感值。
- 普通配置(如OU ID):用Systems Manager Parameter Store创建String类型参数,例如路径
- 第二步:修改CDK代码,获取存储值并传递给ShellStep:
import aws_cdk as cdk from constructs import Construct from aws_cdk.pipelines import CodePipeline, CodePipelineSource, ShellStep from aws_cdk.aws_ssm import StringParameter from aws_cdk.aws_secretsmanager import SecretValue from my_pipeline.my_pipeline_app_stage import MyPipelineAppStage class MyPipelineStack(cdk.Stack): def __init__(self, scope: Construct, construct_id: str, **kwargs) -> None: super().__init__(scope, construct_id, **kwargs) # 从SSM Parameter Store读取普通配置 ou_id_param = StringParameter.from_string_parameter_name( self, "OuIdParam", string_parameter_name="/my-pipeline/ou-id" ) pipeline = CodePipeline(self, "Pipeline", pipeline_name="MyPipeline", synth=ShellStep("Synth", input=CodePipelineSource.git_hub("OWNER/REPO", "main"), commands=[ "npm install -g aws-cdk", "python -m pip install -r requirements.txt", "cdk synth"], # 将参数映射为环境变量 env={ "OU_ID": ou_id_param.string_value }, # 若为敏感值,改用env_from_secrets: # env_from_secrets={ # "OU_ID": SecretValue.secrets_manager("my-ou-id-secret") # } )) pipeline.add_stage(MyPipelineAppStage(self, "my-stack"))
CDK会自动将配置同步到CodeBuild的Synth步骤环境变量中,无需手动干预。
2. GitHub Secrets(适配GitHub触发场景)
如果Pipeline由GitHub触发,可将变量存储在GitHub仓库的Secrets中:
- 第一步:进入GitHub仓库 → Settings → Secrets and variables → Actions → 新建Repository Secret,命名为
OU_ID并填入对应值。 - 第二步:修改CDK代码,直接引用GitHub Secret:
import aws_cdk as cdk from constructs import Construct from aws_cdk.pipelines import CodePipeline, CodePipelineSource, ShellStep from my_pipeline.my_pipeline_app_stage import MyPipelineAppStage class MyPipelineStack(cdk.Stack): def __init__(self, scope: Construct, construct_id: str, **kwargs) -> None: super().__init__(scope, construct_id, **kwargs) pipeline = CodePipeline(self, "Pipeline", pipeline_name="MyPipeline", synth=ShellStep("Synth", input=CodePipelineSource.git_hub("OWNER/REPO", "main", authentication=cdk.SecretValue.secrets_manager("github-access-token")), commands=[ "npm install -g aws-cdk", "python -m pip install -r requirements.txt", "cdk synth"], # 引用GitHub Secret作为环境变量 env={ "OU_ID": cdk.SecretValue.from_github_secret("OU_ID") } )) pipeline.add_stage(MyPipelineAppStage(self, "my-stack"))
注:github-access-token需提前在AWS Secrets Manager存储,用于CDK访问GitHub仓库。
核心说明
- 无需手动修改CodeBuild动作:CDK会根据代码中的配置自动更新CodeBuild项目的环境变量设置。
- 集中存储首选AWS原生服务:Secrets Manager/Parameter Store支持权限管控、版本管理、自动轮换等功能,更适配AWS生态下的配置管理需求。
内容的提问来源于stack exchange,提问作者D Malan
相关产品推荐
相关产品推荐

