Como posso usar uma função Lambda para interromper uma instância do Amazon RDS por mais de sete dias?

8 minuto de leitura
0

Quero usar o AWS Lambda para interromper um Amazon Relational Database Service (Amazon RDS) por mais de sete dias.

Breve descrição

Por padrão, você pode interromper uma instância de banco de dados do Amazon RDS por até sete dias por vez. Depois de sete dias, a instância é reiniciada para que não perca nenhuma atualização de manutenção.

Para interromper sua instância por mais de sete dias, você pode usar o Step Functions para automatizar o fluxo de trabalho sem perder uma janela de manutenção.

Observação: para obter uma solução alternativa, consulte Como posso usar o Step Functions para interromper uma instância do Amazon RDS por mais de sete dias?

Resolução

Configurar permissões do IAM

Criar uma política do AWS Identity and Access Management (IAM) para permitir que o Lambda inicie e interrompa a instância e recupere informações sobre a instância.

1.    Abra o console do IAM.

2.    No painel de navegação, selecione Policies (Políticas).

3.    Escolha Create policy (Criar política).

4.    Escolha a guia JSON.

5.    Para conceder as permissões necessárias do IAM, insira a seguinte política na guia 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.    Escolha Next (Avançar): Tags.

7.    (Opcional) Para adicionar uma tag, escolha Add tag (Adicionar tag) e insira os valores apropriados para os campos Key (Chave) e Value - optional (Valor - opcional).

8.    Escolha Next (Avançar): Revisar.

9.    Na página Revisar política, em Nome, insira o nome da sua política. Consulte a seção Resumo para ver as permissões concedidas pela sua política.

10.    Escolha Create policy (Criar política).

Para mais informações, consulte Creating policies using the JSON editor (Creating policies using the JSON editor).

Crie um perfil do IAM e, em seguida, anexe as políticas necessárias

1.    Abra o console do IAM.

2.    No painel de navegação, selecione Roles (Perfis).

3.    Escolha Create role (Criar perfil).

4.    Em Selecionar tipo de entidade confiável, selecione serviço da AWS.

5.    Em Ou selecione um serviço para ver seus casos de uso, selecione Lambda.

6.    Escolha Next (Avançar): Permissões.

7.    Em Filter-policies (Políticas de filtro), insira o nome da política que você criou na seção anterior. Depois que ela aparecer, selecione a política. Em Filter-policies (Políticas de filtro), insira AWSLambdaBasicExecutionRole. Depois que ela aparecer, selecione a política gerenciada AWSLambdaBasicExecutionRole.

8.    Escolha Next (Avançar): Tags.

9.    (Opcional) Para adicionar uma tag, insira os valores apropriados para os campos Chave e Valor (opcional).

10.    Escolha Next (Avançar): Revisar.

11.    Na página Create role (Criar perfil), em Role name (Nome da função), insira o nome da função que você está criando.

12.    Escolha Create role (Criar perfil).

Para mais informações, consulte Creating a role for an AWS service (console) (Criação de uma função para um serviço da AWS (console)).

Adicionar tags para instâncias de banco de dados

1.    Abra o console do Amazon RDS.

2.    No painel de navegação, escolha Bancos de dados.

3.    Escolha a instância de banco de dados que você deseja iniciar e interromper automaticamente.

4.    Na seção de detalhes, role para baixo até a seção Tags.

5.    Na guia Tags, escolha Add (Adicionar). Em Tag key (chave tag), insira autostart. Em Value (Valor), insira yes. Escolha Add (Adicionar) para salvar suas alterações.

6.    Escolha Adicionar novamente. Em Tag key (chave tag), insira autostop. Em Value (Valor), insira yes. Escolha Add (Adicionar) para salvar suas alterações.

Para mais informações, consulte Adding, listing, and removing tags (Adicionar, listar e remover tags).

Crie uma função do Lambda para iniciar as instâncias de banco de dados marcadas

1.    Abra o console do Lambda.

