如何在Step Functions状态机中将字符串列表转为逗号分隔字符串
实现场景
- 编写Step Functions状态机,完成「Lambda拉取表名 → 触发Glue作业运行」的逻辑
- stage#1阶段:调用Lambda动态获取指定Glue数据库下的全量表清单
- 后续阶段:将获取到的所有表名转为逗号分隔的字符串格式,作为参数传入Glue作业
当前状态机定义
StartAt: GetTables GetTables: Type: Task Resource: ${get_tables_lambda_arn} Parameters: DatabaseName: ${source_glue_database_name} ResultSelector: SourceTables.$: $.tables ResultPath: $.Variables Next: RunJob RunJob: Type: Task Resource: arn:aws:states:::glue:startJobRun.sync Parameters: JobName: ${glue_job_name} Arguments: "--destination_path": ${destination_path} "--run_date_iso_8601.$": $$.Execution.StartTime "--source_database": ${source_glue_database_name} "--source_tables.$": $.Variables.SourceTables ResultPath: null Next: Finish
现存问题
Glue作业的--source_tables参数预期接收table1,table2,table3格式的逗号分隔字符串,但当前状态机直接传入的是Lambda返回的["table1","table2"]格式数组,参数格式不匹配。
解决方法
直接用Step Functions原生内置的States.ArrayJoin函数就能在状态机内部完成格式转换,完全不需要新增Lambda或者其他中间处理节点。
只需要修改RunJob节点里--source_tables的赋值逻辑,把原来直接引用数组的写法替换为内置函数调用即可:
"--source_tables.$": "States.ArrayJoin($.Variables.SourceTables, ',')"
这个函数的作用就是把输入数组的所有元素,用指定的第二个参数作为分隔符拼接成字符串,这里传逗号作为分隔符,输出结果正好是Glue作业需要的逗号分隔表名字符串格式。该函数目前在所有Step Functions工作流类型中都可直接使用,不需要额外调整运行时配置。
内容的提问来源于stack exchange,提问作者Sachin Sharma
相关产品推荐
相关产品推荐

