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

Ultimo aggiornamento: 26/01/2023

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

Breve descrizione

Puoi avviare e arrestare facilmente le istanze Amazon RDS in pochi minuti. Questa caratteristica favorisce il risparmio sui costi per i database che non devono essere sempre in esecuzione. Puoi arrestare un'istanza di database per un massimo di sette giorni. Se non avvii manualmente l'istanza database dopo sette giorni, l'istanza viene avviata automaticamente. Ciò accade affinché l'istanza non rimanga indietro sugli aggiornamenti di manutenzione richiesti per l'hardware, il sistema operativo sottostante o la versione del motore di database.

Per arrestare l'istanza RDS per più di sette giorni senza perdere gli aggiornamenti di manutenzione necessari, 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 alle istanze RDS che desideri avviare e arrestare automaticamente.

3.    Crea una funzione Lambda per avviare l'istanza database.

4.    Crea una funzione Lambda per arrestare l'istanza database.

5.    Crea una pianificazione per eseguire le seguenti operazioni: avviare un'istanza database all'inizio della finestra di manutenzione settimanale. Arrestare un'istanza database alla fine della finestra di manutenzione.

Risoluzione

Configura le autorizzazioni IAM

Crea una policy IAM per consentire a Lambda di avviare e arrestare l'istanza e recuperare le informazioni sull'istanza.

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.    In Filter-policies (Policy di filtro), inserisci il nome della policy creata nella sezione precedente. Dopo la visualizzazione, seleziona la policy. In Filter-policies (Policy di filtro), inserisci AWSLambdaBasicExecutionRole. Dopo la visualizzazione, seleziona la policy gestita AWSLambdaBasicExecutionRole.

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).

Aggiunta di tag alle istanze database

1.    Apri la console di Amazon RDS.

2.    Nel pannello di navigazione, seleziona Database.

3.    Scegli l'istanza 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 Architecture (Architettura), lascia la selezione predefinita, 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 Code source (Codice sorgente), elimina il codice di esempio e incolla quanto segue:

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

def lambda_handler(event, context):

    #Start DB Instances
    dbs = rds.describe_db_instances()
    for db in dbs['DBInstances']:
        #Check if DB instance stopped. Start it if eligible.
        if (db['DBInstanceStatus'] == 'stopped'):
            try:
                GetTags=rds.list_tags_for_resource(ResourceName=db['DBInstanceArn'])['TagList']
                for tags in GetTags:
                #if tag "autostart=yes" is set for instance, start it
                    if(tags['Key'] == 'autostart' and tags['Value'] == 'yes'):
                        result = rds.start_db_instance(DBInstanceIdentifier=db['DBInstanceIdentifier'])
                        print ("Starting instance: {0}.".format(db['DBInstanceIdentifier']))
            except Exception as e:
                print ("Cannot start instance {0}.".format(db['DBInstanceIdentifier']))
                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 Save (Salva).

Crea una funzione Lambda per arrestare le istanze di database taggate

Per creare una funzione Lambda per arrestare le istanze database taggate, consulta la sezione precedente, Crea una funzione Lambda per avviare le istanze database taggate. Segui gli stessi passaggi, ma utilizza un codice diverso per il passaggio 12.

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

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

def lambda_handler(event, context):

    #Stop DB instances
    dbs = rds.describe_db_instances()
    for db in dbs['DBInstances']:
        #Check if DB instance is not already stopped
        if (db['DBInstanceStatus'] == 'available'):
            try:
                GetTags=rds.list_tags_for_resource(ResourceName=db['DBInstanceArn'])['TagList']
                for tags in GetTags:
                #if tag "autostop=yes" is set for instance, stop it
                    if(tags['Key'] == 'autostop' and tags['Value'] == 'yes'):
                        result = rds.stop_db_instance(DBInstanceIdentifier=db['DBInstanceIdentifier'])
                        print ("Stopping instance: {0}.".format(db['DBInstanceIdentifier']))
            except Exception as e:
                print ("Cannot stop instance {0}.".format(db['DBInstanceIdentifier']))
                print(e)
                
if __name__ == "__main__":
    lambda_handler(None, None)

Esecuzione di test di funzionamento

Per le istanze database taggate che si trovano nello stato Stopped (Arrestate), completa i seguenti passaggi per eseguire il test di funzionamento:

1.    Apri l'elenco Lambda Functions (Funzioni Lambda) della .

2.    Scegli la funzione creata per avviare le istanze 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.

Creazione della pianificazione

È possibile creare delle regole per impostare la pianificazione. Ad esempio, se la finestra di manutenzione settimanale per le istanze database taggate è la domenica dalle 22:00 alle 22:30, puoi creare le seguenti regole:

  • Avviare automaticamente l'istanza database 30 minuti prima dell'inizio della finestra di manutenzione
  • Arrestare automaticamente l'istanza 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 Lambda Functions (Funzioni Lambda) della .

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 Add (Aggiungi).

Utilizza le stesse istruzioni per creare un'altra regola per arrestare automaticamente l'istanza 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 *)).


Questo articolo è stato utile?


Hai bisogno della fattura o di supporto tecnico?