Come gestisco gli avvisi di terminazione Spot nelle attività AWS Fargate Spot?

Ultimo aggiornamento: 14/04/2022

Voglio sapere come gestire gli avvisi di terminazione Spot nelle attività AWS Fargate Spot.

Breve descrizione

Puoi utilizzare Fargate Spot per eseguire attività Amazon Elastic Container Service (Amazon ECS) con tolleranza alle interruzioni. Un avviso di terminazione è un avviso di due minuti che ricevi prima della terminazione dell'attività Fargate Spot. Questo avviso ti aiuta a gestire le interruzioni Spot dando alle tue applicazioni il tempo necessario per prepararsi a un arresto regolare. L'avviso di terminazione viene creato non appena l'attività Fargate Spot viene contrassegnata per la terminazione. L'avviso indica l'ora in cui l'attività Fargate Spot in esecuzione verrà terminata. L'avviso viene inviato come evento di modifica dello stato dell'attività ad Amazon EventBridge e come segnale SIGTERM all'attività in esecuzione.

Per assicurarti che i container su Fargate Spot si chiudano correttamente prima che l'attività si interrompa, specifica un valore stopTimeout pari o inferiore a 120 secondi nella definizione del container utilizzata dall'attività. Specificando un valore stopTimeout, il container ha il tempo di arrestarsi normalmente. Trascorso questo periodo, viene forzata la chiusura del container.

Nota: è possibile specificare un valore massimo di 120 secondi per stopTimeout. Se non si specifica alcun valore per questo parametro, viene utilizzato il valore predefinito di 30 secondi.

Quando il segnale di terminazione viene ricevuto sui servizi Amazon ECS utilizzando Fargate Spot, il pianificatore del servizio utilizza i valori minimumHealthyPercent e maximumPercent per determinare se è disponibile capacità aggiuntiva. Se la capacità è disponibile, il pianificatore del servizio tenta di avviare attività aggiuntive su Fargate Spot. Tuttavia, se il pianificatore del servizio non riesce a trovare la capacità per le nuove attività, le vecchie attività vengono terminate allo scadere della durata di stopTimeout.

Considera quanto segue quando usi Fargate Spot con un bilanciatore del carico:

  • Le attività eseguite come FARGATE_SPOT potrebbero non essere annullate dal gruppo di destinazione di un bilanciatore del carico fino a quando l'attività non passa allo stato STOPPED.
  • Con FARGATE_SPOT, hai solo due minuti per annullare la registrazione del gruppo di destinazione prima che l'attività venga arrestata. Ciò significa che è necessario impostare il ritardo di annullamento della registrazione per tutti i gruppi di destinazione associati a FARGATE_SPOT su un valore inferiore a due minuti.

Risoluzione

Quando la capacità non è disponibile o viene ripristinata per Fargate Spot, il pianificatore del servizio ECS non può avviare nuove attività e termina le attività esistenti dopo aver fornito un preavviso di due minuti. Tuttavia, questi eventi non vengono segnalati nella console di Amazon ECS.

Poiché gli eventi di ECS vengono consegnati a EventBridge quasi in tempo reale, è consigliabile scrivere semplici regole per indicare gli eventi di tua scelta e le azioni automatiche che devono essere intraprese quando un evento corrisponde a una regola. Questo articolo tratta le regole EventBridge per i seguenti casi d'uso:

  • Un'attività FARGATE_SPOT è stata interrotta a causa di un'interruzione di Fargate Spot.
  • Non è possibile inserire un'attività FARGATE_SPOT a causa dell'indisponibilità della capacità Fargate Spot.

Un'attività FARGATE_SPOT è stata interrotta a causa di un'interruzione di Fargate Spot

Di seguito è riportato un frammento di un evento di modifica dello stato dell'attività che visualizza il motivo dell'arresto e il codice di arresto per un'interruzione di Fargate Spot.

{
  "version": "0",
  "id": "a99d3f53-4a7c-4153-a1a5-48957fc83b8f",
  "detail-type": "ECS Task State Change",
  "source": "aws.ecs",
  "account": "1111222233334444",
  "resources": [
    "arn:aws:ecs:ap-southeast-2:1111222233334444:task/4be29e5b-b05c-42a2-a596-be62090eea9b"
  ],
  "detail": {
    "clusterArn": "arn:aws:ecs:ap-southeast-2:1111222233334444:cluster/default",
    "createdAt": "2022-02-25T10:13:08.455Z",
    "desiredStatus": "STOPPED",
    "lastStatus": "RUNNING",
    "stoppedReason": "Your Spot Task was interrupted.",
    "stopCode": "TerminationNotice",
    "taskArn": "arn:aws:ecs:ap-southeast-2:1111222233334444:task/4be29e5b-b05c-42a2-a596-be62090eea9bEXAMPLE",
    ...
  }
}

