Come posso ritardare la chiusura di dimensionamento automatico di istanze Amazon EC2 non integre e risolverle?

5 minuti di lettura
0

La mia istanza Amazon Elastic Compute Cloud (Amazon EC2) è stata contrassegnata come non integra ed è stata spostata allo stato "Termine Dimensionamento automatico". Quindi, la mia istanza Amazon EC2 si è interrotta prima che potessi determinare la causa del problema.

Breve descrizione

Aggiungi un hook del ciclo di vita al tuo gruppo Dimensionamento automatico AWS per spostare le istanze dallo stato Chiusura allo stato In attesa di chiusura. In questo stato, puoi accedere alle istanze prima che vengano chiuse e quindi risolvere il motivo per cui sono state contrassegnate come non integre.

Per impostazione predefinita, un'istanza rimane nello stato ** In attesa di chiusura** per 3600 secondi (1 ora). Per aumentare il tempo, usa il parametro ** heartbeat-timeout** nella chiamata API put-lifecycle-hook. Il tempo massimo in cui è possibile mantenere un'istanza nello stato In attesa di chiusura è di 48 ore o 100 volte il timeout dell'heartbeat, in base a quale dei due valori è inferiore.

Risoluzione

**Nota:**Se ricevi errori durante l'esecuzione dei comandi dell’Interfaccia della linea di comando AWS (AWS CLI), assicurati di utilizzare la versione più recente di AWS CLI.

Utilizza i seguenti passaggi per configurare un hook del ciclo di vita utilizzando AWS CLI. Quindi, crea l'argomento Amazon Simple Notification Service (Amazon SNS) necessario e le autorizzazioni AWS Identity e Access Management (IAM).

In alternativa, puoi configurare un hook del ciclo di vita utilizzando la Console di gestione AWS. Quindi, fai riferimento a quanto segue per gestire gli argomenti di Amazon SNS e le autorizzazioni IAM nella console:

Crea un argomento Amazon SNS

  1. Crea un argomento a cui AWS Auto Scaling può inviare notifiche sul ciclo di vita. Per esempio il comando create-topic per creare l'argomento AsNotifications:
$ aws sns create-topic --name ASNotifications

Viene emesso un Amazon Resource Name (ARN) simile al seguente:

"TopicArn": "arn:aws:sns:us-west-2:123456789012:ASNotifications"
  1. Crea un abbonamento per l'argomento. È necessario disporre di un abbonamento per ricevere il LifecycleActionToken necessario per estendere il timeout di heartbeat dello stato in attesa di chiusura o completare l'azione del ciclo di vita. L'esempio seguente utilizza il comando abbonati per creare un abbonamento che utilizza il protocollo e-mail (SMTP) con l'indirizzo e-mail dell'endpoint user@amazon.com.
$ aws sns subscribe --topic-arn arn:aws:sns:us-west-2:123456789012:ASNotifications --protocol email --notification-endpoint user@amazon.com

Configurazione delle autorizzazioni IAM

Le autorizzazioni IAM vengono configurate creando un ruolo IAM che concede al servizio Dimensionamento automatico AWS le autorizzazioni per l'invio all'argomento SNS. Per completare questa operazione, crea un documento di testo con la normativa appropriata. Quindi, fai riferimento al file nel comando create-role.

  1. Usa un editor di testo (come vi) per creare il documento di testo:
