我有一个步骤函数,其中有一个要运行的 ecs 任务。
我的所有步骤函数状态均由 catch 选项监控并处理错误。
但是当一个 ecs 容器没有 IP 地址来运行容器时,就会出现此错误
taskfailedtostart
错误。我解决了 IP 问题..但我无法使用步骤函数 catch 块处理这个 taskfailedtostart
错误..
有任何处理错误的建议吗?
在
StringToJson
状态下使用Pass
,可以根据任务失败类型切换重试或捕获逻辑
请参阅下面的示例,其中它根据 StoppedReason 重试任务
{
"Version": "1.0",
"Comment": "Run AWS Fargate task",
"TimeoutSeconds": 900,
"StartAt": "Run Fargate Task",
"States": {
"Run Fargate Task": {
"Type": "Task",
"Resource": "arn:aws:states:::ecs:runTask.sync",
"Parameters": {
"LaunchType": "FARGATE",
"Cluster": "<Cluster-ARN>",
"TaskDefinition": "<TaskDef-ARN>",
"Group.$": "$$.Execution.Name",
"NetworkConfiguration": {
"AwsvpcConfiguration": {
"Subnets": [
"<Subnet-1>",
"<Subnet-2>",
"<Subnet-3>"
],
"AssignPublicIp": "ENABLED",
"SecurityGroups": [
"<SecurityGroup-ID>"
]
}
},
"Overrides": {
"ContainerOverrides": [
{
"Name": "<Container-Name>",
"Environment": [
{
"Name": "<Environment-Variable-Name-To-Override>",
"Value": "<Environment-Variable-Value-To-Override>"
}
]
}
]
}
},
"End": true,
"Catch": [
{
"ErrorEquals": [
"States.TaskFailed"
],
"Next": "Cause to Json"
}
]
},
"Cause to Json": {
"Type": "Pass",
"Parameters": {
"Cause.$": "States.StringToJson($.Cause)"
},
"Next": "Retry or Finish"
},
"Retry or Finish": {
"Type": "Choice",
"Choices": [
{
"Variable": "$.Cause.StoppedReason",
"StringMatches": "ResourceInitializationError: *",
"Next": "Run Fargate Task"
}
],
"Default": "Fail"
},
"Fail": {
"Type": "Fail"
}
}
}