Tieni presente che stopCode viene indicato come TerminationNotice quando un'attività viene arrestata a causa di un'interruzione di Fargate Spot. Ciò significa che puoi creare una regola EventBridge che invii un avviso Amazon Simple Notification Service (Amazon SNS) ogni volta che un'attività FARGATE_SPOT viene arrestata a causa del codice di arresto TerminationNotice.

Esegui le seguenti operazioni:

  1. Crea un argomento Amazon SNS.
  2. Crea una regola EventBridge per questo caso d'uso.

Per creare una regola EventBridge per questo caso d'uso, procedi come segue:

1.    Apri la console di Amazon EventBridge.

2.    Nel pannello di navigazione, scegli Roles (Ruoli).

3.    Scegli Create rule (Crea regola).

4.    Specifica un nome e una descrizione per la regola.

5.    Per Event bus (Bus di eventi), seleziona AWS default event bus (Bus di eventi predefinito di AWS).

6.    Per Rule type (Tipo di regola), seleziona Rule with an event pattern (Regola con un modello di evento).

7.    Sceglш Next (Avanti).

8.    Per Event source (Origine evento), seleziona AWS services (Servizi AWS).

9.    Per Event pattern (Modello evento), scegli Custom patterns (JSON editor) (Modelli personalizzati, editor JSON) e aggiungi il seguente modello:

{
  "source": [
    "aws.ecs"
  ],
  "detail-type": [
    "ECS Task State Change"
  ],
  "detail": {
    "stopCode": [
      "TerminationNotice"
    ],
    "clusterArn": [
      "arn:aws:ecs:exampleregion:1111222233334444:cluster/examplecluster"
    ]
  }
}

10.    Sceglш Next (Avanti).

11.    Per Target types (Tipi di destinazione), seleziona AWS service (Servizio AWS).

12.    Nel campo Select a target (Seleziona una destinazione), seleziona SNS topic (Argomento SNS).

13.    Per Topic (Argomento), seleziona l'argomento SNS creato.

14.    Sceglш Next (Avanti).

15.    Nella pagina configure tags - optional (configura tag - opzionale), scegli Next (Avanti).

16.    Esamina le opzioni e scegli Create rule (Crea regola).

Non è possibile inserire un'attività FARGATE_SPOT a causa dell'indisponibilità della capacità Fargate Spot

Di seguito è riportato un frammento dell'evento di errore di posizionamento dell'attività di servizio che si è verificato nelle condizioni:

  • L'attività stava tentando di utilizzare il provider di capacità FARGATE_SPOT.
  • Il pianificatore del servizio non è stato in grado di acquisire capacità Fargate Spot.
{
  "version": "0",
  "id": "403b98b2-616e-4ec7-8dff-b2cba8d5bf64",
  "detail-type": "ECS Service Action",
  "source": "aws.ecs",
  "account": "1111222233334444",
  "time": "2022-02-25T14:56:32.756Z",
  "region": "ap-southeast-2",
  "resources": [
    "arn:aws:ecs:ap-southeast-2:1111222233334444:service/default/servicetest"
  ],
  "detail": {
    "eventType": "ERROR",
    "eventName": "SERVICE_TASK_PLACEMENT_FAILURE",
    "clusterArn": "arn:aws:ecs:ap-southeast-2:1111222233334444:cluster/default",
    "capacityProviderArns": [
      "arn:aws:ecs:ap-southeast-2:1111222233334444:capacity-provider/FARGATE_SPOT"
    ],
    "reason": "RESOURCE:FARGATE",
    "createdAt": "2022-02-25T14:21:04.163Z"
  }
}

Quando non è possibile inserire un'attività a causa della capacità Fargate Spot non disponibile, eventName viene indicato come SERVICE_TASK_PLACEMENT_FAILURE. Ciò significa che è possibile creare una regola EventBridge che invii un avviso SNS ogni volta che non è possibile inserire un'attività FARGATE_SPOT.

Esegui le seguenti operazioni:

1.    Crea un argomento SNS.

2.    Crea una regola Amazon EventBridge per questo caso d'uso. A tale scopo, utilizza le istruzioni fornite nella sezione Un'attività FARGATE_SPOT è stata interrotta a causa di un'interruzione di Fargate Spot, ad eccezione della seguente modifica:

Per Event pattern (Modello evento), scegli Custom patterns (JSON editor) (Modelli personalizzati, editor JSON) e aggiungi il seguente modello:

{
  "source": [
    "aws.ecs"
  ],
  "detail-type": [
    "ECS Deployment State Change"
  ],
  "detail": {
    "eventName": [
      "SERVICE_TASK_PLACEMENT_FAILURE"
    ],
    "clusterArn": [
      "arn:aws:ecs:example-region:1111222233334444:cluster/example-cluster"
    ],
    "reason": [
      "RESOURCE:FARGATE"
    ]
  }
}

Questo articolo è stato utile?


Hai bisogno di supporto tecnico o per la fatturazione?