Localstack部署StepFunction用DefinitionS3Location提示缺definition参数
问题原因
这是LocalStack 0.12.x版本的已知缺陷,该版本的CloudFormation组件对AWS::StepFunctions::StateMachine资源的参数校验逻辑未完全对齐AWS官方规范,仅识别Definition/DefinitionString参数,没有实现DefinitionS3Location参数的自动拉取逻辑,因此即使配置了合法的S3路径,也会触发必填参数缺失的报错。
可行解决方案
- 方案1:升级LocalStack版本
0.14.0及以上版本的LocalStack已经完成了DefinitionS3Location参数的适配,直接修改docker-compose.yml中的镜像标签为localstack/localstack:0.14.0或者更高稳定版本,重启容器后重新部署即可正常使用S3存储步函数定义的配置。 - 方案2:不升级版本的前提下,将步函数定义改为内联配置
先手动或通过脚本从S3拉取endToEndTestRunner.json的内容,填入模板的DefinitionString参数中,调整后的StateMachine配置示例如下:
也可以使用SAM CLI的打包能力,执行# Step function EndToEndTestStepFunction: Type: "AWS::StepFunctions::StateMachine" Properties: DefinitionString: | # 此处填入从S3拉取的步函数JSON定义内容 DefinitionSubstitutions: EndToEndTestLambdaFunctionArn: !GetAtt EndToEndTestLambdaFunction.Arn RoleArn: !GetAtt IAMRole.Arnsam package命令时工具会自动将DefinitionS3Location的配置转换为内联的DefinitionString,适配旧版本LocalStack的校验逻辑。 - 方案3:分步骤部署
部署前先通过aws cli拉取S3中的步函数定义存储为本地变量,再通过参数传递的方式在部署CloudFormation栈时传入Definition参数,无需修改模板本身的结构。
内容的提问来源于stack exchange,提问作者sphoenix
相关产品推荐
相关产品推荐

