Come posso arrestare un cluster Amazon Aurora per più di sette giorni?

7 minuti di lettura
0

Desidero arrestare un Amazon Relational Database Service (cluster Amazon Aurora) per un periodo superiore ai sette giorni.

Breve descrizione

Puoi avviare e arrestare facilmente i cluster Amazon Aurora in pochi minuti. Questa caratteristica supporta il risparmio sui costi per i database che non devono essere sempre in esecuzione. Puoi arrestare un cluster di database (DB) per un massimo di sette giorni. Se non avvii manualmente il cluster di database dopo sette giorni, questo viene avviato automaticamente. Ciò accade in modo che il cluster non rimanga indietro rispetto agli aggiornamenti di manutenzione necessari.

Per arrestare il cluster Aurora per più di sette giorni senza perdere gli aggiornamenti di manutenzione richiesti, effettua le seguenti operazioni:

1.    Configura le autorizzazioni AWS Identity Access Management (IAM) per permettere ad AWS Lambda di effettuare le seguenti operazioni: avvia l'istanza. Arrestare l'istanza. Recupera le informazioni sull'istanza.

2.    Aggiungi tag per i cluster Aurora che desideri avviare e arrestare automaticamente.

3.    Crea una funzione Lambda per avviare il cluster.

4.    Crea una funzione Lambda per arrestare il cluster.

5.    Crea una pianificazione per eseguire le seguenti operazioni: avvia il cluster Aurora all'inizio della finestra di manutenzione settimanale. Arresta il cluster Aurora alla fine della finestra di manutenzione.

Risoluzione

Configura le autorizzazioni IAM

Crea una policy IAM per consentire a Lambda di avviare e arrestare il cluster e recuperarvi le informazioni.

1.    Apri la console IAM.

2.    Nel riquadro di navigazione, seleziona Policies (Policy).

3.    Scegli Crea policy.

4.    Scegli la scheda JSON.

5.    Copia la seguente policy e incollala nella scheda JSON per concedere le autorizzazioni IAM richieste:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "VisualEditor0",
      "Effect": "Allow",
      "Action": [
        "rds:StartDBCluster",
        "rds:StopDBCluster",
        "rds:ListTagsForResource",
        "rds:DescribeDBInstances",
        "rds:StopDBInstance",
        "rds:DescribeDBClusters",
        "rds:StartDBInstance"
      ],
      "Resource": "*"
    }
  ]
}

6.    Scegli Successivo: tag.

7.    (Facoltativo) Per aggiungere un tag, scegli Aggiungi tag, quindi inserisci i valori appropriati per i campi Chiave e Valore - facoltativi.

8.    Scegli Successivo: verifica.

9.    Nella pagina Verifica policy, per Nome, inserisci il nome della policy. Consulta la sezione Riepilogo per vedere le autorizzazioni concesse dalla tua policy.

10.    Scegli Crea policy.

Per ulteriori informazioni, consulta Creazione di criteri nella scheda JSON.

Crea un ruolo IAM e quindi allega le policy richieste

1.    Apri la console IAM.

2.    Nel pannello di navigazione, scegli Ruoli.

3.    Scegli Crea ruolo.

4.    Per Seleziona il tipo di entità attendibile, scegli Servizio AWS.

5.    In Oppure seleziona un servizio per visualizzarne i casi d'uso, seleziona Lambda.

6.    Seleziona Successivo: autorizzazioni.

7.    Per le Policy di filtro, inserisci il nome della policy creata nella sezione precedente. Quando viene visualizzata la policy creata, seleziona la policy. Per le Policy di filtro, inserisci AWSLambdaBasicExecutionRole. Quando viene visualizzata la policy gestita AWSLambdaBasicExecutionRole creata, seleziona la policy.

8.    Seleziona Successivo: Tag.

9.    (Facoltativo) Per aggiungere un tag, inserisci i valori appropriati per i campi Chiave e Valore (facoltativo).

10.    Seleziona Successivo: esamina.

11.    Nella pagina Crea ruolo, per Nome ruolo, inserisci il nome del ruolo che stai creando.

12.    Scegli Crea ruolo.

Per ulteriori informazioni, consulta Creazione di un ruolo per un servizio AWS (console).

Aggiungi tag per i cluster di database

1.    Apri la console di Amazon RDS.

2.    Nel pannello di navigazione, seleziona Database.

3.    Seleziona il cluster di database che desideri avviare e arrestare automaticamente.

4.    Nella sezione dettagli, scorri verso il basso fino alla sezione Tag.

5.    Nella scheda Tag, scegli Aggiungi. Per Chiave di tag, inserisci avvio automatico. Per Valore, inserisci . Scegli Aggiungi per salvare le modifiche.

6.    Scegli di nuovo Aggiungi. Per Chiave di tag, inserisci arresto automatico. Per Valore, inserisci . Scegli Aggiungi per salvare le modifiche.

Per ulteriori informazioni, consulta Aggiunta, elenco e rimozione di tag.

Crea una funzione Lambda per avviare le istanze database taggate

1.    Apri la console Lambda.

2.    Nel pannello di navigazione, scegli Funzioni.

3.    Scegli Crea funzione.

4.    Seleziona Crea da zero.

5.    Per Nome funzione, inserisci il nome della funzione.

6.    Per Tempo di esecuzione, seleziona Python 3.7.

