Come posso utilizzare Instance Scheduler con CloudFormation per pianificare le istanze EC2?

8 minuti di lettura
0

Desidero utilizzare AWS Instance Scheduler con AWS CloudFormation per pianificare le istanze di Amazon Elastic Compute Cloud (Amazon EC2).

Breve descrizione

Usa i modelli CloudFormation per automatizzare l'implementazione di AWS Instance Scheduler.

Importante: se utilizzi l'Instance Scheduler per le istanze EC2 con un Amazon Elastic Block Store (Amazon EBS) crittografato, le tue istanze non potranno essere avviate. Per avviare le tue istanze devi assegnare all'Instance Scheduler un ruolo utente chiave con una policy chiave per crittografare o decrittografare i volumi EBS. La policy chiave dovrà essere aggiunta alla chiave del Servizio AWS di gestione delle chiavi (AWS KMS) per consentire al ruolo utente chiave di utilizzare questa chiave.

Risoluzione

Installa l'Instance Scheduler

Se non l'hai già fatto, segui le istruzioni per installare l'interfaccia a riga di comando (CLI) di Instance Scheduler.

Per verificare che l'installazione sia avvenuta correttamente, esegui il comando seguente:

$ scheduler-cli --version

Crea uno stack CloudFormation con il modello di Instance Scheduler

Lo stack implementa una funzione AWS Lambda, una tabella Amazon DynamoDB, una regola Amazon EventBridge e parametri personalizzati di Amazon CloudWatch.

  1. Apri la Console di gestione AWS.
  2. Apri CloudFormation con il modello di Instance Scheduler. Oppure vai al Passaggio 1. Avvia la pagina dello stack hub del pianificatore delle istanze e scegli Launch Solution.
    Nota: per impostazione predefinita, il modello viene avviato nella regione Stati Uniti orientali (Virginia settentrionale).
  3. Nella barra di navigazione, seleziona la Regione AWS in cui desideri avviare lo stack con il modello, quindi scegli Avanti.
  4. In Nome stack, assegna un nome allo stack.
  5. In Instance Scheduler TagName puoi mantenere il valore predefinito Pianifica o personalizzarlo.
  6. In Frequenza, scegli una frequenza in minuti per eseguire il pianificatore. Ad esempio, puoi scegliere 5 minuti.
    Nota: la frequenza è il numero di minuti che trascorrono prima che EventBridge avvii nuovamente la funzione Lambda per l'Instance Scheduler. Se hai un numero elevato di istanze, usa la frequenza più alta possibile per evitare limitazioni. Se la frequenza non è sufficiente per le tue esigenze, puoi modificare la proprietà Frequenza in un secondo momento.
  7. In Abilita parametri di CloudWatch, scegli .
  8. In Abilita CloudWatch Logs, scegli .
  9. (Facoltativo) In Tag avviati, inserisci state=started.
  10. (Facoltativo) In Tag interrotti, inserisci state=stopped.
  11. Per la pianificazione multi-account, fornisci il parametro Ruoli multi-account. Inserisci gli ARN per ogni ruolo degli account secondari, separati da virgole. Se non utilizzi la pianificazione multi-account, lascia il parametro vuoto.
  12. Per tutti gli altri parametri personalizza lo stack in base alle tue esigenze.
  13. Scegli Avanti.
  14. Nella pagina Opzioni scegli Avanti.
  15. Rivedi le tue impostazioni, quindi seleziona Accetto che AWS CloudFormation possa creare risorse IAM.
  16. Scegli Crea.

Crea i periodi

Per creare i periodi puoi utilizzare l'interfaccia a riga di comando Instance Scheduler CLI, la console DynamoDB o risorse personalizzate. Per ulteriori informazioni sui periodi di tempo, consulta la pagina Start and stop times.

L'esempio seguente mostra come creare istanze che:

  • Inizino alle 9:00 e si interrompano alle 17:00 dal lunedì al venerdì
  • Inizino alle 9:00 e si interrompano alle 12:00 di sabato

