电流设置:
我目前有一个Step函数状态机,它启动一个任务状态(它调用一个Lambda函数),然后是一个映射状态(向批处理提交作业),定义如下
状态机定义
(注:省略了区域和帐户id,并替换了虚拟变量ACCOUNT_INFO__)
{
"StartAt": "Populate EFS",
"States": {
"Populate EFS": {
"Next": "MapState",
"Type": "Task",
"InputPath": "$",
"ResultPath": "$.populate_efs_result",
"Resource": "arn:aws:states:::lambda:invoke",
"Parameters": {
"FunctionName": "arn:aws:lambda:{ACCOUNT_INFO}:function:PopulateEFSLambda",
"Payload.$": "$"
}
},
"MapState": {
"Type": "Map",
"End": true,
"ResultPath": "$.metadata.run_info",
"InputPath": "$",
"Iterator": {
"StartAt": "TaskState",
"States": {
"TaskState": {
"Type": "Task",
"End": true,
"InputPath": "$",
"ResultPath": null,
"Resource": "arn:aws:states:::batch:submitJob.sync",
"Parameters": {
"JobDefinition": "arn:aws:batch:{ACCOUNT_INFO}:job-definition/BatchJobDefCfn:1",
"JobName": "test",
"JobQueue": "arn:aws:batch:{ACCOUNT_INFO}:job-queue/BatchQueue123",
"ContainerOverrides": {
"Command": [
"sh",
"-c",
"entrypoint.pl -i /NGS/${sequencer}/${run_id}/ -s ${sample_name}"
],
"Environment": [
{
"Name": "run_id",
"Value.$": "$.run_id"
},
{
"Name": "sample_name",
"Value.$": "$.sample_name"
},
{
"Name": "sequencer",
"Value.$": "$.sequencer"
}
]
}
}
}
}
}
}
}
}状态机输入
{
"metadata": {
"run_info": [
{
"sample_name": "SAMPLE_X",
"sequencer": "Nextseq"
},
{
"sample_name": "SAMPLE_Y",
"sequencer": "Nextseq"
},
{
"sample_name": "SAMPLE_Z",
"sequencer": "Nextseq"
}
]
}
}Lambda输出(为简化而缩短)
{"populate_efs_result": {
"ExecutedVersion": "$LATEST",
"Payload": "RUN_1"}预期结果:
第二步(MapState)需要来自机器输入(sample_name和sequencer)的信息,以及Lambda函数在populate_efs_result.Payload (run_id)中返回的信息,因此都需要包含在Map状态输入的事件对象中。但是,到目前为止,在我的尝试中,映射状态的输入要么是机器输入,要么是Lambda输出,而不是两者都是。
我尝试过在Map状态定义中更改InputPath和ItemsPath参数,并尝试在Map状态定义中包括以下内容,但这些方法都不起作用:Parameters: {"new_run_id.$": "$.populate_efs_result.Payload"}。
发布于 2021-09-27 17:23:47
一个简单但不那么优雅的解决方案可能是在Map状态内移动lambda步骤。优点是来自lambda的响应将位于map状态的上下文中(如果您的lambda响应特定于map状态的每个迭代,则可能需要此响应)。缺点是您的lambda函数需要在映射的每一次迭代中执行,而lambda函数是快速而廉价的,它仍然不是一个完美的解决方案。
另一种方法是将执行输入传递给该lambda,然后扩展lambda以修改run_info数组以包括所需的数据。然后将修改后的数组作为InputPath传递到映射状态。
https://stackoverflow.com/questions/69261917
复制相似问题