$ sudo vi assume-role.txt
  1. Incolla quanto segue nel documento di testo, quindi salva il file.
{
  "Version": "2012-10-17",
  "Statement": [{
      "Sid": "",
      "Effect": "Allow",
      "Principal": {
        "Service": "autoscaling.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}
  1. Usa il comando aws iam create-role per creare il ruolo IAM AS-Lifecycle-hook-role dalla policy salvata in assume-role.txt:
$ aws iam create-role --role-name AS-Lifecycle-Hook-Role --assume-role-policy-document file://assume-role.txt

L'output contiene l'ARN per il ruolo. Assicurati di salvare sia l'ARN del ruolo IAM che l'argomento SNS.

  1. Aggiungi autorizzazioni al ruolo per consentire a Dimensionamento automatico AWS di inviare notifiche SNS quando si verifica un evento hook del ciclo di vita. Il seguente esempio utilizza il comando attach-role-policy per collegare la policy gestita AutoScalingNotificationAccessRole al ruolo IAM as-Lifecycle-hook-role:
$ aws iam attach-role-policy --role-name AS-Lifecycle-Hook-Role --policy-arn arn:aws:iam::aws:policy/service-role/AutoScalingNotificationAccessRole

Questa politica gestita concede le seguenti autorizzazioni:

{
  "Version": "2012-10-17",
  "Statement": [{
      "Effect": "Allow",
      "Resource": "*",
      "Action": [
        "sqs:SendMessage",
        "sqs:GetQueueUrl",
        "sns:Publish"
      ]
    }
  ]
}

**Importante:**La policy gestita da AWS AutoScalingNotificationAccessRole consente al servizio di Dimensionamento automatico AWS di effettuare chiamate a tutti gli argomenti e le code SNS. Per limitare l'accesso di Dimensionamento automatico AWS solo ad argomenti o code SNS specifici, utilizza come esempio la seguente policy.

{
  "Version": "2012-10-17",
  "Statement": [{
      "Effect": "Allow",
      "Resource": "arn:aws:sns:us-west-2:123456789012:ASNotifications",
       "Action": [
         "sqs:SendMessage",
         "sqs:GetQueueUrl",
         "sns:Publish"
       ]
     }
   ]
}

Configurazione del ciclo di vita

Quindi, usa il comando put-lifecycle-hook per configurare il ciclo di vita:

aws autoscaling put-lifecycle-hook --lifecycle-hook-name AStroublshoot --auto-scaling-group-name MyASGroup
        --lifecycle-transition autoscaling:EC2_INSTANCE_TERMINATING
        --notification-target-arn arn:aws:sns:us-west-2:123456789012:ASNotifications
        --role-arn arn:aws:iam::123456789012:role/AS-Lifecycle-Hook-Role 

Assicurati di sostituire il nome del tuo gruppo AWS Auto Scaling, l'ARN di destinazione SNS e il ruolo IAM ARN prima di eseguire il comando.

Questo comando:

  • Assegna un nome al ciclo di vita (aStroubleshoot)
  • Identifica il gruppo Dimensionamento automatico AWS associato al lifecycle hook (MyASGroup)
  • Configura l'hook per la fase del ciclo di vita della terminazione dell'istanza (EC2\ _INSTANCE\ _TERMINATING)
  • Specifica l'ARN dell'argomento SNS (arn:aws:sns:us-west- 2:123456789012:asNotifications)
  • Specifica l'ARN del ruolo IAM (arn:aws:iam: :123456789012:role/as-lifecycle-hook-role)

Testa il ciclo di vita

Per testare il ciclo di vita, seleziona un'istanza e quindi usa gruppo terminate-instance-in-auto-scaling per terminare l'istanza. Questo costringe il Dimensionamento automatico AWS a terminare l'istanza, come quando l'istanza diventa non integra. Dopo che l'istanza si è spostata su Chiusura:stato di attesa, puoi mantenere la tua istanza in questo stato selezionando record-lifecycle-action-heartbeat. Oppure, consenti la terminazione della chiusura selezionando complete-lifecycle-action.

aws autoscaling complete-lifecycle-action --lifecycle-hook-name my-lifecycle-hook
        --auto-scaling-group-name MyASGroup --lifecycle-action-result CONTINUE
        --instance-id i-0e7380909ffaab747

Informazioni correlate

Amazon EC2 Dimensionamento ciclo di vita

AWS UFFICIALE
AWS UFFICIALEAggiornata 3 anni fa