Come posso risolvere gli errori di provisioning dell'interfaccia di rete per Amazon ECS in Fargate?

5 minuti di lettura
0

Desidero risolvere gli errori di provisioning dell'interfaccia di rete per Amazon Elastic Container Service (Amazon ECS) in AWS Fargate.

Breve descrizione

Quando Fargate presenta problemi intermittenti relativi all'API con l'host sottostante, puoi ricevere i seguenti errori:

  • Se il servizio Fargate tenta di collegare un'interfaccia di rete elastica all'infrastruttura sottostante su cui deve essere eseguita l'attività, puoi ricevere il seguente messaggio di errore: "Timeout in attesa del completamento del provisioning dell'interfaccia di rete."
  • Se le tue attività Fargate non possono essere avviate perché l'interfaccia di rete elastica non è stata creata durante lo stato di provisioning dell'attività, puoi ricevere il seguente messaggio di errore: "Il timeout di errore completo del provisioning dell'interfaccia di rete è in attesa del provisioning dell'interfaccia di rete."

Nota: Crea manualmente un'interfaccia di rete elastica di prova nella stessa sottorete dell'attività Fargate per determinare se eventuali problemi sono dovuti alla creazione della rete elastica. Puoi anche controllare l'la Dashboard AWS Service Health per eventuali problemi relativi alle API.

Risoluzione

Se l'attività Fargate fa parte di un servizio ECS, il pianificatore di servizi ECS tenta di riavviare automaticamente l'attività.

Un'attività avviata utilizzando l'APIRunTask implica un flusso di lavoro asincrono. Se il flusso di lavoro è stato avviato correttamente, viene restituito un codice di successo. L'attività non indica che è in stato DI ESECUZIONE. Le attività avviate manualmente con l'API RunTask richiedono un nuovo tentativo manuale.

I tentativi ripetuti possono essere automatizzati con un backoff esponenziale e una logica di ripetizione dei tentativi utilizzando AWS Step Functions.

Per creare una Step Function che esegua l'operazione ECS RunTask in modo sincrono, procedi come segue:

  1. Apri la console Step Functions.

2.    Seleziona Crea una macchina a stati.

3.    Seleziona Scrivi il tuo flusso di lavoro in codice.

4.    Seleziona Standard come Tipo. Per maggiori informazioni sui diversi tipi di flusso di lavoro, consulta Flussi di lavoro standard. e flussi di lavoro Express a confronto.

5.    Sostituisci il contenuto predefinito della sezione Definizione con il codice seguente:

{
  "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.    Seleziona Avanti.

7.    Inserisci un Nome per la tua macchina a stati.

8.    Seleziona un Ruolo per eseguire la macchina a stati e mettere in relazione le risorse. È consigliabile selezionare un ruolo che utilizzi i privilegi minimi necessari e includere solo le autorizzazioni necessarie per le policy IAM.

Questi esempi di codice mostrano le autorizzazioni con privilegi minimi:

Policy 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"
      ]
    }
  ]
}

Policy SNS:

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

Policy 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.    Seleziona il tuo Livello di log. In questo modo vengono creati i flussi di log di Amazon CloudWatch necessari.

10.    Seleziona Crea una macchina a stati.

Integrazione della funzione step con CloudWatch

1.    Apri la console Amazon Eventbridge.

2.    Nel pannello di navigazione, seleziona Eventi, quindi seleziona Regole.

3.    Seleziona Crea regola.

4.    Seleziona Pianificazione. Puoi anche selezionare Evento se desideri avere una risposta basata sugli eventi. Per maggiori informazioni, consulta Modelli di eventi in Eventi CloudWatch.

5.    Seleziona Aggiungi obiettivo.

6.    Seleziona Macchina a stati Step Functions dal menu a tendina.

7.    Seleziona la macchina a stati che hai creato.

8.    Seleziona un ruolo con le autorizzazioni appropriate per eseguire la macchina a stati.

9.    Seleziona Configura dettagli e fornisci un nome e una descrizione per la tua Regola.

10.    Seleziona Crea regola.


AWS UFFICIALE
AWS UFFICIALEAggiornata 2 anni fa