¿Cómo puedo solucionar los errores de aprovisionamiento de la interfaz de red para Amazon ECS en Fargate?

5 minutos de lectura
0

Quiero solucionar los errores de aprovisionamiento de la interfaz de red para Amazon Elastic Container Service (Amazon ECS) en AWS Fargate.

Descripción breve

Puede recibir los siguientes errores cuando Fargate experimente problemas de API intermitentes con el host subyacente:

  • Si el servicio Fargate intenta conectar una interfaz de red elástica a la infraestructura subyacente en la que debe ejecutarse la tarea, puede que reciba el siguiente mensaje de error: «Timeout waiting for network interface provisioning to complete».
  • Si sus tareas de Fargate no se pueden iniciar porque la interfaz de red elástica no se creó durante el estado de aprovisionamiento de tareas, puede que reciba el siguiente mensaje de error: «Network interface provision complete error timeout wait for network interface provision».

Nota: Cree manualmente una interfaz de red elástica de prueba en la misma subred que la tarea de Fargate para determinar si algún problema se debe a la creación de la red elástica. También puede consultar AWS Service Health Dashboard para comprobar si hay problemas de API.

Resolución

Si la tarea de Fargate forma parte de un servicio de ECS, ECS Service Scheduler intentará volver a iniciar la tarea automáticamente.

Una tarea que se inicia mediante la API RunTask requiere un flujo de trabajo asincrónico. Si el flujo de trabajo se ha iniciado correctamente, aparecerá un código de correcto. La tarea no indica que se encuentre en estado EN EJECUCIÓN. Las tareas que se inician manualmente con la API RunTask requieren un reintento manual.

Los reintentos se pueden automatizar con una lógica de retroceso exponencial y de reintento mediante AWS Step Functions.

Para crear una Step Function que ejecute la operación de ECS RunTask de forma sincrónica, ejecute los siguientes pasos:

  1. Abra la consola de Step Functions.

2.    Seleccione Crear máquina de estados.

3.    Seleccione Escribir el flujo de trabajo en código.

4.    Seleccione Estándar para Tipo. Para obtener más información sobre los diferentes tipos de flujo de trabajo, consulte Flujos de trabajo estándar vs. Flujos de trabajo exprés.

5.    Sustituya el contenido predeterminado de la sección Definición por el siguiente código:

{
  "Comment": "Synchronous RunTask ",
  "StartAt": "Run Synchronous ECS Task",
  "TimeoutSeconds": 3600,
  "States": {
    "Run Synchronous ECS Task": {
      "Type": "Task",
      "Resource": "arn:aws:states:::ecs:runTask.sync",
      "Parameters": {
        "LaunchType": "FARGATE",
        "Cluster": "<ECS_CLUSTER_ARN>",
        "TaskDefinition": "<TASK_DEFINITION_ARN>",
        "NetworkConfiguration": {
          "AwsvpcConfiguration": {
            "Subnets": [
              "<SUBNET_1>",
              "<SUBNET_2>",
            ],
            "AssignPublicIp": "<ENABLED or DISABLED>"
          }
        }
      },
      "Retry": [
        {
          "ErrorEquals": [
            "States.ALL"
          ],
          "IntervalSeconds": 10,
          "MaxAttempts": 3,
          "BackoffRate": 2
        }
      ],
      "Next": "Notify Success",
      "Catch": [
        {
          "ErrorEquals": [
            "States.ALL"
          ],
          "Next": "Notify Failure"
        }
      ]
    },
    "Notify Success": {
      "Type": "Task",
      "Resource": "arn:aws:states:::sns:publish",
      "Parameters": {
        "Message": "AWS ECS Task started by Step Functions reached a RUNNING state",
        "TopicArn": "<SNS_TOPIC_ARN>"
      },
      "End": true
    },
    "Notify Failure": {
      "Type": "Task",
      "Resource": "arn:aws:states:::sns:publish",
      "Parameters": {
        "Message": "AWS ECS Task started by Step Functions failed to reach a RUNNING state",
        "TopicArn": "<SNS_TOPIC_ARN>"
      },
      "End": true
    }
  }
}

6.    Elija Siguiente.

7.    Introduzca un Nombre para su máquina de estados.

8.    Elija un Rol para ejecutar la máquina de estados y relacionar los recursos. Se recomienda seleccionar un rol que utilice los privilegios mínimos necesarios e incluir solo los permisos necesarios para sus políticas de IAM.

Estos ejemplos de código muestran los permisos con privilegios mínimos:

Política de ECS:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "ecs:RunTask"
      ],
      "Resource": [
        "arn:aws:ecs:*:123456789:task-definition/<TASK_DEFINITION>"
      ],
      "Condition": {
        "ArnLike": {
          "ecs:cluster": "arn:aws:ecs:*:123456789:cluster/<ECS "
        }
      }
    },
    {
      "Effect": "Allow",
      "Action": "iam:PassRole",
      "Resource": [
        "*"
      ],
      "Condition": {
        "StringLike": {
          "iam:PassedToService": "ecs-tasks.amazonaws.com"
        }
      }
    },
    {
      "Effect": "Allow",
      "Action": [
        "ecs:StopTask",
        "ecs:DescribeTasks"
      ],
      "Resource": "*"
    },
    {
      "Effect": "Allow",
      "Action": [
        "events:PutTargets",
        "events:PutRule",
        "events:DescribeRule"
      ],
      "Resource": [
        "arn:aws:events:us-east-1:123456788:rule/StepFunctionsGetEventsForECSTaskRule"
      ]
    }
  ]
}

Política de SNS:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "sns:Publish"
      ],
      "Resource": [
        "arn:aws:sns:us-east-1:12345678:<TOPIC>"
      ]
    }
  ]
}

Política de Amazon CloudWatch:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "logs:CreateLogDelivery",
        "logs:GetLogDelivery",
        "logs:UpdateLogDelivery",
        "logs:DeleteLogDelivery",
        "logs:ListLogDeliveries",
        "logs:PutResourcePolicy",
        "logs:DescribeResourcePolicies",
        "logs:DescribeLogGroups"
      ],
      "Resource": "*"
    }
  ]
}

9.    Elija su Nivel de registro. De esta forma, se crean las secuencias de registro de Amazon CloudWatch necesarias.

10.    Seleccione Crear máquina de estados.

Integración de Step Function con CloudWatch

1.    Abra la consola de Amazon EventBridge.

2.    En el panel de navegación, elija Eventos y, a continuación, seleccione Reglas.

3.    Seleccione Crear regla.

4.    Seleccione Programar. También puede seleccionar Evento si desea obtener una respuesta basada en eventos. Para obtener más información, consulte Patrones de eventos en los eventos de CloudWatch.

5.    Seleccione Añadir destino.

6.    Seleccione Máquina de estados de Step Function en la lista desplegable.

7.    Seleccione la máquina de estados que ha creado.

8.    Seleccione un rol con los permisos adecuados para ejecutar la máquina de estados.

9.    Seleccione Configurar detalles y especifique un nombre y una descripción para su Regla.

10.    Seleccione Crear regla.


OFICIAL DE AWS
OFICIAL DE AWSActualizada hace un año