Come posso usare una funzione Lambda per interrompere un'istanza Amazon RDS per più di sette giorni?

6 minuti di lettura
0

Desidero utilizzare AWS Lambda per interrompere un Amazon Relational Database Service (Amazon RDS) per un periodo superiore ai sette giorni.

Breve descrizione

Per impostazione predefinita, puoi interrompere un'istanza del database Amazon RDS per un massimo di sette giorni alla volta. Dopo sette giorni, l'istanza si riavvia in modo da non perdere alcun aggiornamento di manutenzione.

Per interrompere l'istanza per più di sette giorni, puoi utilizzare Step Functions per automatizzare il flusso di lavoro senza perdere una finestra di manutenzione.

Nota: Per una risoluzione alternativa, vedi Come posso utilizzare Step Functions per interrompere un'istanza Amazon RDS per più di sette giorni?

Risoluzione

Configurazione delle autorizzazioni IAM

Crea una policy AWS Identity and Access Management (IAM) per consentire a Lambda di avviare e arrestare l'istanza e recuperare informazioni sull'istanza.

1.    Apri la console IAM.

2.    Nel pannello di navigazione, scegli Politiche.

3.    Scegli Crea Politica.

4.    Scegli la scheda JSON.

5.    Per concedere le autorizzazioni IAM richieste, inserisci la seguente politica nella scheda JSON:

{
    "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 Avanti: Tag.

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

8.    Scegli Avanti: Revisione.

9.    Nella pagina Politica di revisione, per ** Nome**, inserisci il nome della tua politica. Consulta la sezione Riepilogo per vedere le autorizzazioni concesse dalla tua politica.

10.    Scegli Crea politica.

Per ulteriori informazioni, consulta Creazione di politiche utilizzando l'editor JSON.

Crea un ruolo IAM e quindi allega le policy richieste

1.    Apri la console IAM.

2.    Nel riquadro di navigazione, scegliRuoli.

3.    Scegli Crea ruolo.

4.    Per Seleziona il tipo di entità affidabile, seleziona il servizio AWS.

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

6.    Scegli Avanti: Autorizzazioni.

7.    In Politiche di filtro, inserisci il nome della politica che hai creato nella sezione precedente. Dopo la visualizzazione, seleziona la politica. Per Politiche di filtro, inserisci AWSLambdaBasicExecutionRole. Una volta visualizzata, seleziona la politica gestita di AWSLambdaBasicExecutionRole.

8.    Scegli Avanti: Tag.

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

10.    Scegli Avanti: Revisione.

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

Aggiungere tag per le istanze DB

1.    Apri la console Amazon RDS.

2.    Nel riquadro di navigazione, scegli Database.

3.    Scegli l'istanza database che desideri avviare e arrestare automaticamente.

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

5.    Nella scheda Tag, scegli Aggiungi. Per Chiave Tag, inserisci autostart. Per Valore, inserisci . Scegli Aggiungi per salvare le modifiche.

6.    Scegli di nuovo Aggiungi. Per Chiave Ruolo, inserisci autostop. Per Valore, inserisci . Scegli Aggiungi per salvare le modifiche.

Per ulteriori informazioni, consulta Aggiungere, elencare e rimuovere i tag.

Crea una funzione Lambda per avviare le istanze database con tag

1.    Apri la console Lambda.

2.    Nel riquadro di navigazione, scegli Funzioni.

3.    Scegli Crea funzione.

4.    Scegli Autore da zero.

5.    In Nome funzione, inserisci il nome della tua funzione.

6.    Per Runtime, seleziona Python 3.7.

7.    Per Architecture, mantieni la selezione predefinita di x86_64.

8.    Espandi Cambia il ruolo di esecuzione predefinito.

9.    Per il Ruolo di esecuzione, seleziona Usa un ruolo esistente.

10.    In Ruolo esistente, seleziona il ruolo IAM che hai creato.

11.    Scegli Crea funzione.

12.    Scegli la scheda Codice.

13.    Nell'editor del Codice sorgente, elimina il codice di esempio e inserisci il codice seguente:

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)

14.    Scegli File, scegli Salva, quindi scegli Distribuisci.

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

16.    In Timeout, completa i seguenti campi:
Per min, seleziona 0.
Per sec, seleziona 10.

17.    Seleziona Salva.

Crea una funzione Lambda per interrompere le istanze database con tag

Per creare una funzione Lambda per interrompere le istanze DB con tag, vedere la sezione precedente Creare una funzione Lambda per avviare le istanze DB taggate. Segui gli stessi passaggi, ma usa un codice diverso per il passaggio 12.

Nell'editor del Codice sorgente, elimina il codice di esempio e inserisci il codice seguente:

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)

Esegui test di funzionalità

Per le istanze database con tag che si trovano nello stato Interrotto, completa i seguenti passaggi per eseguire il test delle funzioni:

1.    Apri l'elenco delle funzioni Lambda.

2.    Scegli la funzione che hai creato per avviare le istanze database.

3.    Scegli Azioni, quindi scegli Test.

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

5.    Scegli Salva modifiche, quindi scegli Test.

Crea la pianificazione

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

  • Avvia automaticamente l'istanza database 30 minuti prima dell'inizio della finestra di manutenzione.
  • Arresta automaticamente l'istanza database 30 minuti dopo la fine della finestra di manutenzione.

Per creare la regola per l'avvio automatico dell'istanza database 30 minuti prima della finestra di manutenzione, completa i seguenti passaggi:

1.    Apri l'elenco delle funzioni Lambda.

2.    Scegli la funzione che hai creato per avviare le istanze database.

3.    In Panoramica delle funzioni, scegli Aggiungi trigger.

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

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

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

7.    Scegli Aggiungi.

Usa 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 ? * SUN *)).

Informazioni correlate

Implementazione dello stop and start di un'istanza database in Amazon RDS

Arresto di un'istanza di database avviata automaticamente con Amazon RDS

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

AWS UFFICIALE
AWS UFFICIALEAggiornata un anno fa