Per questo esempio è necessario creare due periodi. Per il tuo scenario, crea il numero appropriato di periodi.

Utilizzo dell'interfaccia a riga di comando Instance Scheduler CLI

Connettiti all'interfaccia a riga di comando Instance Scheduler CLI, quindi esegui i comandi seguenti:

$ scheduler-cli create-period --stack your\_stack\_name --region eu-west-1 --name mon-fri-9-5 --begintime 9:00 --endtime 16:59 --weekdays mon-fri  

$ scheduler-cli create-period --stack your\_stack\_name --region eu-west-1 --name sat-9-12 --begintime 9:00 --endtime 11:59 --weekdays sat

Nota: sostituisci your_stack_name con il nome dello stack che hai scelto nel passaggio 4 e eu-west-1 con la tua regione.
Utilizzo della console DynamoDB

  1. Apri la console DynamoDB.
  2. Scegli Tabelle, quindi scegli la tabella di configurazione.
    Nota: il modello di Instance Scheduler creerà automaticamente due tabelle DynamoDB: stato e configurazione. La tabella di stato memorizza lo stato delle istanze che il modello arresta e avvia. La tabella di configurazione consente di specificare i periodi e le pianificazioni per le tue esigenze.
  3. Scegli Esplora gli elementi della tabella.
  4. Quindi, scegli Crea elemento.
  5. Scegli la vista JSON, quindi utilizza il seguente modello di notazione degli oggetti JavaScript (JSON):
{  
  "type": {  
    "S": "period"  
  },  
  "name": {  
    "S": "mon-fri-9-5"  
  },  
  "begintime": {  
    "S": "9:00"  
  },  
  "endtime": {  
    "S": "16:59"  
  },  
  "weekdays": {  
    "SS": \[  
      "mon-fri"  
    \]  
  }  
}

Nota: il modello JSON precedente crea il primo periodo. Usa un modello JSON simile per il secondo periodo. Assicurati di modificare i modelli in base alle tue esigenze.

Crea una pianificazione

Per creare una pianificazione, puoi utilizzare l'interfaccia a riga di comando Instance Scheduler CLI, la console DynamoDB o risorse personalizzate.

Utilizzo dell'interfaccia a riga di comando Instance Scheduler CLI

Esegui il comando seguente:

$ scheduler-cli create-schedule --stack your\_stack\_name --name m-f9-5-sat9-12 --region eu-west-1 --periods mon-fri-9-5,sat-9-12 --timezone UTC

Utilizzo della console DynamoDB

  1. Apri la console DynamoDB.
  2. Scegli Tabelle, quindi scegli la tabella di configurazione.
  3. Scegli Esplora gli elementi della tabella.
  4. Quindi, scegli Crea elemento.
  5. Scegli la vista JSON, quindi utilizza il seguente modello JSON:
{  
  "type": {  
    "S": "schedule"  
  },  
  "name": {  
    "S": "m-f9-5-sat9-12"  
  },  
  "timezone": {  
    "S": "UTC"  
  },  
  "periods": {  
    "SS": \[  
      "mon-fri-9-5"  
    \]  
  }  
}

Aggiungi un tag all'istanza e verifica la pianificazione

Quando si utilizza uno stack di CloudFormation con Instance Scheduler, è necessario definire il parametro Instance Scheduler TagName. Il valore predefinito per questo parametro è Pianifica.

L'Instance Scheduler monitora i tag sulle istanze. Se la chiave di tag dell'istanza corrisponde al tag del pianificatore definito, l'Instance Scheduler applicherà la pianificazione impostata per il valore del tag dell'istanza. Ad esempio, la chiave di un tag è impostata su Pianifica e il valore è impostato su m-f9-5-sat9-12. In questo esempio, le istanze iniziano alle 9:00 e si interrompono alle 17:00 dal lunedì al venerdì. Le istanze iniziano anche alle 9:00 e si interrompono alle 12:00 di sabato.

