You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AWS Step Functions中States.Format报‘未找到匹配的}’错误排查

AWS Step Functions States.Format生成ECR生命周期策略报错解决

错误核心原因

报错根源是States.Format模板的大括号冲突:States.Format默认用{}作为变量占位符,而你模板里的JSON结构自带的{}会被系统误判为占位符起始标记,导致无法匹配对应的闭合},最终抛出格式无效的错误。

解决方法

将模板中所有属于JSON结构的普通大括号,用**双大括号{{和}}**进行转义;仅保留需要插入变量的位置为单个{}。这样States.Format会把{{}}解析为普通的JSON大括号,单个{}则用于替换传入的变量值。

修改后的完整状态定义

"PutLifecyclePolicy": {
  "Type": "Task",
  "Resource": "arn:aws:states:::aws-sdk:ecr:putLifecyclePolicy",
  "Parameters": {
    "RepositoryName.$": "$.detail.requestParameters.repositoryName",
    "LifecyclePolicyText.$": "States.Format('{{ \\"rules\\": [ {{ \\"rulePriority\\": 1, \\"description\\": \\"Retain only last N images\\", \\"selection\\": {{ \\"tagStatus\\": \\"any\\", \\"countType\\": \\"imageCountMoreThan\\", \\"countNumber\\": {} }}, \\"action\\": {{ \\"type\\": \\"expire\\" }} }} ] }}', $.expireOldImages.expireOldImages)"
  },
  "Retry": [
    {
      "ErrorEquals": ["ThrottlingException", "Ecr.ThrottlingException", "ServiceUnavailable", "RequestLimitExceeded"],
      "IntervalSeconds": 2,
      "MaxAttempts": 4,
      "BackoffRate": 2
    }
  ],
  "Next": "SendMessageToSQS"
}

额外排查方向

  • 确认占位符数量与传入参数数量一致:你当前使用1个占位符对应1个变量,符合要求;若数量不匹配也会触发格式错误。
  • 验证变量值类型:ECR的countNumber要求为整数,硬编码10是合法的,转义后需确保变量能正确插入到JSON结构中。

内容的提问来源于stack exchange,提问作者Naveen M

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 14:25:12