2.    No painel de navegação, escolha Functions (Funções).

3.    Escolha Create function (Criar função).

4.    Escolha Author from scratch (Criar do zero).

5.    Em Function name (Nome da função), insira o nome da sua função.

6.    Em Runtime, selecione Python 3.7.

7.    Para Arquitetura, mantenha a seleção padrão de x86_64.

8.    Expanda Alterar função de execução padrão.

9.    Em Execution role (Perfil de execução), selecione Use an existing role (Usar um perfil existente).

10.    Em Existing role (Perfil existente), selecione a função do IAM que você criou.

11.    Escolha Create function (Criar função).

12.    Escolha a guia Code (Código).

13.    No editor de Code source (Código-fonte), exclua o código de amostra e insira o seguinte código:

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.    Escolha File (Arquivo), escolha Save (Salvar) e, em seguida, escolha Deploy (Implantar).

15.    Escolha a guia Configuração, escolha Configuração geral e, em seguida, escolha Editar.

16.    Em Tempo limite, preencha os seguintes campos:
Para min., selecione 0.
Para seg., selecione 10.

17.    Escolha Save (Salvar).

Crie uma função do Lambda para interromper as instâncias de banco de dados marcadas

Para criar uma função do Lambda para interromper as instâncias de banco de dados marcadas, consulte a seção anterior Create a Lambda function to start the tagged DB instances (Criar uma função do Lambda para iniciar as instâncias de banco de dados marcadas). Siga as mesmas etapas, mas use um código diferente para a etapa 12.

No editor de Code source (Código-fonte), exclua o código de amostra e insira o seguinte código:

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)

Execute testes de função

Para instâncias de banco de dados marcadas que estão no estado Parado, conclua as etapas a seguir para realizar o teste de função:

1.    Abra a lista de Funções do Lambda.

2.    Escolha a função que você criou para iniciar as instâncias de banco de dados.

3.    Escolha Ações e, em seguida, Teste.

4.    Na guia Teste, em Nome insira o nome do seu evento.

5.    Escolha Save changes (Salvar alterações) e, em seguida, escolha Testar.

Criar o cronograma

É possível criar regras para configurar um cronograma. Por exemplo, se sua janela de manutenção semanal para as instâncias de banco de dados marcadas for de domingo, das 22h às 22h30, você poderá criar as seguintes regras:

  • Inicie automaticamente a instância de banco de dados 30 minutos antes do início da janela de manutenção.
  • Pare automaticamente a instância de banco de dados 30 minutos após o término da janela de manutenção.

Para criar a regra para iniciar automaticamente a instância de banco de dados 30 minutos antes da janela de manutenção, conclua as seguintes etapas:

1.    Abra a lista de Funções do Lambda.

2.    Escolha a função que você criou para iniciar as instâncias de banco de dados.

3.    Em Function overview (Visão geral da função), escolha Add trigger (Adicionar gatilho).

4.    Selecione EventBridge (CloudWatch Events) e, em seguida, selecione Create a new rule (Criar uma nova regra).

5.    Em Rule name (Nome da regra), insira o nome da regra que você deseja criar.

6.    Em Schedule Expression (Expressão de Cronograma), adicione uma expressão de cronograma para a programação automatizada (Exemplo: cron(30 21 ? * SUN *)).

7.    Escolha Add (Adicionar).

Use as mesmas instruções para criar outra regra para interromper automaticamente a instância de banco de dados 30 minutos após a janela de manutenção. Certifique-se de alterar adequadamente o nome da regra e a expressão de cronograma do agendamento automatizado (Exemplo: cron(00 23 ? * SUN *)).

Informações relacionadas

Implementando a parada e o início da instância de banco de dados no Amazon RDS

Interromper uma instância de banco de dados iniciada automaticamente com o Amazon RDS

Como posso interromper um cluster do Amazon Aurora por mais de sete dias?

AWS OFICIAL
AWS OFICIALAtualizada há um ano