7.    Per Architettura, lascia la selezione di default di x86_64.

7.    Espandi Modifica ruolo di esecuzione predefinito.

8.    Per Ruolo di esecuzione, scegli Utilizza un ruolo esistente.

9.    Per Ruolo esistente, seleziona il ruolo IAM creato in precedenza.

10.    Scegli Crea funzione.

11.    Scegli la scheda Codice.

12.    Nell'editor Codice sorgente, elimina il codice di esempio e incolla quanto segue:

import boto3
rds = boto3.client('rds')

def lambda_handler(event, context):

    #Start DB clusters
    dbs = rds.describe_db_clusters()
    for db in dbs['DBClusters']:
        #Check if DB cluster stopped. Start it if eligible.
        if (db['Status'] == 'stopped'):
            doNotStart=1
            try:
                GetTags=rds.list_tags_for_resource(ResourceName=db['DBClusterArn'])['TagList']
                for tags in GetTags:
                #if tag "autostart=yes" is set for cluster, start it
                    if(tags['Key'] == 'autostart' and tags['Value'] == 'yes'):
                        result = rds.start_db_cluster(DBClusterIdentifier=db['DBClusterIdentifier'])
                        print ("Starting cluster: {0}.".format(db['DBClusterIdentifier']))
                if(doNotStart == 1):
                    doNotStart=1
            except Exception as e:
                print ("Cannot start cluster {0}.".format(db['DBClusterIdentifier']))
                print(e)
                

if __name__ == "__main__":
    lambda_handler(None, None)

13.    Scegli File, scegli Salva, quindi scegli Implementa.

15.    Scegli la scheda Configurazione, scegli Configurazione generale, quindi scegli Modifica.

16.    In Timeout, effettua le seguenti operazioni: per min, seleziona 0. Per sec, seleziona 10. 17.    Scegli Salva.

Crea una funzione Lambda per arrestare le istanze di database taggate

Utilizza le istruzioni nella sezione precedente Crea una funzione Lambda per avviare i cluster di database taggati e arrestare i cluster di database taggati. È necessario apportare le seguenti modifiche:

Nell'editor Codice sorgente, elimina il codice di esempio e incolla quanto segue:

import boto3
rds = boto3.client('rds')

def lambda_handler(event, context):

    #Stop DB clusters
    dbs = rds.describe_db_clusters()
    for db in dbs['DBClusters']:
        #Check if DB cluster started. Stop it if eligible.
        if (db['Status'] == 'available'):
            doNotStop=1
            try:
                GetTags=rds.list_tags_for_resource(ResourceName=db['DBClusterArn'])['TagList']
                for tags in GetTags:
                #if tag "autostop=yes" is set for cluster, stop it
                    if(tags['Key'] == 'autostop' and tags['Value'] == 'yes'):
                        result = rds.stop_db_cluster(DBClusterIdentifier=db['DBClusterIdentifier'])
                        print ("Stopping cluster: {0}.".format(db['DBClusterIdentifier']))
                if(doNotStop == 1):
                    doNotStop=1
            except Exception as e:
                print ("Cannot stop cluster {0}.".format(db['DBClusterIdentifier']))
                print(e)
                

if __name__ == "__main__":
    lambda_handler(None, None)

Esegui test di funzionamento

Supponi che le istanze database taggate siano nello stato Arrestato. Per eseguire il test di funzionamento, effettua le seguenti operazioni:

1.    Apri l'elenco Funzioni Lambda.

2.    Scegli la funzione creata per avviare i cluster di database.

3.    Scegli Azioni, quindi fai clic su Test.

4.    Nella scheda Test, per Nome, inserisci il nome del tuo evento.

5.    Scegli Salva modifiche, quindi scegli Test.

Crea il programma

Supponi che la finestra di manutenzione settimanale per i cluster di database taggati sia domenica 22:00-22:30. Puoi impostare una pianificazione creando due regole per quanto segue:

  • Avvia automaticamente il cluster di database 30 minuti prima dell'inizio della finestra di manutenzione
  • Arresta automaticamente il cluster di database 30 minuti dopo il termine della finestra di manutenzione

Per creare la regola per avviare automaticamente l'istanza di database 30 minuti prima della finestra di manutenzione, effettua le seguenti operazioni:

1.    Apri l'elenco Funzioni Lambda.

2.    Scegli la funzione creata per avviare le istanze di database.

3.    In Panoramica funzioni, scegli Aggiungi attivazione.

4.    Seleziona EventBridge (Eventi CloudWatch), quindi seleziona Crea una nuova regola.

5.    Per Nome regola, inserisci il nome della regola che desideri creare.

6.    Per Pianifica espressione, aggiungi un'espressione cron per la pianificazione automatica (Esempio: cron(30 21 ? * SUN *)).

7.    Scegli Aggiungi.

Utilizza le stesse istruzioni per creare un'altra regola per arrestare automaticamente il cluster di database 30 minuti dopo la finestra di manutenzione. Assicurati di modificare di conseguenza il nome della regola e l'espressione cron per la pianificazione automatica (Esempio: cron (00 23? * SOLE *)).


Informazioni correlate

Come posso arrestare un'istanza Amazon RDS per più di sette giorni?

AWS UFFICIALE
AWS UFFICIALEAggiornata un anno fa