Nota: le chiavi e i valori dei tag fanno distinzione tra maiuscole e minuscole. L'Instance Scheduler non interrompe l'esecuzione delle istanze se vengono avviate manualmente al di fuori del periodo di esecuzione. L'Instance Scheduler inoltre non avvia un'istanza se l'istanza viene interrotta manualmente durante il periodo di esecuzione, a meno che non venga applicata la pianificazione. Per ulteriori informazioni, consulta la pagina Schedule definitions.

Usa pianificazioni predefinite

Oltre alle pianificazioni personalizzate, puoi anche utilizzare una delle pianificazioni predefinite nella tabella di configurazione. Ad esempio, i passaggi seguenti verificano la pianificazione predefinita denominata In esecuzione:

  1. Apri la console Amazon EC2.
  2. Scegli le istanze interrotte a cui aggiungere il tag.
  3. Scegli la vista Tag, quindi scegli Gestisci tag.
  4. Scegli Aggiungi tag.
  5. In Chiave, inserisci Pianifica.
  6. In Valore, inserisci In esecuzione.
  7. Scegli Salva.
  8. Aggiorna la console Amazon EC2 e attendi l'avvio della funzione Lambda.
    Nota: quando la funzione Lambda viene avviata e viene eseguita senza errori, lo Stato dell'istanza viene visualizzato come In esecuzione, a seconda della pianificazione che stai testando. Nella console CloudWatch è possibile controllare i parametri Lambda per rilevare eventuali chiamate ed errori.
  9. Apri la console DynamoDB.
  10. Scegli Tabelle, quindi scegli la tabella di stato.
  11. Scegli Esplora gli elementi della tabella e conferma che l'istanza con il tag sia avviata. I dati sullo stato vengono memorizzati nella tabella di stato.
    Importante: è possibile che vengano addebitati costi aggiuntivi in base alla frequenza e alla durata della funzione Lambda che stai utilizzando. È inoltre possibile che vengano addebitati costi aggiuntivi per le tabelle DynamoDB o le regole EventBridge che hai creato.

Per la pianificazione multi-account: Avvia lo stack remoto negli account secondari

Per pianificare le istanze negli account secondari utilizzando l'Instance Scheduler, distribuisci il modello aws-instance-scheduler-remote di CloudFormation. Questo modello crea il ruolo che consente all'Instance Scheduler dell'account principale di gestire le istanze nell'account secondario.

Nota: è necessario fornire l'ARN del ruolo come parametro per lo stack dell'Instance Scheduler nell'account principale. Assicurati di creare o aggiornare lo stack dell'Instance Scheduler con il parametro corretto.

  1. Apri la Console di gestione AWS dell'account secondario e avvia il modello aws-instance-scheduler-remote di CloudFormation. Puoi anche scaricare il modello per un uso futuro.
    Nota: per impostazione predefinita, il modello viene avviato nella regione Stati Uniti orientali (Virginia settentrionale).
  2. Nella barra di navigazione, seleziona la Regione AWS in cui desideri avviare lo stack con il modello, quindi scegli Avanti.
  3. Nella pagina Seleziona modello, verifica di aver selezionato il modello corretto, quindi scegli Avanti.
  4. Nella pagina Specifica dettagli, assegna un nome allo stack remoto.
  5. In Parametri, rivedi e modifica il parametro dell'Account principale. Inserisci il numero dell'account principale.
  6. Scegli Avanti.
  7. Nella pagina Opzioni scegli Avanti.
  8. Rivedi le tue impostazioni, quindi seleziona Accetto che AWS CloudFormation possa creare risorse IAM.
  9. Scegli Crea.
  10. Scegli la scheda Output dello stack, quindi copia il valore CrossAccountRole.
  11. Dall'account principale scegli lo stack di CloudFormation, quindi scegli Aggiorna.
  12. Nella pagina Aggiorna stack, scegli Utilizza il modello corrente.
  13. Nel parametro Ruoli multi-account, incolla il valore CrossAccountRole.
  14. Scegli Avanti, quindi seleziona Accetto che AWS CloudFormation possa creare risorse IAM.
  15. Scegli Aggiorna stack.
AWS UFFICIALE
AWS UFFICIALEAggiornata un anno fa