如何在Step Functions中向列表参数传递自定义变量?
解决AWS Translate StartTranslationTask的TargetLanguageCodes参数问题
核心问题原因
你之前的两种写法都没正确把输入里的单个语言码转为接口要求的数组:
- 用
"TargetLanguageCodes": ["$.language"]时,$.language被当成了字面字符串传递,接口会验证这个字符串是否符合语言码规则(长度2-5),自然报错; - 用
"TargetLanguageCodes": "$.language"时,是把单个字符串直接传给了要求数组类型的参数,类型不匹配触发验证失败。
针对不同场景的解决办法
场景1:AWS Step Functions中调用
Step Functions支持用内置函数States.Array()将单个值包装成数组,修改任务参数为:
"TargetLanguageCodes": "${States.Array($.language)}"
这样会自动把输入里的language字段值(比如"de")转换成["de"]格式传给接口。
场景2:Lambda函数中调用
在代码里直接将单个语言码手动包装成数组,以Python为例:
import boto3 translate_client = boto3.client('translate') def lambda_handler(event, context): # 把输入的单个语言码转为数组 target_lang_list = [event['language']] # 调用StartTranslationTask接口 response = translate_client.start_translation_task( JobName=event['job_name'], InputDataConfig={ 'S3Uri': f"s3://{event['bucket']}/your-input-path/", 'ContentType': 'text/plain' }, OutputDataConfig={ 'S3Uri': f"s3://{event['bucket']}/your-output-path/" }, SourceLanguageCode='en', # 替换为你的源语言码 TargetLanguageCodes=target_lang_list ) return response
其他语言(比如Node.js)同理,只需把单个字符串放到数组中即可。
场景3:EventBridge目标输入转换
如果是通过EventBridge触发翻译任务,在输入转换器中用变量引用语法构造数组:
{ "TargetLanguageCodes": [ <$.language> ] }
这里的<$.language>会被EventBridge解析为输入中的language字段值,最终生成["de"]格式的数组。
内容的提问来源于stack exchange,提问作者L Xandor
相关产品推荐
相关产品推荐

