【发布时间】:2021-09-04 02:03:34
【问题描述】:
背景:
我正在创建一个用于预置 AWS Step Function 机器的 Terraform 模块。 Step Function 定义由 Map 状态组成,该状态通过 CodeBuild Task 状态迭代动态数组输入。在 CodeBuild 任务的 EnvironmentVariablesOverride 参数中,我将传递数组输入的相应 Map 迭代。
问题:
我还没有弄清楚在 CodeBuild Task Parameter 字段中提供 EnvironmentVariablesOverride 属性的语法。
这是状态机定义:
resource "aws_sfn_state_machine" "this" {
name = <name>
role_arn = <role_arn>
definition = <<EOF
{
"StartAt": "Parallelize Stack",
"States": {
"Parallelize Stack": {
"Type": "Map",
"End": true,
"Iterator": {
"StartAt": "Deploy",
"States": {
"Deploy": {
"Type": "Map",
"Parameters": {
"Path.$": "$$.Map.Item.Value"
},
"End": true,
"Iterator": {
"StartAt": "Plan",
"States": {
"Plan": {
"Type": "Task",
"Resource": "arn:aws:states:::codebuild:startBuild",
"Parameters": {
"ProjectName": "${var.build_name}",
"EnvironmentVariablesOverride.$": "[
{
"name": "PATH",
"type": "PLAINTEXT",
"value": "$.Path"
},
{
"name": "COMMAND",
"type": "PLAINTEXT",
"value": "plan"
}
]"
},
"Next": "Approval"
},
"Approval": {
"Type": "Task",
"Resource": "${aws_sfn_activity.manual_approval.id}",
"End": true
}
}
}
}
}
}
}
}
}
EOF
}
尝试:
- 使用上面指定的
EnvironmentVariablesOverride值:
"EnvironmentVariablesOverride.$": "[
{
"name": "PATH",
"type": "PLAINTEXT",
"value": "$.Path"
},
{
"name": "COMMAND",
"type": "PLAINTEXT",
"value": "plan"
}
]"
InvalidDefinition: Invalid State Machine Definition: 'INVALID_JSON_DESCRIPTION: Illegal unquoted character ((CTRL-CHAR, code 10)): has to be escaped using backslash to be included in string value
"EnvironmentVariablesOverride.$": States.Format('[
{
"name": "PATH",
"type": "PLAINTEXT",
"value.$": {}
},
{
"name": "COMMAND",
"type": "PLAINTEXT",
"value": "plan"
}
]', "$.Path")
InvalidDefinition: Invalid State Machine Definition: 'INVALID_JSON_DESCRIPTION: Illegal unquoted character ((CTRL-CHAR, code 10)): has to be escaped using backslash to be included in string value
"EnvironmentVariablesOverride.$": [
{
"name": "PATH",
"type": "PLAINTEXT",
"value": "$.Path"
},
{
"name": "COMMAND",
"type": "PLAINTEXT",
"value": "plan"
}
]
InvalidDefinition: Invalid State Machine Definition: 'SCHEMA_VALIDATION_FAILED: The value for the field 'EnvironmentVariablesOverride.$' must be a STRING that contains a JSONPath but was an ARRAY at /States/Parallelize Stack/Iterator/States/Deploy/Iterator/States/Plan/Parameters'
"EnvironmentVariablesOverride.$": "States.JsonToString([
{
"name": "PATH",
"type": "PLAINTEXT",
"value": "$.Path"
},
{
"name": "COMMAND",
"type": "PLAINTEXT",
"value": "plan"
}
])"
InvalidDefinition: Invalid State Machine Definition: 'INVALID_JSON_DESCRIPTION: Illegal unquoted character ((CTRL-CHAR, code 10)): has to be escaped using backslash to be included in string value
"EnvironmentVariablesOverride.$": [
{
"name": "PATH",
"type": "PLAINTEXT",
"value.$": "$.Path"
},
{
"name": "COMMAND",
"type": "PLAINTEXT",
"value": "plan"
}
]
InvalidDefinition: Invalid State Machine Definition: 'SCHEMA_VALIDATION_FAILED: The value for the field 'EnvironmentVariablesOverride.$' must be a STRING that contains a JSONPath but was an ARRAY at /States/Parallelize Stack/Iterator/States/Deploy/Iterator/States/Plan/Parameters'
【问题讨论】:
标签: amazon-web-services aws-codebuild aws-step-functions