Wie behebe ich Fehler bei der Bereitstellung von Netzwerkschnittstellen für Amazon ECS auf Fargate?

Lesedauer: 4 Minute
0

Ich möchte Fehler bei der Bereitstellung der Netzwerkschnittstelle für Amazon Elastic Container Service (Amazon ECS) auf AWS Fargate beheben.

Kurzbeschreibung

Sie können die folgenden Fehler erhalten, wenn Fargate zeitweise API-Probleme mit dem zugrunde liegenden Host hat:

  • Wenn der Fargate-Dienst versucht, eine elastische Netzwerkschnittstelle an die zugrunde liegende Infrastruktur anzuschließen, auf der die Aufgabe ausgeführt werden soll, kann die folgende Fehlermeldung angezeigt werden: „Timeout waiting for network interface provisioning to complete.“
  • Wenn Ihre Fargate-Aufgaben nicht gestartet werden können, weil die Elastic Network-Schnittstelle während des Status der Aufgabenbereitstellung nicht erstellt wurde, kann Ihnen die folgende Fehlermeldung angezeigt werden: „Network interface provision complete error timeout wait for network interface provision.“

**Hinweis:**Erstellen Sie manuell eine elastische Netzwerktestschnittstelle im selben Subnetz wie Ihre Fargate-Aufgabe, um festzustellen, ob Probleme auf die Erstellung des elastischen Netzwerks zurückzuführen sind. Sie können auch im AWS Service Health Dashboard nach API-Problemen suchen.

Lösung

Wenn die Fargate-Aufgabe Teil eines ECS-Dienstes ist, versucht der ECS Service Scheduler, die Aufgabe automatisch erneut zu starten.

Eine Aufgabe, die mit der RunTask-API gestartet wird, beinhaltet einen asynchronen Workflow. Wenn der Workflow erfolgreich gestartet wurde, wird ein Erfolgscode zurückgegeben. Die Aufgabe zeigt nicht an, dass sie sich im Status LÄUFT befindet. Aufgaben, die manuell mit der RunTask-API gestartet werden, erfordern einen manuellen erneuten Versuch.

Wiederholungsversuche können mithilfe von AWS-Schrittfunktionen mit einer exponentiellen Backoff- und Wiederholungslogik automatisiert werden.

Gehen Sie wie folgt vor, um eine Schrittfunktion zu erstellen, die den ECS RunTask-Vorgang synchron ausführt:

  1. Öffnen Sie die Schrittfunktions-Konsole.

2.Wählen Sie Statusmaschine erstellen.

3.Wählen Sie Ihren Workflow in Code schreiben aus.

4.Wählen Sie Standard als Typ aus. Weitere Informationen zu den verschiedenen Workflowtypen finden Sie unter Standard vs. Express-Workflows.

5.Ersetzen Sie den Standardinhalt des Abschnitts Definition durch den folgenden Code:

{
  "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.Wählen Sie Weiter aus.

7.Geben Sie einen Namen für Ihre Statusmaschine ein.

8.Wählen Sie eine Rolle aus, um die Statusmaschine auszuführen und Ressourcen miteinander zu verknüpfen. Es empfiehlt sich, eine Rolle auszuwählen, die die geringsten Rechte verwendet, und nur die Berechtigungen einzufügen, die für Ihre IAM-Richtlinien erforderlich sind.

Diese Codebeispiele zeigen die am wenigsten privilegierten Berechtigungen:

ECS-Richtlinie:

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

SNS-Richtlinie:

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

Amazon CloudWatch-Richtlinie:

{
  "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.Wählen Sie Ihre Protokollebene. Dadurch werden die erforderlichen Amazon CloudWatch Log Streams erstellt.

10.Wählen Sie Statusmaschine erstellen.

Integrieren Sie Ihre Schrittfunktion mit CloudWatch

1.Öffnen Sie die Amazon Eventbridge-Konsole.

2.Wählen Sie im Navigationsbereich Ereignisse und dann Regeln aus.

3.Wählen Sie Regel erstellen.

4.Wählen Sie Zeitplan aus. Sie können auch Ereignis wählen, wenn Sie eine ereignisgesteuerte Reaktion wünschen. Weitere Informationen finden Sie unter Eventmuster in CloudWatch Events.

5.Wählen Sie Ziel hinzufügen.

6.Wählen Sie Statusmaschine Schrittfunktion aus der Dropdown-Liste.

7.Wählen Sie die Statusmaschine aus, die Sie erstellt haben.

8.Wählen Sie eine Rolle mit den entsprechenden Berechtigungen, um die Statusmaschine auszuführen.

9.Wählen Sie Details konfigurieren und geben Sie einen Namen und eine Beschreibung für Ihre Regel ein.

10.Wählen Sie Regel erstellen.


AWS OFFICIAL
AWS OFFICIALAktualisiert vor 2 Jahren