【以下的问题经过翻译处理】 我有一个具有以下 3 个状态的状态机工作流:
我的工作流程截图
- 将字符串列表(SageMaker 端点名称)添加到原始输入的“Pass”块。 (这个“Pass”将被替换为调用 DynamoDB 以在未来获取列表。)
- 使用 map 从上述结果中调用由数组(或列表)指定的 SageMaker 端点。
- 将上述“Map”的结果发送到 Lambda 函数并退出工作流程。
这是 .asl.json 中的整个工作流程,灵感来自 this aws blog。
{
"Comment": "A description of my state machine",
"StartAt": "Pass",
"States": {
"Pass": {
"Type": "Pass",
"Next": "InvokeEndpoints",
"Result": {
"Endpoints": [
"sagemaker-endpoint-1",
"sagemaker-endpoint-2",
"sagemaker-endpoint-3"
]
},
"ResultPath": "$.EndpointList"
},
"InvokeEndpoints": {
"Type": "Map",
"Next": "Post-Processor Lambda",
"Iterator": {
"StartAt": "InvokeEndpoint",
"States": {
"InvokeEndpoint": {
"Type": "Task",
"End": true,
"Parameters": {
"Body": "$.InvocationBody",
"EndpointName": "$.EndpointName"
},
"Resource": "arn:aws:states:::aws-sdk:sagemakerruntime:invokeEndpoint",
"ResultPath": "$.InvocationResult"
}
}
},
"ItemsPath": "$.EndpointList.Endpoints",
"MaxConcurrency": 300,
"Parameters": {
"InvocationBody.$": "$.body.InputData",
"EndpointName.$": "$$.Map.Item.Value"
},
"ResultPath": "$.InvocationResults"
},
"Post-Processor Lambda": {
"Type": "Task",
"Resource": "arn:aws:states:::lambda:invoke",
"Parameters": {
"Payload.$": "$",
"FunctionName": "arn:aws:lambda:<my-region>:<my-account-id>:function:<my-lambda-function-name>:$LATEST"
},
"Retry": [
{
"ErrorEquals": [
"Lambda.ServiceException",
"Lambda.AWSLambdaException",
"Lambda.SdkClientException"
],
"IntervalSeconds": 2,
"MaxAttempts": 6,
"BackoffRate": 2
}
],
"End": true
}
}
}
从工作流程中可以看出,我正在遍历前一个“Pass”块中的列表,并将它们映射到“Map”块内进行迭代,并尝试在每次迭代中访问“Map”块的参数。迭代适用于迭代器的数量,但我无法访问迭代内的参数。我收到此错误:
{
"resourceType": "aws-sdk:sagemakerruntime",
"resource": "invokeEndpoint",
"error": "SageMakerRuntime.ValidationErrorException",
"cause": "1 validation error detected: Value '$.EndpointName' at 'endpointName' failed to satisfy constraint: Member must satisfy regular expression pattern: ^[a-zA-Z0-9](-*[a-zA-Z0-9])* (Service: SageMakerRuntime, Status Code: 400, Request ID: ed5cad0c-28d9-4913-853b-e5f9ac924444)"
}
因此,我认为该错误是因为“$.EndpointName”未填充相关值。我该如何避免这种情况?
但是,当我打开失败的执行并从 graph-inspector 检查 InvokeEndpoint 块时,输入的是我所期望的,并且在 JSON-Paths 之上获取参数应该有效,但它们不起作用。
图形检查器的屏幕截图
是什么导致了错误,我该如何解决?