AWS CDK部署CodePipeline时报错:无法读取undefined的'region'属性
问题:AWS CodePipeline部署CDK堆栈时出现
TypeError: Cannot read properties of undefined (reading 'region')错误 我在使用AWS CodePipeline部署CDK堆栈时遇到无法解析的错误,部署CodePipeline的代码如下:
####################################################### ############### DEPLOY CODE PIPELINE ################## ####################################################### print("Deploy Code Pipeline:", project_name_clean) # Create a CodePipeline pipeline = codepipeline.Pipeline( self, f'CodePipeline_{project_name_clean}', pipeline_name=f'codepipeline_{project_name_clean}', ) # Add the CodeCommit source stage to the pipeline source_stage = pipeline.add_stage( stage_name='Source', ) source_action = codepipeline_actions.CodeCommitSourceAction( action_name='SourceAction', repository=repository, # branch='master', output=codepipeline.Artifact() ) source_stage.add_action(source_action) # Add the CodeBuild build stage to the pipeline build_stage = pipeline.add_stage( stage_name='Build', ) build_action = codepipeline_actions.CodeBuildAction( action_name='BuildAction', project=codebuild_project, input=codepipeline.Artifact(), ) build_stage.add_action(build_action)
遇到的错误信息:
Traceback (most recent call last): File "/home/glue_user/workspace/jupyter_workspace/repositories/aws-infrastructure/cdk-constructs/app_cdk_initialize_project/app.py", line 20, in <module> InitializeProjectStack(app, f"{stack_name_clean}") File "/usr/local/lib/python3.10/site-packages/jsii/_runtime.py", line 112, in __call__ inst = super().__call__(*args, **kwargs) File "/home/glue_user/workspace/jupyter_workspace/repositories/aws-infrastructure/cdk-constructs/otd_data_engineer_lib/otd_data_engineer_lib/initialize_project_stack.py", line 249, in __init__ build_stage.add_action(build_action) File "/usr/local/lib/python3.10/site-packages/aws_cdk/aws_codepipeline/__init__.py", line 5815, in add_action return typing.cast(None, jsii.invoke(self, "addAction", [action])) File "/usr/local/lib/python3.10/site-packages/jsii/_kernel/__init__.py", line 149, in wrapped return _recursize_dereference(kernel, fn(kernel, *args, **kwargs)) File "/usr/local/lib/python3.10/site-packages/jsii/_kernel/__init__.py", line 399, in invoke response = self.provider.invoke( File "/usr/local/lib/python3.10/site-packages/jsii/_kernel/providers/process.py", line 377, in invoke return self._process.send(request, InvokeResponse) File "/usr/local/lib/python3.10/site-packages/jsii/_kernel/providers/process.py", line 339, in send raise RuntimeError(resp.error) from JavaScriptError(resp.stack) RuntimeError: TypeError: Cannot read properties of undefined (reading 'region')
解决方案
这个错误核心是CDK无法读取资源的region属性,可从以下几点排查修复:
- 检查CodeBuild/CodeCommit资源的区域配置:确保
codebuild_project和repository是在当前堆栈的环境中创建,或通过from_project_arn/from_repository_arn正确导入(ARN需包含完整区域信息),避免跨区域资源引用时丢失区域属性。 - 显式设置堆栈环境:初始化CDK堆栈时,明确指定
env参数,确保资源区域可被正确解析:app = cdk.App() InitializeProjectStack(app, "MyStack", env=cdk.Environment(account="你的AWS账号ID", region="目标区域") ) - 修正Artifact传递逻辑:Build阶段的输入应使用Source阶段输出的Artifact,而非新建空Artifact。修改代码如下:
# 保存Source阶段输出的Artifact source_output = codepipeline.Artifact() source_action = codepipeline_actions.CodeCommitSourceAction( action_name='SourceAction', repository=repository, output=source_output ) # Build阶段复用Source的输出作为输入 build_action = codepipeline_actions.CodeBuildAction( action_name='BuildAction', project=codebuild_project, input=source_output, )
内容的提问来源于stack exchange,提问作者Pablo CA
相关产品推荐
相关产品推荐

