YAML格式CloudFormation模板中CodePipeline Build环境变量配置报错
YAML CloudFormation模板中CodePipeline Build环节环境变量配置方案
问题背景
在YAML格式的AWS CloudFormation模板中,需将创建模板时传入的production或staging参数(CodeEnvironment)传递给CodePipeline的Build环节,尝试多种EnvironmentVariables配置方式后均收到格式错误提示。
错误原因分析
结合报错信息与尝试的代码,核心问题有两点:
- CodePipeline的Build Action配置中,
EnvironmentVariables要求是JSON数组格式的字符串,而非直接的YAML数组; - 之前尝试的JSON写法存在语法错误:未用
[]包裹成数组,且type与value字段间缺少逗号。
正确配置方式
以下两种写法均可满足需求:
方式一:使用!Sub生成合规的JSON数组字符串
EnvironmentVariables: !Sub '[{"name": "CURRENT_ENVIRONMENT", "type": "PLAINTEXT", "value": "${CodeEnvironment}"}]'
方式二:直接编写转义后的JSON数组字符串
EnvironmentVariables: "[{\"name\": \"CURRENT_ENVIRONMENT\", \"type\": \"PLAINTEXT\", \"value\": \"${CodeEnvironment}\"}]"
完整修正后的Build Action代码片段
- Name: "Build" Actions: - Name: "Build" ActionTypeId: Category: "Build" Owner: "AWS" Provider: "CodeBuild" Version: "1" Configuration: ProjectName: !Ref CodeBuildProject EnvironmentVariables: !Sub '[{"name": "CURRENT_ENVIRONMENT", "type": "PLAINTEXT", "value": "${CodeEnvironment}"}]' InputArtifacts: - Name: "SourceArtifact" OutputArtifacts: - Name: "secondary_artifact_name_1" - Name: "secondary_artifact_name_2" Region: !Ref AWS::Region Namespace: "BuildVariables" RunOrder: 1
关键说明
- 必须用
[]将环境变量对象包裹成数组,符合CodePipeline要求的JSON数组格式; - 确保JSON字符串内的字段名(
name/type/value)为小写,与AWS规范一致; - 使用
!Sub可直接引用CloudFormation参数CodeEnvironment,无需手动拼接字符串。
内容的提问来源于stack exchange,提问作者user12245915
相关产品推荐
相关产品推荐

